Search in sources :

Example 31 with KettlePluginException

use of org.pentaho.di.core.exception.KettlePluginException in project pentaho-kettle by pentaho.

the class DBProcMeta method getFields.

@Override
public void getFields(RowMetaInterface r, String name, RowMetaInterface[] info, StepMeta nextStep, VariableSpace space, Repository repository, IMetaStore metaStore) throws KettleStepException {
    if (!Utils.isEmpty(resultName)) {
        ValueMetaInterface v;
        try {
            v = ValueMetaFactory.createValueMeta(resultName, resultType);
            v.setOrigin(name);
            r.addValueMeta(v);
        } catch (KettlePluginException e) {
            throw new KettleStepException(e);
        }
    }
    for (int i = 0; i < argument.length; i++) {
        if (argumentDirection[i].equalsIgnoreCase("OUT")) {
            ValueMetaInterface v;
            try {
                v = ValueMetaFactory.createValueMeta(argument[i], argumentType[i]);
                v.setOrigin(name);
                r.addValueMeta(v);
            } catch (KettlePluginException e) {
                throw new KettleStepException(e);
            }
        }
    }
    return;
}
Also used : KettlePluginException(org.pentaho.di.core.exception.KettlePluginException) KettleStepException(org.pentaho.di.core.exception.KettleStepException) ValueMetaInterface(org.pentaho.di.core.row.ValueMetaInterface)

Example 32 with KettlePluginException

use of org.pentaho.di.core.exception.KettlePluginException in project pentaho-kettle by pentaho.

the class ValueMetaPluginType method registerXmlPlugins.

@Override
protected void registerXmlPlugins() throws KettlePluginException {
    for (PluginFolderInterface folder : pluginFolders) {
        if (folder.isPluginXmlFolder()) {
            List<FileObject> pluginXmlFiles = findPluginXmlFiles(folder.getFolder());
            for (FileObject file : pluginXmlFiles) {
                try {
                    Document document = XMLHandler.loadXMLFile(file);
                    Node pluginNode = XMLHandler.getSubNode(document, "plugin");
                    if (pluginNode != null) {
                        registerPluginFromXmlResource(pluginNode, KettleVFS.getFilename(file.getParent()), this.getClass(), false, file.getParent().getURL());
                    }
                } catch (Exception e) {
                    // We want to report this plugin.xml error, perhaps an XML typo or something like that...
                    // 
                    log.logError("Error found while reading step plugin.xml file: " + file.getName().toString(), e);
                }
            }
        }
    }
}
Also used : PluginFolderInterface(org.pentaho.di.core.plugins.PluginFolderInterface) Node(org.w3c.dom.Node) FileObject(org.apache.commons.vfs2.FileObject) Document(org.w3c.dom.Document) KettlePluginException(org.pentaho.di.core.exception.KettlePluginException)

Example 33 with KettlePluginException

use of org.pentaho.di.core.exception.KettlePluginException in project pentaho-kettle by pentaho.

the class BasePluginType method registerPluginFromXmlResource.

