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;
}
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);
}
}
}
}
}
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);
}
}
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);
}
}
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);
}
Aggregations