Search in sources :

Example 6 with IPluginContext

use of com.qlangtech.tis.util.IPluginContext in project tis by qlangtech.

the class Descriptor method buildPluginInstance.

private <TARGET> TARGET buildPluginInstance(IPluginContext pluginContext, Map<String, JSONObject> keyValMap, ParseDescribable<TARGET> result, PluginFormProperties propertyTypes) {
    TARGET describable = result.instance;
    String attr;
    PropertyType attrDesc;
    JSONObject valJ;
    String impl;
    Descriptor descriptor;
    String attrVal;
    for (Map.Entry<String, PropertyType> entry : propertyTypes.getKVTuples()) {
        attr = entry.getKey();
        attrDesc = entry.getValue();
        valJ = keyValMap.get(attr);
        if (valJ == null && attrDesc.isInputRequired()) {
            throw new IllegalStateException("prop:" + attr + " can not be empty");
        }
        if (valJ == null) {
            valJ = new JSONObject();
        }
        if (attrDesc.isDescribable()) {
            JSONObject descVal = valJ.getJSONObject("descVal");
            impl = descVal.getString("impl");
            descriptor = TIS.get().getDescriptor(impl);
            if (descriptor == null) {
                throw new IllegalStateException("impl:" + impl + " relevant descripotor can not be null");
            }
            ParseDescribable vals = descriptor.newInstance(pluginContext, parseAttrValMap(descVal.get("vals")), Optional.empty());
            attrDesc.setVal(describable, vals.instance);
        } else {
            if (attrDesc.typeIdentity() == FormFieldType.MULTI_SELECTABLE.getIdentity()) {
                List<FormFieldType.SelectedItem> selectedItems = getSelectedMultiItems(valJ);
                List<String> multi = selectedItems.stream().filter((item) -> item.isChecked()).map((item) -> (String) item.getValue()).collect(Collectors.toList());
                attrDesc.setVal(describable, multi);
            } else {
                boolean containVal = valJ.containsKey(KEY_primaryVal) && StringUtils.isNotBlank(valJ.getString(KEY_primaryVal));
                // describable
                if (!containVal && attrDesc.isInputRequired()) {
                    throw new IllegalStateException("prop:" + attr + " can not be empty");
                }
                if (containVal) {
                    attrVal = valJ.getString(KEY_primaryVal);
                    attrDesc.setVal(describable, attrVal);
                    if (valJ.containsKey(KEY_OPTIONS)) {
                        JSONArray options = valJ.getJSONArray(KEY_OPTIONS);
                        JSONObject opt = null;
                        for (int i = 0; i < options.size(); i++) {
                            opt = options.getJSONObject(i);
                            try {
                                // 将options中的选中的插件来源记录下来,后续在集群中各组件中传输插件可以用
                                if (StringUtils.equals(attrVal, opt.getString("name"))) {
                                    Class<?> implClass = TIS.get().pluginManager.uberClassLoader.loadClass(opt.getString("impl"));
                                    PluginWrapper pluginWrapper = TIS.get().pluginManager.whichPlugin(implClass);
                                    XStream2.PluginMeta pluginMeta = pluginWrapper.getDesc();
                                    result.extraPluginMetas.add(pluginMeta);
                                    break;
                                }
                            } catch (ClassNotFoundException e) {
                                throw new RuntimeException(e);
                            }
                        }
                    }
                }
            }
        }
    }
    return describable;
}
Also used : StringUtils(org.apache.commons.lang.StringUtils) java.util(java.util) XStream2(com.qlangtech.tis.util.XStream2) TIS(com.qlangtech.tis.TIS) ClassUtils(org.apache.commons.lang.ClassUtils) ISelectedTab(com.qlangtech.tis.plugin.ds.ISelectedTab) Option(com.qlangtech.tis.manage.common.Option) FormField(com.qlangtech.tis.plugin.annotation.FormField) SubForm(com.qlangtech.tis.plugin.annotation.SubForm) Callable(java.util.concurrent.Callable) Context(com.alibaba.citrus.turbine.Context) IFieldErrorHandler(com.qlangtech.tis.runtime.module.misc.IFieldErrorHandler) JSONArray(com.alibaba.fastjson.JSONArray) ValidatorCommons(com.qlangtech.tis.plugin.ValidatorCommons) Lists(com.google.common.collect.Lists) Matcher(java.util.regex.Matcher) com.qlangtech.tis.extension.impl(com.qlangtech.tis.extension.impl) IDataxProcessor(com.qlangtech.tis.datax.IDataxProcessor) FormFieldType(com.qlangtech.tis.plugin.annotation.FormFieldType) DefaultFieldErrorHandler(com.qlangtech.tis.runtime.module.misc.impl.DefaultFieldErrorHandler) GroovyShellEvaluate(com.qlangtech.tis.extension.util.GroovyShellEvaluate) Validator(com.qlangtech.tis.plugin.annotation.Validator) java.lang.reflect(java.lang.reflect) PluginExtraProps(com.qlangtech.tis.extension.util.PluginExtraProps) ImmutableMap(com.google.common.collect.ImmutableMap) DataxWriter(com.qlangtech.tis.datax.impl.DataxWriter) IdentityName(com.qlangtech.tis.plugin.IdentityName) AttrValMap(com.qlangtech.tis.util.AttrValMap) IOException(java.io.IOException) Maps(com.google.common.collect.Maps) IPluginContext(com.qlangtech.tis.util.IPluginContext) Collectors(java.util.stream.Collectors) File(java.io.File) Types(org.jvnet.tiger_types.Types) JSON(com.alibaba.fastjson.JSON) IControlMsgHandler(com.qlangtech.tis.runtime.module.misc.IControlMsgHandler) ISelectOptionsGetter(com.qlangtech.tis.util.ISelectOptionsGetter) JSONObject(com.alibaba.fastjson.JSONObject) Pattern(java.util.regex.Pattern) IMessageHandler(com.qlangtech.tis.runtime.module.misc.IMessageHandler) JSONArray(com.alibaba.fastjson.JSONArray) XStream2(com.qlangtech.tis.util.XStream2) JSONObject(com.alibaba.fastjson.JSONObject) ImmutableMap(com.google.common.collect.ImmutableMap) AttrValMap(com.qlangtech.tis.util.AttrValMap)