protected PluginInterface registerPluginFromXmlResource(Node pluginNode, String path, Class<? extends PluginTypeInterface> pluginType, boolean nativePlugin, URL pluginFolder) throws KettlePluginException {
    try {
        String id = XMLHandler.getTagAttribute(pluginNode, "id");
        String description = getTagOrAttribute(pluginNode, "description");
        String iconfile = getTagOrAttribute(pluginNode, "iconfile");
        String tooltip = getTagOrAttribute(pluginNode, "tooltip");
        String category = getTagOrAttribute(pluginNode, "category");
        String classname = getTagOrAttribute(pluginNode, "classname");
        String errorHelpfile = getTagOrAttribute(pluginNode, "errorhelpfile");
        String documentationUrl = getTagOrAttribute(pluginNode, "documentation_url");
        String casesUrl = getTagOrAttribute(pluginNode, "cases_url");
        String forumUrl = getTagOrAttribute(pluginNode, "forum_url");
        Node libsnode = XMLHandler.getSubNode(pluginNode, "libraries");
        int nrlibs = XMLHandler.countNodes(libsnode, "library");
        List<String> jarFiles = new ArrayList<String>();
        if (path != null) {
            for (int j = 0; j < nrlibs; j++) {
                Node libnode = XMLHandler.getSubNodeByNr(libsnode, "library", j);
                String jarfile = XMLHandler.getTagAttribute(libnode, "name");
                jarFiles.add(new File(path + Const.FILE_SEPARATOR + jarfile).getAbsolutePath());
            }
        }
        // Localized categories, descriptions and tool tips
        // 
        Map<String, String> localizedCategories = readPluginLocale(pluginNode, "localized_category", "category");
        category = getAlternativeTranslation(category, localizedCategories);
        Map<String, String> localDescriptions = readPluginLocale(pluginNode, "localized_description", "description");
        description = getAlternativeTranslation(description, localDescriptions);
        Map<String, String> localizedTooltips = readPluginLocale(pluginNode, "localized_tooltip", "tooltip");
        tooltip = getAlternativeTranslation(tooltip, localizedTooltips);
        String iconFilename = (path == null) ? iconfile : path + Const.FILE_SEPARATOR + iconfile;
        String errorHelpFileFull = errorHelpfile;
        if (!Utils.isEmpty(errorHelpfile)) {
            errorHelpFileFull = (path == null) ? errorHelpfile : path + Const.FILE_SEPARATOR + errorHelpfile;
        }
        Map<Class<?>, String> classMap = new HashMap<Class<?>, String>();
        PluginMainClassType mainClassTypesAnnotation = pluginType.getAnnotation(PluginMainClassType.class);
        classMap.put(mainClassTypesAnnotation.value(), classname);
        // process annotated extra types
        PluginExtraClassTypes classTypesAnnotation = pluginType.getAnnotation(PluginExtraClassTypes.class);
        if (classTypesAnnotation != null) {
            for (int i = 0; i < classTypesAnnotation.classTypes().length; i++) {
                Class<?> classType = classTypesAnnotation.classTypes()[i];
                String className = getTagOrAttribute(pluginNode, classTypesAnnotation.xmlNodeNames()[i]);
                classMap.put(classType, className);
            }
        }
        // process extra types added at runtime
        Map<Class<?>, String> objectMap = getAdditionalRuntimeObjectTypes();
        for (Map.Entry<Class<?>, String> entry : objectMap.entrySet()) {
            String clzName = getTagOrAttribute(pluginNode, entry.getValue());
            classMap.put(entry.getKey(), clzName);
        }
        PluginInterface pluginInterface = new Plugin(id.split(","), pluginType, mainClassTypesAnnotation.value(), category, description, tooltip, iconFilename, false, nativePlugin, classMap, jarFiles, errorHelpFileFull, pluginFolder, documentationUrl, casesUrl, forumUrl);
        registry.registerPlugin(pluginType, pluginInterface);
        return pluginInterface;
    } catch (Throwable e) {
        throw new KettlePluginException(BaseMessages.getString(PKG, "BasePluginType.RuntimeError.UnableToReadPluginXML.PLUGIN0001"), e);
    }
}
Also used : KettlePluginException(org.pentaho.di.core.exception.KettlePluginException) HashMap(java.util.HashMap) Node(org.w3c.dom.Node) ArrayList(java.util.ArrayList) File(java.io.File) HashMap(java.util.HashMap) Map(java.util.Map)

Example 34 with KettlePluginException

use of org.pentaho.di.core.exception.KettlePluginException in project pentaho-kettle by pentaho.

the class BasePluginType method registerNatives.

protected void registerNatives() throws KettlePluginException {
    // Scan the native steps...
    // 
    String xmlFile = getXmlPluginFile();
    String alternative = null;
    if (!Utils.isEmpty(getAlternativePluginFile())) {
        alternative = getPropertyExternal(getAlternativePluginFile(), null);
        if (!Utils.isEmpty(alternative)) {
            xmlFile = alternative;
        }
    }
    // Load the plugins for this file...
    // 
    InputStream inputStream = null;
    try {
        inputStream = getResAsStreamExternal(xmlFile);
        if (inputStream == null) {
            inputStream = getResAsStreamExternal("/" + xmlFile);
        }
        if (!Utils.isEmpty(getAlternativePluginFile())) {
            // Retry to load a regular file...
            if (inputStream == null && !Utils.isEmpty(alternative)) {
                try {
                    inputStream = getFileInputStreamExternal(xmlFile);
                } catch (Exception e) {
                    throw new KettlePluginException("Unable to load native plugins '" + xmlFile + "'", e);
                }
            }
        }
        if (inputStream == null) {
            if (isReturn()) {
                return;
            } else {
                throw new KettlePluginException("Unable to find native plugins definition file: " + xmlFile);
            }
        }
        registerPlugins(inputStream);
    } catch (KettleXMLException e) {
        throw new KettlePluginException("Unable to read the kettle XML config file: " + xmlFile, e);
    } finally {
        IOUtils.closeQuietly(inputStream);
    }
}
Also used : KettlePluginException(org.pentaho.di.core.exception.KettlePluginException) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) KettleXMLException(org.pentaho.di.core.exception.KettleXMLException) KettleXMLException(org.pentaho.di.core.exception.KettleXMLException) FileNotFoundException(java.io.FileNotFoundException) KettlePluginException(org.pentaho.di.core.exception.KettlePluginException)

