ignite-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From akuznet...@apache.org
Subject ignite git commit: IGNITE-2363 Rename database to dialect.
Date Mon, 25 Jan 2016 08:00:42 GMT
Repository: ignite
Updated Branches:
  refs/heads/ignite-843-rc2 bcb66dbfb -> 4a193dff6


IGNITE-2363 Rename database to dialect.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/4a193dff
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/4a193dff
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/4a193dff

Branch: refs/heads/ignite-843-rc2
Commit: 4a193dff661e390ed2d0e2fa66f253dfd93554aa
Parents: bcb66db
Author: vsisko <vsisko@gridgain.com>
Authored: Mon Jan 25 15:00:38 2016 +0700
Committer: Alexey Kuznetsov <akuznetsov@apache.org>
Committed: Mon Jan 25 15:00:38 2016 +0700

----------------------------------------------------------------------
 .../configuration/summary/summary.controller.js | 12 +++------
 .../main/js/controllers/caches-controller.js    |  8 +++---
 .../src/main/js/controllers/common-module.js    |  4 +--
 .../src/main/js/controllers/models/caches.json  | 16 +++++------
 modules/control-center-web/src/main/js/db.js    |  2 +-
 .../js/helpers/generator/generator-common.js    |  8 ++----
 .../main/js/helpers/generator/generator-java.js | 14 +++-------
 .../main/js/helpers/generator/generator-pom.js  | 13 +++------
 .../helpers/generator/generator-properties.js   |  2 +-
 .../main/js/helpers/generator/generator-xml.js  | 28 ++++++++++----------
 .../src/main/js/views/includes/controls.jade    |  2 +-
 11 files changed, 43 insertions(+), 66 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/4a193dff/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.controller.js
