/*
* 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.kie.workbench.common.stunner.core.client.api;
import java.util.Collection;
import javax.annotation.PostConstruct;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import org.jboss.errai.ioc.client.container.SyncBeanDef;
import org.jboss.errai.ioc.client.container.SyncBeanManager;
import org.kie.workbench.common.stunner.core.api.AbstractDefinitionManager;
import org.kie.workbench.common.stunner.core.definition.DefinitionSetProxy;
import org.kie.workbench.common.stunner.core.definition.adapter.AdapterManager;
import org.kie.workbench.common.stunner.core.definition.adapter.DefinitionAdapter;
import org.kie.workbench.common.stunner.core.definition.adapter.DefinitionSetAdapter;
import org.kie.workbench.common.stunner.core.definition.adapter.DefinitionSetRuleAdapter;
import org.kie.workbench.common.stunner.core.definition.adapter.MorphAdapter;
import org.kie.workbench.common.stunner.core.definition.adapter.PropertyAdapter;
import org.kie.workbench.common.stunner.core.definition.adapter.PropertySetAdapter;
import org.kie.workbench.common.stunner.core.registry.RegistryFactory;
@ApplicationScoped
public class ClientDefinitionManager extends AbstractDefinitionManager {
private final SyncBeanManager beanManager;
protected ClientDefinitionManager() {
super();
this.beanManager = null;
}
@Inject
public ClientDefinitionManager(final SyncBeanManager beanManager,
final RegistryFactory registryFactory,
final AdapterManager adapterManager) {
super(registryFactory,
adapterManager);
this.beanManager = beanManager;
}
@PostConstruct
@SuppressWarnings("unchecked")
public void init() {
// DefinitionSet client adapters.
Collection<SyncBeanDef<DefinitionSetAdapter>> beanDefSetAdapters = beanManager.lookupBeans(DefinitionSetAdapter.class);
for (SyncBeanDef<DefinitionSetAdapter> defSet : beanDefSetAdapters) {
DefinitionSetAdapter definitionSet = defSet.getInstance();
addAdapter(definitionSet);
}
// DefinitionSetRule client adapters.
Collection<SyncBeanDef<DefinitionSetRuleAdapter>> beanDefSetRuleAdapters = beanManager.lookupBeans(DefinitionSetRuleAdapter.class);
for (SyncBeanDef<DefinitionSetRuleAdapter> defSet : beanDefSetRuleAdapters) {
DefinitionSetRuleAdapter definitionSet = defSet.getInstance();
addAdapter(definitionSet);
}
// Definition client adapters.
Collection<SyncBeanDef<DefinitionAdapter>> beanDefAdapters = beanManager.lookupBeans(DefinitionAdapter.class);
for (SyncBeanDef<DefinitionAdapter> defSet : beanDefAdapters) {
DefinitionAdapter definitionSet = defSet.getInstance();
addAdapter(definitionSet);
}
// PropertySet client adapters.
Collection<SyncBeanDef<PropertySetAdapter>> beanPropSetAdapters = beanManager.lookupBeans(PropertySetAdapter.class);
for (SyncBeanDef<PropertySetAdapter> defSet : beanPropSetAdapters) {
PropertySetAdapter definitionSet = defSet.getInstance();
addAdapter(definitionSet);
}
// Property client adapters.
Collection<SyncBeanDef<PropertyAdapter>> beanPropAdapters = beanManager.lookupBeans(PropertyAdapter.class);
for (SyncBeanDef<PropertyAdapter> defSet : beanPropAdapters) {
PropertyAdapter definitionSet = defSet.getInstance();
addAdapter(definitionSet);
}
// Morph adapters.
Collection<SyncBeanDef<MorphAdapter>> beanMorphAdapters = beanManager.lookupBeans(MorphAdapter.class);
for (SyncBeanDef<MorphAdapter> morphAdapter : beanMorphAdapters) {
MorphAdapter instance = morphAdapter.getInstance();
addAdapter(instance);
}
// Once adapters present, add the Definition Sets found on current context.
Collection<SyncBeanDef<DefinitionSetProxy>> beanDefSets = beanManager.lookupBeans(DefinitionSetProxy.class);
for (SyncBeanDef<DefinitionSetProxy> defSet : beanDefSets) {
DefinitionSetProxy definitionSetProxy = defSet.getInstance();
Object definitionSet = definitionSetProxy.getDefinitionSet();
addDefinitionSet(definitionSet);
}
}
}