Search in sources :

Example 26 with Plugin

use of com.qcadoo.plugin.api.Plugin in project qcadoo by qcadoo.

the class PluginAccessorTest method shouldSaveExistingPlugin.

@Test
public void shouldSaveExistingPlugin() throws Exception {
    // given
    InternalPlugin plugin1 = mock(InternalPlugin.class, "plugin1");
    given(plugin1.getIdentifier()).willReturn("identifier1");
    InternalPlugin plugin2 = mock(InternalPlugin.class);
    given(plugin2.getIdentifier()).willReturn("identifier1");
    QcadooPluginPlugin pluginsPlugin2 = mock(QcadooPluginPlugin.class);
    given(pluginsPlugin2.getIdentifier()).willReturn("identifier1");
    given(pluginsPlugin2.getState()).willReturn("ENABLED");
    given(pluginsPlugin2.getVersion()).willReturn("0.0.0");
    given(pluginDescriptorParser.loadPlugins()).willReturn(Sets.newHashSet(plugin1));
    given(pluginDao.list()).willReturn(Sets.<QcadooPluginPlugin>newHashSet(pluginsPlugin2));
    pluginAccessor.init();
    // when
    pluginAccessor.savePlugin(plugin2);
    // then
    assertEquals(1, pluginAccessor.getPlugins().size());
    assertThat(pluginAccessor.getPlugins(), hasItems((Plugin) plugin2));
}
Also used : InternalPlugin(com.qcadoo.plugin.internal.api.InternalPlugin) QcadooPluginPlugin(com.qcadoo.model.beans.qcadooPlugin.QcadooPluginPlugin) QcadooPluginPlugin(com.qcadoo.model.beans.qcadooPlugin.QcadooPluginPlugin) Plugin(com.qcadoo.plugin.api.Plugin) InternalPlugin(com.qcadoo.plugin.internal.api.InternalPlugin) Test(org.junit.Test)

Example 27 with Plugin

use of com.qcadoo.plugin.api.Plugin in project qcadoo by qcadoo.

the class PluginAccessorTest method shouldSaveNewPlugin.

@Test
public void shouldSaveNewPlugin() throws Exception {
    // given
    InternalPlugin plugin1 = mock(InternalPlugin.class, "plugin1");
    given(plugin1.getIdentifier()).willReturn("identifier1");
    QcadooPluginPlugin pluginsPlugin1 = mock(QcadooPluginPlugin.class);
    given(pluginsPlugin1.getIdentifier()).willReturn("identifier1");
    given(pluginsPlugin1.getState()).willReturn("ENABLED");
    given(pluginsPlugin1.getVersion()).willReturn("0.0.0");
    InternalPlugin plugin2 = mock(InternalPlugin.class);
    given(plugin2.getIdentifier()).willReturn("identifier2");
    given(pluginDescriptorParser.loadPlugins()).willReturn(Sets.newHashSet(plugin1));
    given(pluginDao.list()).willReturn(Sets.<QcadooPluginPlugin>newHashSet(pluginsPlugin1));
    pluginAccessor.init();
    // when
    pluginAccessor.savePlugin(plugin2);
    // then
    assertThat(pluginAccessor.getPlugins(), hasItems((Plugin) plugin1, (Plugin) plugin2));
}
Also used : InternalPlugin(com.qcadoo.plugin.internal.api.InternalPlugin) QcadooPluginPlugin(com.qcadoo.model.beans.qcadooPlugin.QcadooPluginPlugin) QcadooPluginPlugin(com.qcadoo.model.beans.qcadooPlugin.QcadooPluginPlugin) Plugin(com.qcadoo.plugin.api.Plugin) InternalPlugin(com.qcadoo.plugin.internal.api.InternalPlugin) Test(org.junit.Test)

Example 28 with Plugin

use of com.qcadoo.plugin.api.Plugin in project qcadoo by qcadoo.

the class PluginAccessorTest method shouldListAllPlugins.