Example 35 with KettlePluginException

use of org.pentaho.di.core.exception.KettlePluginException in project pentaho-kettle by pentaho.

the class Kitchen method main.

public static void main(String[] a) throws Exception {
    final ExecutorService executor = ExecutorUtil.getExecutor();
    final RepositoryPluginType repositoryPluginType = RepositoryPluginType.getInstance();
    final Future<Map.Entry<KettlePluginException, Future<KettleException>>> repositoryRegisterFuture = executor.submit(new Callable<Map.Entry<KettlePluginException, Future<KettleException>>>() {

        @Override
        public Map.Entry<KettlePluginException, Future<KettleException>> call() throws Exception {
            PluginRegistry.addPluginType(repositoryPluginType);
            try {
                KettleClientEnvironment.getInstance().setClient(KettleClientEnvironment.ClientType.KITCHEN);
                KettleClientEnvironment.init();
            } catch (KettlePluginException e) {
                return new AbstractMap.SimpleImmutableEntry<KettlePluginException, Future<KettleException>>(e, null);
            }
            Future<KettleException> kettleEnvironmentInitFuture = executor.submit(new Callable<KettleException>() {

                @Override
                public KettleException call() throws Exception {
                    try {
                        KettleClientEnvironment.getInstance().setClient(KettleClientEnvironment.ClientType.KITCHEN);
                        KettleEnvironment.init();
                    } catch (KettleException e) {
                        return e;
                    }
                    return null;
                }
            });
            return new AbstractMap.SimpleImmutableEntry<KettlePluginException, Future<KettleException>>(null, kettleEnvironmentInitFuture);
        }
    });
    List<String> args = new ArrayList<String>();
    for (int i = 0; i < a.length; i++) {
        if (a[i].length() > 0) {
            args.add(a[i]);
        }
    }
    DelegatingMetaStore metaStore = new DelegatingMetaStore();
    metaStore.addMetaStore(MetaStoreConst.openLocalPentahoMetaStore());
    metaStore.setActiveMetaStoreName(metaStore.getName());
    RepositoryMeta repositoryMeta = null;
    Job job = null;
    StringBuilder optionRepname, optionUsername, optionTrustUser, optionPassword, optionJobname, optionDirname, initialDir;
    StringBuilder optionFilename, optionLoglevel, optionLogfile, optionLogfileOld, optionListdir;
    StringBuilder optionListjobs, optionListrep, optionNorep, optionVersion, optionListParam, optionExport;
    NamedParams optionParams = new NamedParamsDefault();
    NamedParams customOptions = new NamedParamsDefault();
    CommandLineOption maxLogLinesOption = new CommandLineOption("maxloglines", BaseMessages.getString(PKG, "Kitchen.CmdLine.MaxLogLines"), new StringBuilder());
    CommandLineOption maxLogTimeoutOption = new CommandLineOption("maxlogtimeout", BaseMessages.getString(PKG, "Kitchen.CmdLine.MaxLogTimeout"), new StringBuilder());
    CommandLineOption[] options = new CommandLineOption[] { new CommandLineOption("rep", BaseMessages.getString(PKG, "Kitchen.CmdLine.RepName"), optionRepname = new StringBuilder()), new CommandLineOption("user", BaseMessages.getString(PKG, "Kitchen.CmdLine.RepUsername"), optionUsername = new StringBuilder()), new CommandLineOption("trustuser", BaseMessages.getString(PKG, "Kitchen.ComdLine.RepUsername"), optionTrustUser = new StringBuilder()), new CommandLineOption("pass", BaseMessages.getString(PKG, "Kitchen.CmdLine.RepPassword"), optionPassword = new StringBuilder()), new CommandLineOption("job", BaseMessages.getString(PKG, "Kitchen.CmdLine.RepJobName"), optionJobname = new StringBuilder()), new CommandLineOption("dir", BaseMessages.getString(PKG, "Kitchen.CmdLine.RepDir"), optionDirname = new StringBuilder()), new CommandLineOption("file", BaseMessages.getString(PKG, "Kitchen.CmdLine.XMLJob"), optionFilename = new StringBuilder()), new CommandLineOption("level", BaseMessages.getString(PKG, "Kitchen.CmdLine.LogLevel"), optionLoglevel = new StringBuilder()), new CommandLineOption("logfile", BaseMessages.getString(PKG, "Kitchen.CmdLine.LogFile"), optionLogfile = new StringBuilder()), new CommandLineOption("log", BaseMessages.getString(PKG, "Kitchen.CmdLine.LogFileOld"), optionLogfileOld = new StringBuilder(), false, true), new CommandLineOption("listdir", BaseMessages.getString(PKG, "Kitchen.CmdLine.ListDir"), optionListdir = new StringBuilder(), true, false), new CommandLineOption("listjobs", BaseMessages.getString(PKG, "Kitchen.CmdLine.ListJobsDir"), optionListjobs = new StringBuilder(), true, false), new CommandLineOption("listrep", BaseMessages.getString(PKG, "Kitchen.CmdLine.ListAvailableReps"), optionListrep = new StringBuilder(), true, false), new CommandLineOption("norep", BaseMessages.getString(PKG, "Kitchen.CmdLine.NoRep"), optionNorep = new StringBuilder(), true, false), new CommandLineOption("version", BaseMessages.getString(PKG, "Kitchen.CmdLine.Version"), optionVersion = new StringBuilder(), true, false), new CommandLineOption("param", BaseMessages.getString(PKG, "Kitchen.ComdLine.Param"), optionParams, false), new CommandLineOption("listparam", BaseMessages.getString(PKG, "Kitchen.ComdLine.ListParam"), optionListParam = new StringBuilder(), true, false), new CommandLineOption("export", BaseMessages.getString(PKG, "Kitchen.ComdLine.Export"), optionExport = new StringBuilder(), true, false), new CommandLineOption("initialDir", null, initialDir = new StringBuilder(), false, true), new CommandLineOption("custom", BaseMessages.getString(PKG, "Kitchen.ComdLine.Custom"), customOptions, false), maxLogLinesOption, maxLogTimeoutOption };
    if (args.size() == 2) {
        // 2 internal hidden argument (flag and value)
        CommandLineOption.printUsage(options);
        exitJVM(9);
    }
    LogChannelInterface log = new LogChannel(STRING_KITCHEN);
    CommandLineOption.parseArguments(args, options, log);
    configureLogging(maxLogLinesOption, maxLogTimeoutOption);
    String kettleRepname = Const.getEnvironmentVariable("KETTLE_REPOSITORY", null);
    String kettleUsername = Const.getEnvironmentVariable("KETTLE_USER", null);
    String kettlePassword = Const.getEnvironmentVariable("KETTLE_PASSWORD", null);
    if (!Utils.isEmpty(kettleRepname)) {
        optionRepname = new StringBuilder(kettleRepname);
    }
    if (!Utils.isEmpty(kettleUsername)) {
        optionUsername = new StringBuilder(kettleUsername);
    }
    if (!Utils.isEmpty(kettlePassword)) {
        optionPassword = new StringBuilder(kettlePassword);
    }
    if (Utils.isEmpty(optionLogfile) && !Utils.isEmpty(optionLogfileOld)) {
        // if the old style of logging name is filled in, and the new one is not
        // overwrite the new by the old
        optionLogfile = optionLogfileOld;
    }
    Map.Entry<KettlePluginException, Future<KettleException>> repositoryRegisterResults = repositoryRegisterFuture.get();
    // It's a singleton map with one key-value pair (a Pair collection)
    KettlePluginException repositoryRegisterException = repositoryRegisterResults.getKey();
    if (repositoryRegisterException != null) {
        throw repositoryRegisterException;
    }
    Future<KettleException> kettleInitFuture = repositoryRegisterResults.getValue();
    if (!Utils.isEmpty(optionLogfile)) {
        fileAppender = new FileLoggingEventListener(optionLogfile.toString(), true);
        KettleLogStore.getAppender().addLoggingEventListener(fileAppender);
    } else {
        fileAppender = null;
    }
    if (!Utils.isEmpty(optionLoglevel)) {
        log.setLogLevel(LogLevel.getLogLevelForCode(optionLoglevel.toString()));
        log.logMinimal(BaseMessages.getString(PKG, "Kitchen.Log.LogLevel", log.getLogLevel().getDescription()));
    }
    // Start the action...
    // 
    int returnCode = CommandExecutorCodes.Kitchen.SUCCESS.getCode();
    try {
        if (getCommandExecutor() == null) {
            // init
            setCommandExecutor(new KitchenCommandExecutor(PKG, log, kettleInitFuture));
        }
        if (!Utils.isEmpty(optionVersion)) {
            getCommandExecutor().printVersion();
            if (a.length == 1) {
                exitJVM(CommandExecutorCodes.Pan.KETTLE_VERSION_PRINT.getCode());
            }
        }
        returnCode = getCommandExecutor().execute(optionRepname.toString(), optionNorep.toString(), optionUsername.toString(), optionTrustUser.toString(), optionPassword.toString(), optionDirname.toString(), optionFilename.toString(), optionJobname.toString(), optionListjobs.toString(), optionListdir.toString(), optionExport.toString(), initialDir.toString(), optionListrep.toString(), optionListParam.toString(), optionParams, customOptions, args.toArray(new String[args.size()]));
    } catch (Throwable t) {
        t.printStackTrace();
        returnCode = CommandExecutorCodes.Pan.UNEXPECTED_ERROR.getCode();
    } finally {
        if (fileAppender != null) {
            fileAppender.close();
            KettleLogStore.getAppender().removeLoggingEventListener(fileAppender);
        }
    }
    exitJVM(returnCode);
}
Also used : KettleException(org.pentaho.di.core.exception.KettleException) NamedParams(org.pentaho.di.core.parameters.NamedParams) RepositoryPluginType(org.pentaho.di.core.plugins.RepositoryPluginType) ArrayList(java.util.ArrayList) Callable(java.util.concurrent.Callable) AbstractMap(java.util.AbstractMap) RepositoryMeta(org.pentaho.di.repository.RepositoryMeta) CommandLineOption(org.pentaho.di.pan.CommandLineOption) Job(org.pentaho.di.job.Job) NamedParamsDefault(org.pentaho.di.core.parameters.NamedParamsDefault) KettlePluginException(org.pentaho.di.core.exception.KettlePluginException) FileLoggingEventListener(org.pentaho.di.core.logging.FileLoggingEventListener) LogChannel(org.pentaho.di.core.logging.LogChannel) DelegatingMetaStore(org.pentaho.metastore.stores.delegate.DelegatingMetaStore) KettleException(org.pentaho.di.core.exception.KettleException) ExecutionException(java.util.concurrent.ExecutionException) KettlePluginException(org.pentaho.di.core.exception.KettlePluginException) ExecutorService(java.util.concurrent.ExecutorService) Future(java.util.concurrent.Future) LogChannelInterface(org.pentaho.di.core.logging.LogChannelInterface) Map(java.util.Map) AbstractMap(java.util.AbstractMap)