Example 7 with IPluginContext

use of com.qlangtech.tis.util.IPluginContext in project tis by qlangtech.

the class TestDataxReader method testGetDataxReader.

// public void testUpdateDataxReader() {
// KeyedPluginStore<DataxReader> readerStore = DataxReader.getPluginStore(null, dataXName);
// 
// DataxReader dataxReader = readerStore.getPlugin();
// assertNotNull(dataxReader);
// 
// 
// SuFormProperties props = EasyMock.createMock("subformProp", SuFormProperties.class);
// 
// EasyMock.expect(props.getSubFormFieldName()).andReturn("selectedTabs");
// 
// DataxReader.SubFieldFormAppKey<DataxReader> subFieldKey
// = new DataxReader.SubFieldFormAppKey<>(null, false, dataXName, props, DataxReader.class);
// KeyedPluginStore<DataxReader> subFieldStore = KeyedPluginStore.getPluginStore(subFieldKey);
// 
// List<Descriptor.ParseDescribable<DataxReader>> dlist = Lists.newArrayList();
// DataxReader subformReader =
// dlist.add(new Descriptor.ParseDescribable());
// subFieldStore.setPlugins(null, Optional.empty(), dlist);
// 
// }
public void testGetDataxReader() {
    KeyedPluginStore<DataxReader> readerStore = DataxReader.getPluginStore(null, dataXName);
    DataxReader dataxReader = readerStore.getPlugin();
    assertNotNull("dataxReader can not be null", dataxReader);
    List<ISelectedTab> selectedTabs = dataxReader.getSelectedTabs();
    assertNotNull(selectedTabs);
    assertTrue(selectedTabs.size() > 0);
    IPluginContext pluginContext = EasyMock.createMock("pluginContext", IPluginContext.class);
    // 
    String execId = "7b069200-9845-d60b-cef0-408c6940ffda";
    EasyMock.expect(pluginContext.getExecId()).andReturn(execId).times(2);
    EasyMock.expect(pluginContext.getRequestHeader(DataxReader.HEAD_KEY_REFERER)).andReturn("/x/" + dataXName + "/update").times(2);
    EasyMock.expect(pluginContext.isCollectionAware()).andReturn(true).times(2);
    EasyMock.replay(pluginContext);
    readerStore = DataxReader.getPluginStore(pluginContext, dataXName);
    assertNotNull("readerStore can not be null", readerStore);
    dataxReader = readerStore.getPlugin();
    assertNotNull("dataxReader can not be null", dataxReader);
    selectedTabs = dataxReader.getSelectedTabs();
    assertNotNull(selectedTabs);
    assertTrue(selectedTabs.size() > 0);
    for (ISelectedTab tab : selectedTabs) {
        assertTrue(tab.getCols().size() > 0);
        for (ISelectedTab.ColMeta col : tab.getCols()) {
            assertNotNull("tab:" + tab.getName() + ",col:" + col.getName() + " can not be null", col.getType());
        }
    }
    EasyMock.verify(pluginContext);
}
Also used : IPluginContext(com.qlangtech.tis.util.IPluginContext) ISelectedTab(com.qlangtech.tis.plugin.ds.ISelectedTab)