@Test
public void shouldListAllPlugins() throws Exception {
    // given
    InternalPlugin plugin1 = mock(InternalPlugin.class, "plugin1");
    QcadooPluginPlugin pluginsPlugin1 = mock(QcadooPluginPlugin.class, "plugin1");
    given(plugin1.getIdentifier()).willReturn("identifier1");
    given(pluginsPlugin1.getIdentifier()).willReturn("identifier1");
    given(pluginsPlugin1.getVersion()).willReturn("0.0.0");
    given(plugin1.compareVersion(new Version(pluginsPlugin1.getVersion()))).willReturn(0);
    given(plugin1.hasState(PluginState.ENABLED)).willReturn(false);
    given(pluginsPlugin1.getState()).willReturn("DISABLED");
    QcadooPluginPlugin pluginsPlugin21 = mock(QcadooPluginPlugin.class, "plugin21");
    given(pluginsPlugin21.getIdentifier()).willReturn("identifier21");
    given(pluginsPlugin21.getState()).willReturn("ENABLED");
    InternalPlugin plugin22 = mock(InternalPlugin.class, "plugin22");
    given(plugin22.getIdentifier()).willReturn("identifier21");
    given(plugin22.hasState(PluginState.ENABLED)).willReturn(true);
    given(pluginsPlugin21.getVersion()).willReturn("0.0.0");
    given(plugin22.compareVersion(new Version(pluginsPlugin21.getVersion()))).willReturn(1);
    InternalPlugin plugin3 = mock(InternalPlugin.class, "plugin3");
    QcadooPluginPlugin pluginsPlugin3 = mock(QcadooPluginPlugin.class, "plugin3");
    given(plugin3.getIdentifier()).willReturn("identifier3");
    given(pluginsPlugin3.getIdentifier()).willReturn("identifier3");
    given(pluginsPlugin3.getVersion()).willReturn("0.0.0");
    given(plugin3.hasState(PluginState.ENABLED)).willReturn(true);
    given(plugin3.isSystemPlugin()).willReturn(true);
    given(pluginsPlugin3.getState()).willReturn("ENABLED");
    InternalPlugin plugin4 = mock(InternalPlugin.class, "plugin4");
    given(plugin4.getIdentifier()).willReturn("identifier4");
    given(plugin4.hasState(PluginState.ENABLED)).willReturn(false);
    Set<InternalPlugin> pluginsFromDescriptor = Sets.newHashSet(plugin1, plugin22, plugin3, plugin4);
    Set<QcadooPluginPlugin> pluginsFromDatabase = Sets.newHashSet(pluginsPlugin1, pluginsPlugin21, pluginsPlugin3);
    given(pluginDescriptorParser.loadPlugins()).willReturn(pluginsFromDescriptor);
    given(pluginDao.list()).willReturn(pluginsFromDatabase);
    // when
    pluginAccessor.init();
    // then
    verify(plugin1).changeStateTo(PluginState.DISABLED);
    verify(plugin22).changeStateTo(PluginState.ENABLED);
    verify(plugin3).changeStateTo(PluginState.ENABLED);
    verify(plugin4).changeStateTo(PluginState.ENABLING);
    assertThat(pluginAccessor.getPlugins(), hasItems((Plugin) plugin1, (Plugin) plugin22, (Plugin) plugin3, (Plugin) plugin4));
    assertThat(pluginAccessor.getEnabledPlugins(), hasItems((Plugin) plugin22, (Plugin) plugin3));
    assertThat(pluginAccessor.getEnabledPlugins(), not(hasItem((Plugin) plugin1)));
    assertThat(pluginAccessor.getEnabledPlugins(), not(hasItem((Plugin) plugin4)));
    assertThat(pluginAccessor.getSystemPlugins(), hasItem((Plugin) plugin3));
    assertEquals(plugin1, pluginAccessor.getPlugin("identifier1"));
    assertEquals(plugin22, pluginAccessor.getPlugin("identifier21"));
    assertEquals(plugin3, pluginAccessor.getPlugin("identifier3"));
    assertEquals(plugin4, pluginAccessor.getPlugin("identifier4"));
    assertNull(pluginAccessor.getEnabledPlugin("identifier1"));
    assertEquals(plugin22, pluginAccessor.getEnabledPlugin("identifier21"));
    assertEquals(plugin3, pluginAccessor.getEnabledPlugin("identifier3"));
    assertNull(pluginAccessor.getEnabledPlugin("identifier4"));
}
Also used : InternalPlugin(com.qcadoo.plugin.internal.api.InternalPlugin) QcadooPluginPlugin(com.qcadoo.model.beans.qcadooPlugin.QcadooPluginPlugin) Version(com.qcadoo.plugin.api.Version) QcadooPluginPlugin(com.qcadoo.model.beans.qcadooPlugin.QcadooPluginPlugin) Plugin(com.qcadoo.plugin.api.Plugin) InternalPlugin(com.qcadoo.plugin.internal.api.InternalPlugin) Test(org.junit.Test)

