[ 
https://issues.apache.org/jira/browse/CB-10833?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15217731#comment-15217731
 ] 

ASF GitHub Bot commented on CB-10833:
-------------------------------------

Github user daserge commented on a diff in the pull request:

    https://github.com/apache/cordova-lib/pull/414#discussion_r57860731
  
    --- Diff: cordova-common/src/PluginManager.js ---
    @@ -0,0 +1,148 @@
    +/*
    +       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.
    +*/
    +
    +var Q = require('q');
    +var fs = require('fs');
    +var path = require('path');
    +
    +var ActionStack = require('./ActionStack');
    +var PlatformJson = require('./PlatformJson');
    +var CordovaError = require('./CordovaError/CordovaError');
    +var PlatformMunger = 
require('./ConfigChanges/ConfigChanges').PlatformMunger;
    +var PluginInfoProvider = require('./PluginInfo/PluginInfoProvider');
    +
    +/**
    + * @constructor
    + * @class PluginManager
    + * Represents an entity for adding/removing plugins for platforms
    + *
    + * @param {String} platform Platform name
    + * @param {Object} locations - Platform files and directories
    + * @param {IDEProject} ideProject The IDE project to add/remove plugin 
changes to/from
    + */
    +function PluginManager(platform, locations, ideProject) {
    +    this.platform = platform;
    +    this.locations = locations;
    +    this.project = ideProject;
    +
    +    var platformJson = PlatformJson.load(locations.root, platform);
    +    this.munger = new PlatformMunger(platform, locations.root, 
platformJson, new PluginInfoProvider());
    +}
    +
    +
    +/**
    + * @constructs PluginManager
    + * A convenience shortcut to new PluginManager(...)
    + *
    + * @param {String} platform Platform name
    + * @param {Object} locations - Platform files and directories
    + * @param {IDEProject} ideProject The IDE project to add/remove plugin 
changes to/from
    + * @returns new PluginManager instance
    + */
    +PluginManager.get = function(platform, locations, ideProject) {
    +    return new PluginManager(platform, locations, ideProject);
    +};
    +
    +PluginManager.INSTALL = 'install';
    +PluginManager.UNINSTALL = 'uninstall';
    +
    +module.exports = PluginManager;
    +
    +/**
    + * Describes and implements common plugin installation/uninstallation 
routine. The flow is the following:
    + *  * Validate and set defaults for options. Note that options are empty 
by default. Everything
    + *    needed for platform IDE project must be passed from outside. Plugin 
variables (which
    + *    are the part of the options) also must be already populated with 
'PACKAGE_NAME' variable.
    + *  * Collect all plugin's native and web files, get 
installers/uninstallers and process
    + *    all these via ActionStack.
    + *  * Save the IDE project, so the changes made by installers are 
persisted.
    + *  * Generate config changes munge for plugin and apply it to all 
required files
    + *  * Generate metadata for plugin and plugin modules and save it to 
'cordova_plugins.js'
    + *
    + * @param {PluginInfo} plugin A PluginInfo structure representing plugin 
to install
    + * @param {Object} [options={}] An installation options. It is expected 
but is not necessary
    + *   that options would contain 'variables' inner object with 
'PACKAGE_NAME' field set by caller.
    + *
    + * @returns {Promise} Returns a Q promise, either resolved in case of 
success, rejected otherwise.
    + */
    +PluginManager.prototype.doOperation = function (operation, plugin, 
options) {
    +    if (operation !== PluginManager.INSTALL && operation !== 
PluginManager.UNINSTALL)
    +        return Q.reject(new CordovaError('The parameter is incorrect. The 
opeation must be either "add" or "remove"'));
    +
    +    if (!plugin || plugin.constructor.name !== 'PluginInfo')
    +        return Q.reject(new CordovaError('The parameter is incorrect. The 
first parameter should be a PluginInfo instance'));
    +
    +    // Set default to empty object to play safe when accesing properties
    +    options = options || {};
    +
    +    var self = this;
    +    var actions = new ActionStack();
    +
    +    // gather all files need to be handled during operation ...
    +    plugin.getFilesAndFrameworks(this.platform)
    +        .concat(plugin.getAssets(this.platform))
    +        .concat(plugin.getJsModules(this.platform))
    +    // ... put them into stack ...
    +    .forEach(function(item) {
    +        var installer = self.project.getInstaller(item.itemType);
    +        var uninstaller = self.project.getUninstaller(item.itemType);
    +        var actionArgs = [item, plugin, self.project, options];
    +
    +        var action;
    +        if (operation === PluginManager.INSTALL) {
    +            action = actions.createAction.apply(actions, [installer, 
actionArgs, uninstaller, actionArgs]);
    +        } else /* op === PluginManager.INSTALL */{
    --- End diff --
    
    A typo? `/* op === PluginManager.INSTALL */` -> `/* op === 
PluginManager.UNINSTALL */`


> Deduplicate common logic for plugin installation/uninstallation in platforms
> ----------------------------------------------------------------------------
>
>                 Key: CB-10833
>                 URL: https://issues.apache.org/jira/browse/CB-10833
>             Project: Apache Cordova
>          Issue Type: Task
>          Components: Android, CordovaCommon, iOS, Windows
>            Reporter: Vladimir Kotikov
>            Assignee: Vladimir Kotikov
>




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to