/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * Licensed 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 org.uberfire.ext.plugin.client.info; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import org.jboss.errai.ioc.client.container.IOC; import org.jboss.errai.ioc.client.container.SyncBeanDef; import org.uberfire.client.editor.JSEditorActivity; import org.uberfire.client.mvp.ActivityBeansInfo; import org.uberfire.client.perspective.JSWorkbenchPerspectiveActivity; import org.uberfire.client.screen.JSWorkbenchScreenActivity; import org.uberfire.client.splash.JSSplashScreenActivity; import org.uberfire.client.workbench.type.ClientResourceType; import org.uberfire.client.workbench.type.ClientTypeRegistry; import org.uberfire.ext.plugin.client.resources.i18n.CommonConstants; import org.uberfire.ext.plugin.client.type.DynamicMenuResourceType; import org.uberfire.ext.plugin.client.type.EditorPluginResourceType; import org.uberfire.ext.plugin.client.type.PerspectiveLayoutPluginResourceType; import org.uberfire.ext.plugin.client.type.ScreenPluginResourceType; import org.uberfire.ext.plugin.client.type.SplashPluginResourceType; import org.uberfire.ext.plugin.model.Activity; import org.uberfire.ext.plugin.model.Plugin; import org.uberfire.ext.plugin.model.PluginType; @ApplicationScoped public class PluginsInfo { private EditorPluginResourceType editorPluginResourceType; private PerspectiveLayoutPluginResourceType perspectiveLayoutPluginResourceType; private ScreenPluginResourceType screenPluginResourceType; private SplashPluginResourceType splashPluginResourceType; private DynamicMenuResourceType dynamicMenuResourceType; private ActivityBeansInfo activityBeansInfo; private ClientTypeRegistry clientTypeRegistry; public PluginsInfo() { } @Inject public PluginsInfo(EditorPluginResourceType editorPluginResourceType, PerspectiveLayoutPluginResourceType perspectiveLayoutPluginResourceType, ScreenPluginResourceType screenPluginResourceType, SplashPluginResourceType splashPluginResourceType, DynamicMenuResourceType dynamicMenuResourceType, ActivityBeansInfo activityBeansInfo, ClientTypeRegistry clientTypeRegistry) { this.editorPluginResourceType = editorPluginResourceType; this.perspectiveLayoutPluginResourceType = perspectiveLayoutPluginResourceType; this.screenPluginResourceType = screenPluginResourceType; this.splashPluginResourceType = splashPluginResourceType; this.dynamicMenuResourceType = dynamicMenuResourceType; this.activityBeansInfo = activityBeansInfo; this.clientTypeRegistry = clientTypeRegistry; } public Set<Activity> getAllPlugins(final Collection<Plugin> plugins) { Set<Activity> activities = new HashSet<Activity>(); Collection<Set<Activity>> groupedActivities = getClassifiedPlugins(plugins).values(); for (Set<Activity> groupOfActivities : groupedActivities) { activities.addAll(groupOfActivities); } return activities; } public Map<ClientResourceType, Set<Activity>> getClassifiedPlugins(final Collection<Plugin> plugins) { final Map<ClientResourceType, Set<Activity>> classified = new LinkedHashMap<ClientResourceType, Set<Activity>>(); classified.put(perspectiveLayoutPluginResourceType, new HashSet<Activity>()); classified.put(screenPluginResourceType, new HashSet<Activity>()); classified.put(editorPluginResourceType, new HashSet<Activity>()); classified.put(splashPluginResourceType, new HashSet<Activity>()); classified.put(dynamicMenuResourceType, new HashSet<Activity>()); for (final String screenId : activityBeansInfo.getAvailableWorkbenchScreensIds()) { classified.get(screenPluginResourceType).add(new Activity(screenId, PluginType.SCREEN)); } for (final String perspectiveId : activityBeansInfo.getAvailablePerspectivesIds()) { classified.get(perspectiveLayoutPluginResourceType).add(new Activity(perspectiveId, PluginType.PERSPECTIVE)); } for (final String editorId : activityBeansInfo.getAvailableWorkbenchEditorsIds()) { classified.get(editorPluginResourceType).add(new Activity(editorId, PluginType.EDITOR)); } for (final String splashId : activityBeansInfo.getAvailableSplashScreensIds()) { classified.get(splashPluginResourceType).add(new Activity(splashId, PluginType.SPLASH)); } for (final Plugin plugin : plugins) { final ClientResourceType type = clientTypeRegistry.resolve(plugin.getPath()); if (type != null) { classified.get(type).add(plugin); } } final Collection<SyncBeanDef<JSWorkbenchScreenActivity>> jsscreens = lookupBeans(JSWorkbenchScreenActivity.class); for (final SyncBeanDef<JSWorkbenchScreenActivity> beanDef : jsscreens) { classified.get(screenPluginResourceType).add(new Activity(beanDef.getName(), PluginType.SCREEN)); } final Collection<SyncBeanDef<JSWorkbenchPerspectiveActivity>> jsperspectives = lookupBeans(JSWorkbenchPerspectiveActivity.class); for (final SyncBeanDef<JSWorkbenchPerspectiveActivity> beanDef : jsperspectives) { classified.get(perspectiveLayoutPluginResourceType).add(new Activity(beanDef.getName(), PluginType.PERSPECTIVE)); } final Collection<SyncBeanDef<JSEditorActivity>> jseditors = lookupBeans(JSEditorActivity.class); for (final SyncBeanDef<JSEditorActivity> beanDef : jseditors) { classified.get(editorPluginResourceType).add(new Activity(beanDef.getName(), PluginType.EDITOR)); } final Collection<SyncBeanDef<JSSplashScreenActivity>> jssplashes = lookupBeans(JSSplashScreenActivity.class); for (final SyncBeanDef<JSSplashScreenActivity> beanDef : jssplashes) { classified.get(splashPluginResourceType).add(new Activity(beanDef.getName(), PluginType.SPLASH)); } return classified; } <T> Collection<SyncBeanDef<T>> lookupBeans(Class<T> clazz) { return IOC.getBeanManager().lookupBeans(clazz); } public Map<ClientResourceType, String> getPluginsTypeLabels() { final Map<ClientResourceType, String> labelsByResourceType = new HashMap<ClientResourceType, String>(); labelsByResourceType.put(perspectiveLayoutPluginResourceType, CommonConstants.INSTANCE.PerspectivePlugin()); labelsByResourceType.put(screenPluginResourceType, CommonConstants.INSTANCE.ScreenPlugin()); labelsByResourceType.put(editorPluginResourceType, CommonConstants.INSTANCE.EditorPlugin()); labelsByResourceType.put(splashPluginResourceType, CommonConstants.INSTANCE.SplashScreenPlugin()); labelsByResourceType.put(dynamicMenuResourceType, CommonConstants.INSTANCE.DynamicMenu()); return labelsByResourceType; } }