Example 29 with Plugin

use of com.qcadoo.plugin.api.Plugin in project qcadoo by qcadoo.

the class DefaultModuleFactoryAccessor method init.

@Override
public void init(final List<Plugin> pluginsToInitialize) {
    for (ModuleFactory<?> moduleFactory : moduleFactoryRegistry.values()) {
        moduleFactory.preInit();
        for (Plugin plugin : pluginsToInitialize) {
            for (Module module : ((InternalPlugin) plugin).getModules(moduleFactory)) {
                module.init();
            }
        }
        moduleFactory.postInit();
    }
    List<ModuleFactory<?>> factories = new ArrayList<ModuleFactory<?>>(moduleFactoryRegistry.values());
    List<Plugin> plugins = new ArrayList<Plugin>(pluginsToInitialize);
    for (ModuleFactory<?> moduleFactory : factories) {
        for (final Plugin plugin : plugins) {
            List<Module> modules = ((InternalPlugin) plugin).getModules(moduleFactory);
            for (final Module module : modules) {
                if (plugin.hasState(PluginState.ENABLED)) {
                    module.enableOnStartup();
                    MultiTenantUtil.doInMultiTenantContext(new MultiTenantCallback() {

                        @Override
                        public void invoke() {
                            module.multiTenantEnableOnStartup();
                        }
                    });
                }
            }
        }
    }
    Collections.reverse(factories);
    Collections.reverse(plugins);
    for (ModuleFactory<?> moduleFactory : factories) {
        for (final Plugin plugin : plugins) {
            List<Module> modules = ((InternalPlugin) plugin).getModules(moduleFactory);
            Collections.reverse(modules);
            for (final Module module : modules) {
                if (!plugin.hasState(PluginState.ENABLED) && !plugin.hasState(PluginState.ENABLING)) {
                    module.disableOnStartup();
                    MultiTenantUtil.doInMultiTenantContext(new MultiTenantCallback() {

                        @Override
                        public void invoke() {
                            module.multiTenantDisableOnStartup();
                        }
                    });
                }
            }
        }
    }
}
Also used : InternalPlugin(com.qcadoo.plugin.internal.api.InternalPlugin) MultiTenantCallback(com.qcadoo.tenant.api.MultiTenantCallback) ModuleFactory(com.qcadoo.plugin.api.ModuleFactory) ArrayList(java.util.ArrayList) Module(com.qcadoo.plugin.api.Module) Plugin(com.qcadoo.plugin.api.Plugin) InternalPlugin(com.qcadoo.plugin.internal.api.InternalPlugin)

Example 30 with Plugin

use of com.qcadoo.plugin.api.Plugin in project qcadoo by qcadoo.

the class DefaultPluginDependencyManager method getDependenciesToEnable.