Aggregations

KettlePluginException (org.pentaho.di.core.exception.KettlePluginException)47 ValueMetaInterface (org.pentaho.di.core.row.ValueMetaInterface)23 FileObject (org.apache.commons.vfs2.FileObject)12 Node (org.w3c.dom.Node)11 RowMeta (org.pentaho.di.core.row.RowMeta)10 ValueMetaNone (org.pentaho.di.core.row.value.ValueMetaNone)10 Document (org.w3c.dom.Document)10 ArrayList (java.util.ArrayList)9 KettleStepException (org.pentaho.di.core.exception.KettleStepException)9 RowMetaInterface (org.pentaho.di.core.row.RowMetaInterface)9 ValueMetaString (org.pentaho.di.core.row.value.ValueMetaString)9 PluginInterface (org.pentaho.di.core.plugins.PluginInterface)7 ValueMetaInteger (org.pentaho.di.core.row.value.ValueMetaInteger)6 Map (java.util.Map)4 KettleException (org.pentaho.di.core.exception.KettleException)4 PluginFolderInterface (org.pentaho.di.core.plugins.PluginFolderInterface)4 IOException (java.io.IOException)3 Annotation (java.lang.annotation.Annotation)3 URLClassLoader (java.net.URLClassLoader)3 HashMap (java.util.HashMap)3