Example 8 with IPluginContext

use of com.qlangtech.tis.util.IPluginContext in project tis by qlangtech.

the class TestDataxProcessor method testLoad.

/**
 * 加载一个空的默认DataxProcessor
 */
public void testLoad() {
    IPluginContext pluginContext = EasyMock.createMock("pluginContext", IPluginContext.class);
    String randomDataXName = RandomStringUtils.randomAlphabetic(4);
    EasyMock.replay(pluginContext);
    DataxProcessor dataxProcessor = DataxProcessor.load(pluginContext, randomDataXName);
    assertNotNull(dataxProcessor);
    EasyMock.verify(pluginContext);
}
Also used : IPluginContext(com.qlangtech.tis.util.IPluginContext)

Aggregations

IPluginContext (com.qlangtech.tis.util.IPluginContext)8 Context (com.alibaba.citrus.turbine.Context)4 Descriptor (com.qlangtech.tis.extension.Descriptor)4 Lists (com.google.common.collect.Lists)2 TIS (com.qlangtech.tis.TIS)2 PluginExtraProps (com.qlangtech.tis.extension.util.PluginExtraProps)2 ISelectedTab (com.qlangtech.tis.plugin.ds.ISelectedTab)2 MySQLDataSourceFactory (com.qlangtech.tis.plugin.ds.mysql.MySQLDataSourceFactory)2 java.util (java.util)2 StringUtils (org.apache.commons.lang.StringUtils)2 JSON (com.alibaba.fastjson.JSON)1 JSONArray (com.alibaba.fastjson.JSONArray)1 JSONObject (com.alibaba.fastjson.JSONObject)1 ImmutableMap (com.google.common.collect.ImmutableMap)1 Maps (com.google.common.collect.Maps)1 Public (com.qlangtech.tis.annotation.Public)1 IDataXPluginMeta (com.qlangtech.tis.datax.IDataXPluginMeta)1 IDataxContext (com.qlangtech.tis.datax.IDataxContext)1 IDataxProcessor (com.qlangtech.tis.datax.IDataxProcessor)1 IDataxReader (com.qlangtech.tis.datax.IDataxReader)1