private PluginDependencyResult getDependenciesToEnable(final List<Plugin> plugins, final Set<String> marked, final DirectedGraph<String, DefaultEdge> graph, final PluginStatusResolver pluginStatusResolver) {
    Set<PluginDependencyInformation> disabledDependencies = new HashSet<PluginDependencyInformation>();
    Set<PluginDependencyInformation> unsatisfiedDependencies = new HashSet<PluginDependencyInformation>();
    Set<String> argumentPluginIdentifiersSet = getArgumentIdentifiersSet(plugins);
    for (Plugin plugin : plugins) {
        if (marked.contains(plugin.getIdentifier())) {
            continue;
        }
        marked.add(plugin.getIdentifier());
        graph.addVertex(plugin.getIdentifier());
        for (PluginDependencyInformation dependencyInfo : plugin.getRequiredPlugins()) {
            Plugin requiredPlugin = pluginAccessor.getPlugin(dependencyInfo.getIdentifier());
            if (requiredPlugin == null) {
                if (!argumentPluginIdentifiersSet.contains(dependencyInfo.getIdentifier())) {
                    unsatisfiedDependencies.add(dependencyInfo);
                }
                continue;
            }
            graph.addVertex(dependencyInfo.getIdentifier());
            graph.addEdge(plugin.getIdentifier(), dependencyInfo.getIdentifier());
            if (!isPluginDisabled(requiredPlugin, pluginStatusResolver)) {
                continue;
            }
            if (dependencyInfo.contains(requiredPlugin.getVersion())) {
                disabledDependencies.add(dependencyInfo);
                PluginDependencyResult nextLevelDependencioesResult = getDependenciesToEnable(Collections.singletonList(requiredPlugin), marked, graph, pluginStatusResolver);
                if (!nextLevelDependencioesResult.getUnsatisfiedDependencies().isEmpty() || nextLevelDependencioesResult.isCyclic()) {
                    return nextLevelDependencioesResult;
                }
                disabledDependencies.addAll(nextLevelDependencioesResult.getDependenciesToEnable());
            } else {
                unsatisfiedDependencies.add(dependencyInfo);
            }
        }
    }
    if (!unsatisfiedDependencies.isEmpty()) {
        return PluginDependencyResultImpl.unsatisfiedDependencies(unsatisfiedDependencies);
    }
    if (disabledDependencies.isEmpty()) {
        return PluginDependencyResultImpl.satisfiedDependencies();
    }
    Iterator<PluginDependencyInformation> dependencyInfoIterator = disabledDependencies.iterator();
    while (dependencyInfoIterator.hasNext()) {
        if (argumentPluginIdentifiersSet.contains(dependencyInfoIterator.next().getIdentifier())) {
            dependencyInfoIterator.remove();
        }
    }
    return PluginDependencyResultImpl.dependenciesToEnable(disabledDependencies);
}
Also used : PluginDependencyResult(com.qcadoo.plugin.api.PluginDependencyResult) PluginDependencyInformation(com.qcadoo.plugin.api.PluginDependencyInformation) HashSet(java.util.HashSet) Plugin(com.qcadoo.plugin.api.Plugin)

Aggregations

Plugin (com.qcadoo.plugin.api.Plugin)71 InternalPlugin (com.qcadoo.plugin.internal.api.InternalPlugin)59 Test (org.junit.Test)58 PluginDependencyResult (com.qcadoo.plugin.api.PluginDependencyResult)38 PluginDependencyInformation (com.qcadoo.plugin.api.PluginDependencyInformation)28 HashSet (java.util.HashSet)25 ArrayList (java.util.ArrayList)15 QcadooPluginPlugin (com.qcadoo.model.beans.qcadooPlugin.QcadooPluginPlugin)13 DefaultPlugin (com.qcadoo.plugin.internal.DefaultPlugin)11 PluginOperationResult (com.qcadoo.plugin.api.PluginOperationResult)8 Version (com.qcadoo.plugin.api.Version)8 SimplePluginStatusResolver (com.qcadoo.plugin.internal.dependencymanager.SimplePluginStatusResolver)8 Lists.newArrayList (com.google.common.collect.Lists.newArrayList)6 InOrder (org.mockito.InOrder)6 ModuleFactory (com.qcadoo.plugin.api.ModuleFactory)5 VersionOfDependency (com.qcadoo.plugin.api.VersionOfDependency)4 Entity (com.qcadoo.model.api.Entity)2 EntityList (com.qcadoo.model.api.EntityList)2 Module (com.qcadoo.plugin.api.Module)2 PluginException (com.qcadoo.plugin.internal.PluginException)2