b/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.controller.js
index c3761cc..fc816c9 100644
--- a/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.controller.js
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.controller.js
@@ -189,16 +189,10 @@ export default [
 
             _.forEach(cluster.caches, (cache) => {
                 if (cache.cacheStoreFactory) {
-                    //const store = cache.cacheStoreFactory[cache.cacheStoreFactory.kind];
-                    //
-                    //if (store && store.dialect)
-                    //    $scope.dialects[store.dialect] = true;
+                    const store = cache.cacheStoreFactory[cache.cacheStoreFactory.kind];
 
-                    if (cache.cacheStoreFactory.kind === 'CacheJdbcPojoStoreFactory')
-                        $scope.dialects[cache.cacheStoreFactory.CacheJdbcPojoStoreFactory.dialect]
= true;
-
-                    if (cache.cacheStoreFactory.kind === 'CacheJdbcBlobStoreFactory')
-                        $scope.dialects[cache.cacheStoreFactory.CacheJdbcBlobStoreFactory.database]
= true;
+                    if (store && store.dialect)
+                        $scope.dialects[store.dialect] = true;
                 }
 
                 _.forEach(cache.domains, (domain) => {

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a193dff/modules/control-center-web/src/main/js/controllers/caches-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/caches-controller.js b/modules/control-center-web/src/main/js/controllers/caches-controller.js
index 8ddea36..b4f3da2 100644
--- a/modules/control-center-web/src/main/js/controllers/caches-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/caches-controller.js
@@ -473,7 +473,7 @@ consoleModule.controller('cachesController', [
             });
 
             if (!checkRes.checked) {
-                return showPopoverMessage($scope.panels, 'store', checkRes.firstCache.cacheStoreFactory.kind
=== 'CacheJdbcPojoStoreFactory' ? 'dialect' : 'database',
+                return showPopoverMessage($scope.panels, 'store', checkRes.firstCache.cacheStoreFactory.kind
=== 'CacheJdbcPojoStoreFactory' ? 'pojoDialect' : 'blobDialect',
                     'Found cache "' + checkRes.secondCache.name + '" in cluster "' + failCluster.label
+ '" ' +
                     'with the same data source bean name "' + checkRes.firstCache.cacheStoreFactory[checkRes.firstCache.cacheStoreFactory.kind].dataSourceBean
+
                     '" and different database: "' + $common.cacheStoreJdbcDialectsLabel(checkRes.firstDB)
+ '" in current cache and "' +
@@ -509,7 +509,7 @@ consoleModule.controller('cachesController', [
                         return false;
 
                     if (!storeFactory.dialect)
-                        return showPopoverMessage($scope.panels, 'store', 'dialect',
+                        return showPopoverMessage($scope.panels, 'store', 'pojoDialect',
                             'Dialect should not be empty');
 
                     if (!checkDataSources())
@@ -534,8 +534,8 @@ consoleModule.controller('cachesController', [
                         if (!$common.isValidJavaIdentifier('Data source bean', storeFactory.dataSourceBean,
'dataSourceBean', $scope.panels, 'store'))
                             return false;
 
-                        if (!storeFactory.database)
-                            return showPopoverMessage($scope.panels, 'store', 'database',
+                        if (!storeFactory.dialect)
+                            return showPopoverMessage($scope.panels, 'store', 'blobDialect',
                                 'Database should not be empty');
 
                         if (!checkDataSources())

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a193dff/modules/control-center-web/src/main/js/controllers/common-module.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/common-module.js b/modules/control-center-web/src/main/js/controllers/common-module.js
index 57d96ae..f88379f 100644
--- a/modules/control-center-web/src/main/js/controllers/common-module.js
+++ b/modules/control-center-web/src/main/js/controllers/common-module.js
@@ -709,8 +709,8 @@ consoleModule.service('$common', [
             var secondDs = extractDataSource(secondCache);
 
             if (firstDs && secondDs) {
-                var firstDB = firstDs.dialect || firstDs.database;
-                var secondDB = secondDs.dialect || secondDs.database;
+                var firstDB = firstDs.dialect;
+                var secondDB = secondDs.dialect;
 
                 if (firstDs.dataSourceBean === secondDs.dataSourceBean && firstDB
!== secondDB) {
                     return {

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a193dff/modules/control-center-web/src/main/js/controllers/models/caches.json
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/models/caches.json b/modules/control-center-web/src/main/js/controllers/models/caches.json
index dc17a61..6693082 100644
--- a/modules/control-center-web/src/main/js/controllers/models/caches.json
+++ b/modules/control-center-web/src/main/js/controllers/models/caches.json
@@ -424,7 +424,7 @@
                 },
                 {
                   "label": "Dialect",
-                  "id": "dialect",
+                  "id": "pojoDialect",
                   "type": "dropdown",
                   "path": "cacheStoreFactory.CacheJdbcPojoStoreFactory",
                   "model": "dialect",
@@ -473,7 +473,7 @@
                   "path": "cacheStoreFactory.CacheJdbcBlobStoreFactory",
                   "model": "connectionUrl",
                   "required": true,
-                  "hide": "backupItem.cacheStoreFactory.CacheJdbcBlobStoreFactory.connectVia
== 'DataSource'",
+                  "hide": "backupItem.cacheStoreFactory.CacheJdbcBlobStoreFactory.connectVia
!== 'URL'",
                   "tip": [
                     "URL for database access, for example: jdbc:h2:mem:myDatabase"
                   ]
@@ -485,7 +485,7 @@
                   "path": "cacheStoreFactory.CacheJdbcBlobStoreFactory",
                   "model": "user",
                   "required": true,
-                  "hide": "backupItem.cacheStoreFactory.CacheJdbcBlobStoreFactory.connectVia
== 'DataSource'",
+                  "hide": "backupItem.cacheStoreFactory.CacheJdbcBlobStoreFactory.connectVia
!== 'URL'",
                   "tip": [
                     "User name for database access"
                   ]
@@ -493,7 +493,7 @@
                 {
                   "label": "Note, password will be generated as stubs.",
                   "type": "label",
-                  "hide": "backupItem.cacheStoreFactory.CacheJdbcBlobStoreFactory.connectVia
== 'DataSource'"
+                  "hide": "backupItem.cacheStoreFactory.CacheJdbcBlobStoreFactory.connectVia
!== 'URL'"
                 },
                 {
                   "label": "Data source bean name",
@@ -503,21 +503,21 @@
                   "model": "dataSourceBean",
                   "required": true,
                   "placeholder": "Bean name in Spring context",
-                  "hide": "backupItem.cacheStoreFactory.CacheJdbcBlobStoreFactory.connectVia
== 'URL'",
+                  "hide": "backupItem.cacheStoreFactory.CacheJdbcBlobStoreFactory.connectVia
 !== 'DataSource'",
                   "tip": [
                     "Name of the data source bean in Spring context"
                   ]
                 },
                 {
                   "label": "Database",
-                  "id": "database",
+                  "id": "blobDialect",
                   "type": "dropdown",
                   "path": "cacheStoreFactory.CacheJdbcBlobStoreFactory",
-                  "model": "database",
+                  "model": "dialect",
                   "required": true,
                   "placeholder": "Choose database",
                   "items": "cacheStoreJdbcDialects",
-                  "hide": "backupItem.cacheStoreFactory.CacheJdbcBlobStoreFactory.connectVia
== 'URL'",
+                  "hide": "backupItem.cacheStoreFactory.CacheJdbcBlobStoreFactory.connectVia
 !== 'DataSource'",
                   "tip": [
                     "Database:",
                     "<ul>",

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a193dff/modules/control-center-web/src/main/js/db.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/db.js b/modules/control-center-web/src/main/js/db.js
index 7e0c30f..77e5850 100644
--- a/modules/control-center-web/src/main/js/db.js
+++ b/modules/control-center-web/src/main/js/db.js
@@ -150,7 +150,7 @@ var CacheSchema = new Schema({
             connectionUrl: String,
             user: String,
             dataSourceBean: String,
-            database: {
+            dialect: {
                 type: String,
                 enum: ['Generic', 'Oracle', 'DB2', 'SQLServer', 'MySQL', 'PostgreSQL', 'H2']
             },

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a193dff/modules/control-center-web/src/main/js/helpers/generator/generator-common.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/helpers/generator/generator-common.js
b/modules/control-center-web/src/main/js/helpers/generator/generator-common.js
index 993e5d8..973d7cb 100644
--- a/modules/control-center-web/src/main/js/helpers/generator/generator-common.js
+++ b/modules/control-center-web/src/main/js/helpers/generator/generator-common.js
@@ -442,13 +442,9 @@ $generatorCommon.IGFS_IPC_CONFIGURATION = {
 // Check that cache has datasource.
 $generatorCommon.cacheHasDatasource = function (cache) {
     if (cache.cacheStoreFactory && cache.cacheStoreFactory.kind) {
-        var factoryKind = cache.cacheStoreFactory.kind;
+        var storeFactory = cache.cacheStoreFactory[cache.cacheStoreFactory.kind];
 
-        var storeFactory = cache.cacheStoreFactory[factoryKind];
-
-        if (storeFactory && (storeFactory.dialect || storeFactory.database)) {
-            return true;
-        }
+        return !!(storeFactory && (storeFactory.connectVia ? (storeFactory.connectVia
=== 'DataSource' ? storeFactory.dialect : false) : storeFactory.dialect));
     }
 
     return false;

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a193dff/modules/control-center-web/src/main/js/helpers/generator/generator-java.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/helpers/generator/generator-java.js b/modules/control-center-web/src/main/js/helpers/generator/generator-java.js
index 7343e7a..abb2b4a 100644
--- a/modules/control-center-web/src/main/js/helpers/generator/generator-java.js
+++ b/modules/control-center-web/src/main/js/helpers/generator/generator-java.js
@@ -1024,18 +1024,14 @@ $generatorJava.cacheQuery = function (cache, varName, res) {
  * @param res Resulting output with generated code.
  */
 $generatorJava.cacheStoreDataSource = function (storeFactory, res) {
-    var dialect = storeFactory.dialect || (storeFactory.connectVia === 'DataSource' ? storeFactory.database
: undefined);
+    var dialect = storeFactory.connectVia ? (storeFactory.connectVia === 'DataSource' ? storeFactory.dialect
: undefined) : storeFactory.dialect;
 
     if (dialect) {
         var varName = 'dataSource';
 
         var dataSourceBean = storeFactory.dataSourceBean;
 
-        var dsClsName = $generatorCommon.dataSourceClassName(dialect);
-
-        var varType = res.importClass(dsClsName);
-
-        var beanClassName = $commonUtils.toJavaName(varType, dataSourceBean);
+        var varType = res.importClass($generatorCommon.dataSourceClassName(dialect));
 
         res.line('public static final ' + varType + ' INSTANCE_' + dataSourceBean + ' = create'
+ dataSourceBean + '();');
 
@@ -1169,8 +1165,6 @@ $generatorJava.cacheStore = function (cache, domains, cacheVarName,
res) {
                 res.line('/** {@inheritDoc} */');
                 res.startBlock('@Override public ' + res.importClass('org.apache.ignite.cache.store.jdbc.CacheJdbcPojoStore')
+ ' create() {');
 
-                var beanClassName = $generatorJava.dataSourceClassName(res, storeFactory);
-
                 res.line('setDataSource(DataSources.INSTANCE_' + storeFactory.dataSourceBean
+ ');');
 
                 res.needEmptyLine = true;
@@ -1220,8 +1214,6 @@ $generatorJava.cacheStore = function (cache, domains, cacheVarName,
res) {
                     res.line('/** {@inheritDoc} */');
                     res.startBlock('@Override public ' + res.importClass('org.apache.ignite.cache.store.jdbc.CacheJdbcBlobStore')
+ ' create() {');
 
-                    beanClassName = $generatorJava.dataSourceClassName(res, storeFactory);
-
                     res.line('setDataSource(DataSources.INSTANCE_' + storeFactory.dataSourceBean
+ ');');
 
                     res.needEmptyLine = true;
@@ -2480,7 +2472,7 @@ $generatorJava.cluster = function (cluster, pkg, javaClass, clientNearCfg)
{
  * @returns {*} Data source class name.
  */
 $generatorJava.dataSourceClassName = function (res, storeFactory) {
-    var dialect = storeFactory.dialect || (storeFactory.connectVia === 'DataSource' ? storeFactory.database
: undefined);
+    var dialect = storeFactory.connectVia ? (storeFactory.connectVia === 'DataSource' ? storeFactory.dialect
: undefined) : storeFactory.dialect;
 
     if (dialect) {
         var dataSourceBean = storeFactory.dataSourceBean;

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a193dff/modules/control-center-web/src/main/js/helpers/generator/generator-pom.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/helpers/generator/generator-pom.js b/modules/control-center-web/src/main/js/helpers/generator/generator-pom.js
index cac9c2e..10ddcf1 100644
--- a/modules/control-center-web/src/main/js/helpers/generator/generator-pom.js
+++ b/modules/control-center-web/src/main/js/helpers/generator/generator-pom.js
@@ -75,16 +75,11 @@ $generatorPom.pom = function (cluster, igniteVersion, mvnRepositories,
res) {
     var dialect = {};
 
     _.forEach(caches, function (cache) {
-        if (cache.cacheStoreFactory && cache.cacheStoreFactory.kind === 'CacheJdbcPojoStoreFactory')
{
-            if (cache.cacheStoreFactory.CacheJdbcPojoStoreFactory) {
-                dialect[cache.cacheStoreFactory.CacheJdbcPojoStoreFactory.dialect] = true;
-            }
-        }
+        if (cache.cacheStoreFactory && cache.cacheStoreFactory.kind) {
+            const storeFactory = cache.cacheStoreFactory[cache.cacheStoreFactory.kind];
 
-        if (cache.cacheStoreFactory && cache.cacheStoreFactory.kind === 'CacheJdbcBlobStoreFactory')
{
-            if (cache.cacheStoreFactory.CacheJdbcBlobStoreFactory && cache.cacheStoreFactory.CacheJdbcBlobStoreFactory.connectVia
=== 'DataSource') {
-                dialect[cache.cacheStoreFactory.CacheJdbcBlobStoreFactory.database] = true;
-            }
+            if (storeFactory.dialect && (!storeFactory.connectVia || storeFactory.connectVia
=== 'DataSource'))
+                dialect[storeFactory.dialect] = true;
         }
     });
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a193dff/modules/control-center-web/src/main/js/helpers/generator/generator-properties.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/helpers/generator/generator-properties.js
b/modules/control-center-web/src/main/js/helpers/generator/generator-properties.js
index 16d892d..56dea8f 100644
--- a/modules/control-center-web/src/main/js/helpers/generator/generator-properties.js
+++ b/modules/control-center-web/src/main/js/helpers/generator/generator-properties.js
@@ -52,7 +52,7 @@ $generatorProperties.dataSourcesProperties = function (cluster, res) {
             if (cache.cacheStoreFactory && cache.cacheStoreFactory.kind) {
                 var storeFactory = cache.cacheStoreFactory[cache.cacheStoreFactory.kind];
 
-                var dialect = storeFactory.dialect || (storeFactory.connectVia === 'DataSource'
? storeFactory.database : undefined);
+                var dialect = storeFactory.connectVia ? (storeFactory.connectVia === 'DataSource'
? storeFactory.dialect : undefined): storeFactory.dialect;
 
                 if (dialect) {
                     if (!res) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a193dff/modules/control-center-web/src/main/js/helpers/generator/generator-xml.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/helpers/generator/generator-xml.js b/modules/control-center-web/src/main/js/helpers/generator/generator-xml.js
index 16986f2..a4925cf 100644
--- a/modules/control-center-web/src/main/js/helpers/generator/generator-xml.js
+++ b/modules/control-center-web/src/main/js/helpers/generator/generator-xml.js
@@ -280,7 +280,7 @@ $generatorXml.clusterGeneral = function (cluster, res) {
 
                 if (d.S3) {
                     if (d.S3.bucketName)
-                        res.line('<property name="bucketName" value="' + $generatorXml.escape(d.S3.bucketName)
+ '" />');
+                        res.line('<property name="bucketName" value="' + $generatorXml.escape(d.S3.bucketName)
+ '"/>');
                 }
 
                 res.endBlock('</bean>');
@@ -852,7 +852,7 @@ $generatorXml.cacheStore = function(cache, domains, res) {
                 else {
                     $generatorXml.property(res, storeFactory, 'connectionUrl');
                     $generatorXml.property(res, storeFactory, 'user');
-                    res.line('<property name="password" value="${ds.' + storeFactory.user
+ '.password}" />');
+                    res.line('<property name="password" value="${ds.' + storeFactory.user
+ '.password}"/>');
                 }
 
                 $generatorXml.property(res, storeFactory, 'initSchema');
@@ -868,14 +868,14 @@ $generatorXml.cacheStore = function(cache, domains, res) {
             else
                 $generatorXml.beanProperty(res, storeFactory, 'cacheStoreFactory', $generatorCommon.STORE_FACTORIES[factoryKind],
true);
 
-            if (storeFactory.dataSourceBean && (storeFactory.dialect || (storeFactory.connectVia
=== 'DataSource' ? storeFactory.database : undefined))) {
+            if (storeFactory.dataSourceBean && (storeFactory.connectVia ? (storeFactory.connectVia
=== 'DataSource' ? storeFactory.dialect : undefined) : storeFactory.dialect)) {
                 if (_.findIndex(res.datasources, function (ds) {
                         return ds.dataSourceBean === storeFactory.dataSourceBean;
                     }) < 0) {
                     res.datasources.push({
                         dataSourceBean: storeFactory.dataSourceBean,
-                        className: $generatorCommon.DATA_SOURCES[storeFactory.dialect ||
storeFactory.database],
-                        dialect: storeFactory.dialect || storeFactory.database
+                        className: $generatorCommon.DATA_SOURCES[storeFactory.dialect],
+                        dialect: storeFactory.dialect
                     });
                 }
             }
@@ -1470,29 +1470,29 @@ $generatorXml.generateDataSources = function (datasources, res) {
 
             switch (item.dialect) {
                 case 'Generic':
-                    res.line('<property name="jdbcUrl" value="${' + beanId + '.jdbc.url}"
/>');
+                    res.line('<property name="jdbcUrl" value="${' + beanId + '.jdbc.url}"/>');
 
                     break;
 
                 case 'DB2':
-                    res.line('<property name="serverName" value="${' + beanId + '.jdbc.server_name}"
/>');
-                    res.line('<property name="portNumber" value="${' + beanId + '.jdbc.port_number}"
/>');
-                    res.line('<property name="databaseName" value="${' + beanId + '.jdbc.database_name}"
/>');
-                    res.line('<property name="driverType" value="${' + beanId + '.jdbc.driver_type}"
/>');
+                    res.line('<property name="serverName" value="${' + beanId + '.jdbc.server_name}"/>');
+                    res.line('<property name="portNumber" value="${' + beanId + '.jdbc.port_number}"/>');
+                    res.line('<property name="databaseName" value="${' + beanId + '.jdbc.database_name}"/>');
+                    res.line('<property name="driverType" value="${' + beanId + '.jdbc.driver_type}"/>');
 
                     break;
 
                 case 'PostgreSQL':
-                    res.line('<property name="url" value="${' + beanId + '.jdbc.url}"
/>');
+                    res.line('<property name="url" value="${' + beanId + '.jdbc.url}"/>');
 
                     break;
 
                 default:
-                    res.line('<property name="URL" value="${' + beanId + '.jdbc.url}"
/>');
+                    res.line('<property name="URL" value="${' + beanId + '.jdbc.url}"/>');
             }
 
-            res.line('<property name="user" value="${' + beanId + '.jdbc.username}" />');
-            res.line('<property name="password" value="${' + beanId + '.jdbc.password}"
/>');
+            res.line('<property name="user" value="${' + beanId + '.jdbc.username}"/>');
+            res.line('<property name="password" value="${' + beanId + '.jdbc.password}"/>');
 
             res.endBlock('</bean>');
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a193dff/modules/control-center-web/src/main/js/views/includes/controls.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/includes/controls.jade b/modules/control-center-web/src/main/js/views/includes/controls.jade
index 2f20072..72f8fbc 100644
--- a/modules/control-center-web/src/main/js/views/includes/controls.jade
+++ b/modules/control-center-web/src/main/js/views/includes/controls.jade
@@ -153,7 +153,7 @@ mixin details-row(lblClasses, fieldClasses)
     - var customValidators = {'ng-attr-ipaddress': '{{detail.ipaddress}}'}
 
     div(ng-switch='detail.type')
-        div(ng-switch-when='label')
+        div(ng-switch-when='label' ng-hide=detailHide)
             label {{::detail.label}}
         div.checkbox(ng-switch-when='check' ng-hide=detailHide)
             label(id='{{::detail.id}}')


Mime
View raw message