From 202b6b5ae245d11b91fbc213a45f1994f7678354 Mon Sep 17 00:00:00 2001 From: Bart Maertens Date: Fri, 22 Nov 2024 10:44:41 +0100 Subject: [PATCH 1/5] projects info was already moved to the project pages and no longer visible in the nav, external plugins page removed. #4602 --- .../ROOT/pages/plugins/external-plugins.adoc | 63 ---- .../modules/ROOT/pages/plugins/projects.adoc | 18 - .../ROOT/pages/plugins/projects/projects.adoc | 345 ------------------ 3 files changed, 426 deletions(-) delete mode 100644 docs/hop-user-manual/modules/ROOT/pages/plugins/external-plugins.adoc delete mode 100644 docs/hop-user-manual/modules/ROOT/pages/plugins/projects.adoc delete mode 100644 docs/hop-user-manual/modules/ROOT/pages/plugins/projects/projects.adoc diff --git a/docs/hop-user-manual/modules/ROOT/pages/plugins/external-plugins.adoc b/docs/hop-user-manual/modules/ROOT/pages/plugins/external-plugins.adoc deleted file mode 100644 index 874c3a2d2a5..00000000000 --- a/docs/hop-user-manual/modules/ROOT/pages/plugins/external-plugins.adoc +++ /dev/null @@ -1,63 +0,0 @@ -//// -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you 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. -//// -:description: Hop plugins is an external repository containing a collection of plugins that can be used with but can't or won't be shipped with Apache Hop: The https://github.com/project-hop/hop-plugins/ - -[[ExternalPlugins]] -= External Plugins - -== Hop Plugins - -The https://github.com/project-hop/hop-plugins/[Hop plugins^] repository contains a collection of plugins that can be used with but can't or won't be shipped with Apache Hop. - -=== Actions - -* Send information using syslog - -=== Transforms - -* Dropbox Input -* Dropbox Output -* Excel Output -* Google Analytics -* Google Sheets Input -* Google Sheets Output -* LDIF Input -* MQTT Input -* MQTT Output -* Send message to syslog - -== Mark Hall - -== Transforms - -* https://github.com/m-a-hall/hop-cpython[CPython^]: The Hop CPython Project is a plugin for the Apache Hop platform which provides the ability to execute a python script (via the cpython environment) within the context of a pipeline. -* https://github.com/m-a-hall/hop-mi[Hop Machine Intelligence^]: The hop-mi project is a version of PMI (Plugin Machine Intelligence) for the Apache Hop platform. -It (initially) provides access to supervised machine learning algorithms from various underlying "engines". -Out of the box, hop-mi provides six engines: Weka, Python scikit-learn, R MLR, Spark MLlib, DL4j (deep learning) and KerasApplication (Keras zoo models backed by TensorFlow). -The following learning schemes are supported, and are available in most of the engines: decision tree classifier, decision tree regressor, gradient boosted trees, linear regression, logistic regression, naive Bayes, naive Bayes multinomial, naive Bayes incremental, random forest classifier, random forest regressor, support vector classifier, support vector regressor, multi-layer perceptrons and deep learning networks. hop-mi/PMI is designed to be extensible via the addition of new engines and algorithms. - -== AtolCD - -AtolCD has a https://github.com/atolcd/hop-gis-plugins[github repository] with 7 GIS plugins for Apache Hop: - -* Coordinate system operation -* Geometry information -* Geoprocessing (between two geometries) -* Geospatial Group by -* GIS File input -* GIS File output -* Spatial relationship and proximity \ No newline at end of file diff --git a/docs/hop-user-manual/modules/ROOT/pages/plugins/projects.adoc b/docs/hop-user-manual/modules/ROOT/pages/plugins/projects.adoc deleted file mode 100644 index 1c00b2faddf..00000000000 --- a/docs/hop-user-manual/modules/ROOT/pages/plugins/projects.adoc +++ /dev/null @@ -1,18 +0,0 @@ -//// -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you 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. -//// -[[projects-plugins]] -= Project Plugin diff --git a/docs/hop-user-manual/modules/ROOT/pages/plugins/projects/projects.adoc b/docs/hop-user-manual/modules/ROOT/pages/plugins/projects/projects.adoc deleted file mode 100644 index d80b44425f7..00000000000 --- a/docs/hop-user-manual/modules/ROOT/pages/plugins/projects/projects.adoc +++ /dev/null @@ -1,345 +0,0 @@ -//// -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you 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. -//// -:documentationPath: /plugins/projects/ -:language: en_US - -:openvar: ${ -:closevar: } -= Projects & Environments - -This document explains the basic structure and working of the 'projects' plugin - -== Architecture - -We want to make it easy for a developer to use one or more projects alongside each other. -A project is the collection of all the files you need in your data orchestration solution. -This typically includes metadata, pipelines, workflows, reference files, documentation and so on. -To match standard development best practices you would check all these files into a version control system like git. - -What are typically not included in this set of files are the variable values that you want to make the project run correctly in a certain environment. -For example on a development laptop you might want to set a variable DB_HOSTNAME to localhost and on a production server this value might point to the production database server. -Because of this you can define (Project Lifecycle) Environments in Hop which wrap around a project by name and include one or more configuration files. -You want these configuration files to be stored outside of the project folder and perhaps into a separate version control repository. - -== Projects - -The 2 main things that define a project are its name and its home folder. -Projects and environments as such are defined in the central Hop configuration file hop-config.json. -By default this file lives in the config/ folder of your Hop client distribution. -You can change that folder by setting the HOP_CONFIG_FOLDER environment variable on your system. - -In ```hop-config.json``` you'll find a ```"projectsConfig"``` section. -By default it contains the following: - -[source,json] ----- -{ - "projectsConfig" : { - "enabled" : true, - "projectMandatory" : true, - "environmentMandatory" : false, - "defaultProject" : "default", - "defaultEnvironment" : null, - "standardParentProject" : "default", - "standardProjectsFolder" : null, - "projectConfigurations" : [ { - "projectName" : "default", - "projectHome" : "config/projects/default", - "configFilename" : "project-config.json" - }, { - "projectName" : "samples", - "projectHome" : "config/projects/samples", - "configFilename" : "project-config.json" - } ], - "lifecycleEnvironments" : [ ], - "projectLifecycles" : [ ] - } -} ----- - -As you can see the standard Hop client distribution defines 2 projects: default and samples. - -Every project has extra metadata and settings stored in a project configuration file called ```project-config.json```. For the samples project this would be ```config/projects/samples/project-config.json```. -Let's take a look at it: - -[source,json] ----- -{ - "metadataBaseFolder" : "${PROJECT_HOME}/metadata", - "unitTestsBasePath" : "${PROJECT_HOME}", - "dataSetsCsvFolder" : "${PROJECT_HOME}/datasets", - "enforcingExecutionInHome" : true, - "parentProjectName" : "default", - "config" : { - "variables" : [ ] - } -} ----- - -=== Variables - -You can define variables on a project level as well. -This makes it handy to reference things like input and output folders which are not sensitive to being checked into version control. - -=== Parent projects - -As you can see from the project configuration file, a project can have a parent from which it will inherit all the metadata objects as well as all the variables that are defined in it. - -=== Configuration using Hop GUI - -The main toolbar in the Hop GUI offers buttons to add, edit and delete a project. - -=== Configuration on the command line - -The ```hop-conf``` script offers many options to edit everything projects related. -Please note that these commands never change the content of a project itself. -They only change the way it is configured on your system. - -==== Creating a project - -[source,bash] ----- -$ sh hop-conf.sh --project-create --project hop2 --project-home /home/user/projects/hop2 --project-parent default -Creating project 'hop2' -Project 'hop2' was created for home folder : /home/user/projects/hop2 -Configuration file for project 'hop2' was saved to : /home/user/projects/hop2/project-config.json ----- - -==== Modifying a project - -This command adds a variable to the project configuration: - -[source,bash] ----- -$ sh hop-conf.sh --project-modify --project hop2 --project-variables INPUT_FOLDER=input/ -Project configuration for 'hop2' was modified in /config/hop-config.json -Project settings for 'hop2' were modified in file /home/user/projects/hop2/project-config.json ----- - -If we look at the project-config.json file we'll see that the variable/value pair was added: - -[source,json] ----- -{ - "config" : { - "variables" : [ { - "name" : "INPUT_FOLDER", - "value" : "input/" - } ] - } -} ----- - -===== Deleting a project - -The following deletes a project from the Hop configuration file: - -[source,bash] ----- -$ sh hop-conf.sh -pd -p hop2 -Project 'hop2 was removed from the configuration ----- - -== Environments - -Environment is short for Project Lifecycle Environment. -It describes the phase of a project in its lifecycle moving from Development to Test to Acceptance to Production. -It can also describe a project in a continuous integration environment and so on. -As such the following attributes define an environment: - -* Its name -* The name of the project -* The phase -* The configuration files you want to use to define the environment specific variables - -=== Configuration using Hop GUI - -The main toolbar in the Hop GUI offers buttons to add, edit and delete an environment. -Please note that you can add non-existing configuration files in the environment dialog. -When editing the Hop GUI will ask you if you want to create the file. - -=== Configuration on the command line - -The ```hop-conf``` script offers many options to edit environment definitions. - - -==== Creating an environment - -[source,bash] ----- -$ sh hop-conf.sh \ - --environment-create \ - --environment hop2 \ - --environment-project hop2 \ - --environment-purpose=Development \ - --environment-config-files=/home/user/projects/hop2-conf.json -Creating environment 'hop2' -Environment 'hop2' was created in Hop configuration file /config/hop-config.json -2021/02/01 16:37:02 - General - ERROR: Configuration file '/home/user/projects/hop2-conf.json' does not exist to read variables from. -Created empty environment configuration file : /home/user/projects/hop2-conf.json - hop2 - Purpose: Development - Configuration files: - Project name: hop2 - Config file: /home/user/projects/hop2-conf.json - ----- - -As you can see from the log, an empty file was created to set variables in: - -[source,json] ----- -{ } ----- - -==== Setting variables in an environment - -This command adds a variable to the environment configuration file: - -[source,bash] ----- -$ h hop-conf.sh --config-file /home/user/projects/hop2-conf.json --config-file-set-variables DB_HOSTNAME=localhost,DB_PASSWORD=abcd -Configuration file '/home/user/projects/hop2-conf.json' was modified. ----- - -If we look at the file ```hop2-conf.json``` we'll see that the variables were added: - -[source,json] ----- -{ - "variables" : [ { - "name" : "DB_HOSTNAME", - "value" : "localhost", - "description" : "" - }, { - "name" : "DB_PASSWORD", - "value" : "abcd", - "description" : "" - } ] -} ----- - -Please note that you can add descriptions for the variables as well with the ```--describe-variable``` option. -Please run hop-conf without options to see all the possibilities. - -===== Deleting an environment - -The following deletes an environment from the Hop configuration file: - -[source,bash] ----- -$ $ sh hop-conf.sh --environment-delete --environment hop2 -Lifecycle environment 'hop2' was deleted from Hop configuration file /config/hop-config.json ----- - -== Running pipelines and workflows - -You can specify an environment or a project when executing a pipeline or a workflow. -By doing so you are automatically configuring metadata, variables without too much fuss. - -The easiest example is shown by executing the "complex" pipeline from the Apache Beam examples: - -[source,bash] ----- -$ sh hop-run.sh --project samples --file 'beam/pipelines/complex.hpl' --runconfig Direct -2022/12/15 14:40:51 - HopRun - Enabling project 'hop-samples' -2022/12/15 14:40:51 - HopRun - Relative path filename specified: /hop/config/projects/samples/beam/pipelines/complex.hpl -2022/12/15 14:40:51 - HopRun - Starting pipeline: /hop/config/projects/samples/beam/pipelines/complex.hpl -2022/12/15 14:40:54 - General - Created Apache Beam pipeline with name 'complex' -2022/12/15 14:40:54 - General - Handled transform (INPUT) : Customer data -2022/12/15 14:40:54 - General - Handled transform (INPUT) : State data -2022/12/15 14:40:54 - General - Handled Group By (TRANSFORM) : countPerState, gets data from 1 previous transform(s) -2022/12/15 14:40:54 - General - Handled generic transform (TRANSFORM) : uppercase state, gets data from 1 previous transform(s), targets=0, infos=0 -2022/12/15 14:40:54 - General - Handled Merge Join (TRANSFORM) : Merge join -2022/12/15 14:40:54 - General - Handled generic transform (TRANSFORM) : Lookup count per state, gets data from 1 previous transform(s), targets=0, infos=1 -2022/12/15 14:40:54 - General - Handled generic transform (TRANSFORM) : name Date: Fri, 22 Nov 2024 10:45:35 +0100 Subject: [PATCH 2/5] hop import page move to tech docs for consistency, nav updates. fixes #4602 --- docs/hop-tech-manual/modules/ROOT/nav.adoc | 1 + .../modules/ROOT/pages/hop-vs-kettle/hop-import.adoc} | 0 .../ROOT/pages/hop-vs-kettle/import-kettle-projects.adoc | 4 ++++ docs/hop-user-manual/modules/ROOT/nav.adoc | 2 -- .../modules/ROOT/pages/hop-tools/hop-import.adoc | 2 +- 5 files changed, 6 insertions(+), 3 deletions(-) rename docs/{hop-user-manual/modules/ROOT/pages/plugins/import/kettle-import.adoc => hop-tech-manual/modules/ROOT/pages/hop-vs-kettle/hop-import.adoc} (100%) diff --git a/docs/hop-tech-manual/modules/ROOT/nav.adoc b/docs/hop-tech-manual/modules/ROOT/nav.adoc index 0f8bed312e8..352806375af 100644 --- a/docs/hop-tech-manual/modules/ROOT/nav.adoc +++ b/docs/hop-tech-manual/modules/ROOT/nav.adoc @@ -20,6 +20,7 @@ under the License. ** xref:hop-vs-kettle/hop-vs-kettle.adoc[Hop vs Kettle] ** xref:hop-vs-kettle/if-you-know-kettle.adoc[If you know Kettle] ** xref:hop-vs-kettle/import-kettle-projects.adoc[Upgrade Kettle to Hop] +** xref:hop-vs-kettle/hop-import.adoc[Hop Import] * xref:logging/logging-architecture.adoc[Logging Architecture] ** xref:logging/udjc-logging.adoc[Logging from UDJC] ** xref:logging/logging-plugins.adoc[Logging Plugin Architecture] diff --git a/docs/hop-user-manual/modules/ROOT/pages/plugins/import/kettle-import.adoc b/docs/hop-tech-manual/modules/ROOT/pages/hop-vs-kettle/hop-import.adoc similarity index 100% rename from docs/hop-user-manual/modules/ROOT/pages/plugins/import/kettle-import.adoc rename to docs/hop-tech-manual/modules/ROOT/pages/hop-vs-kettle/hop-import.adoc diff --git a/docs/hop-tech-manual/modules/ROOT/pages/hop-vs-kettle/import-kettle-projects.adoc b/docs/hop-tech-manual/modules/ROOT/pages/hop-vs-kettle/import-kettle-projects.adoc index c892d740cfb..b0b51902ee2 100644 --- a/docs/hop-tech-manual/modules/ROOT/pages/hop-vs-kettle/import-kettle-projects.adoc +++ b/docs/hop-tech-manual/modules/ROOT/pages/hop-vs-kettle/import-kettle-projects.adoc @@ -91,4 +91,8 @@ When multiple database connections with the same name but different configuratio This file contains a list of all jobs and transformations, with the connections they use. +== Import from the CLI +The `hop-import.sh/bat` CLI tool lets you import Kettle/PDI projects from the command line. + +Check the xref:hop-vs-kettle/hop-import.adoc[hop-import] page for details. diff --git a/docs/hop-user-manual/modules/ROOT/nav.adoc b/docs/hop-user-manual/modules/ROOT/nav.adoc index 0239938fc2a..f11b8f4c3ef 100644 --- a/docs/hop-user-manual/modules/ROOT/nav.adoc +++ b/docs/hop-user-manual/modules/ROOT/nav.adoc @@ -444,8 +444,6 @@ under the License. //::=END AUTO GENERATED LINKS PASSWORDS //::=START AUTO GENERATED LINKS //::=END AUTO GENERATED LINKS -** xref:plugins/external-plugins.adoc[External Plugins] -** xref:plugins/import/kettle-import.adoc[Kettle/PDI Import] * xref:samples/samples.adoc[Samples] * xref:technology/technology.adoc[Technology] ** xref:technology/azure/index.adoc[Azure] diff --git a/docs/hop-user-manual/modules/ROOT/pages/hop-tools/hop-import.adoc b/docs/hop-user-manual/modules/ROOT/pages/hop-tools/hop-import.adoc index a9787c2d8c0..e419623d209 100644 --- a/docs/hop-user-manual/modules/ROOT/pages/hop-tools/hop-import.adoc +++ b/docs/hop-user-manual/modules/ROOT/pages/hop-tools/hop-import.adoc @@ -22,7 +22,7 @@ Hop Import is a command line tool to import and convert third party metadata to See also these plugins: -* xref:plugins/import/kettle-import.adoc[Kettle Import] +* xref:tech-manual:ROOT:hop-vs-kettle/hop-import.adoc[Kettle Import] == Usage From ca301de4ee7f67c2c89a3ddef1b0601a52b3e85c Mon Sep 17 00:00:00 2001 From: Nicolas Adment <39568358+nadment@users.noreply.github.com> Date: Sat, 23 Nov 2024 22:57:10 +0100 Subject: [PATCH 3/5] Improve navigation, selection and move elements in graph #4617, #4598, #4620 - Reduce navigation mini-view size - Avoid multiple transformations/actions collapsing at boundaries when moving - Normalize the selection area in workflow graph - A little code clean-up --- .../org/apache/hop/core/gui/BasePainter.java | 18 ++- .../org/apache/hop/pipeline/PipelineMeta.java | 12 +- .../apache/hop/pipeline/PipelinePainter.java | 33 ++-- .../apache/hop/workflow/WorkflowPainter.java | 25 ++- .../file/pipeline/HopGuiPipelineGraph.java | 147 +++++++++--------- .../file/workflow/HopGuiWorkflowGraph.java | 141 +++++++++-------- .../dataorch/HopGuiAbstractGraph.java | 4 +- .../execution/DragViewZoomBase.java | 19 ++- 8 files changed, 200 insertions(+), 199 deletions(-) diff --git a/engine/src/main/java/org/apache/hop/core/gui/BasePainter.java b/engine/src/main/java/org/apache/hop/core/gui/BasePainter.java index 86bb064f66f..54ec378c739 100644 --- a/engine/src/main/java/org/apache/hop/core/gui/BasePainter.java +++ b/engine/src/main/java/org/apache/hop/core/gui/BasePainter.java @@ -464,16 +464,20 @@ protected void drawNavigationView() { int areaHeight = (int) (area.y / magnification); // We want to show a rectangle depicting the total area of the pipeline/workflow graph. - // As such the area needs to be a certain percentage its size. - // Let's take 25%. + // This area must be adjusted to a maximum of 200 if it is too large. // - double graphWidth = 25.0 * maximum.x / 100.0; - double graphHeight = 25.0 * maximum.y / 100.0; + double graphWidth = maximum.x; + double graphHeight = maximum.y; + if (graphWidth > 200 || graphHeight > 200) { + double coefficient = 200 / Math.max(graphWidth, graphHeight); + graphWidth *= coefficient; + graphHeight *= coefficient; + } // Position it in the bottom right corner of the screen // - double graphX = area.x - graphWidth - 20.0; - double graphY = area.y - graphHeight - 20.0; + double graphX = area.x - graphWidth - 10.0; + double graphY = area.y - graphHeight - 10.0; int alpha = gc.getAlpha(); gc.setAlpha(75); @@ -486,7 +490,7 @@ protected void drawNavigationView() { // Now draw a darker area inside showing the size of the view-screen in relation to the graph // surface. The view size is a fraction of the total graph area outlined above. // - double viewWidth = (graphWidth * (double) areaWidth) / Math.max(areaWidth, maximum.x); + double viewWidth = (graphWidth * areaWidth) / Math.max(areaWidth, maximum.x); double viewHeight = (graphHeight * areaHeight) / Math.max(areaHeight, maximum.y); // The offset is a part of the screen size. The maximum offset is the graph size minus the area diff --git a/engine/src/main/java/org/apache/hop/pipeline/PipelineMeta.java b/engine/src/main/java/org/apache/hop/pipeline/PipelineMeta.java index 4d0377c737f..0746b6c42c4 100644 --- a/engine/src/main/java/org/apache/hop/pipeline/PipelineMeta.java +++ b/engine/src/main/java/org/apache/hop/pipeline/PipelineMeta.java @@ -2310,8 +2310,7 @@ public int[] getTransformIndexes(List transforms) { public Point getMaximum() { int maxx = 0; int maxy = 0; - for (int i = 0; i < nrTransforms(); i++) { - TransformMeta transformMeta = getTransform(i); + for (TransformMeta transformMeta : getTransforms()) { Point loc = transformMeta.getLocation(); if (loc.x > maxx) { maxx = loc.x; @@ -2320,8 +2319,7 @@ public Point getMaximum() { maxy = loc.y; } } - for (int i = 0; i < nrNotes(); i++) { - NotePadMeta notePadMeta = getNote(i); + for (NotePadMeta notePadMeta : getNotes()) { Point loc = notePadMeta.getLocation(); if (loc.x + notePadMeta.width > maxx) { maxx = loc.x + notePadMeta.width; @@ -2342,8 +2340,7 @@ public Point getMaximum() { public Point getMinimum() { int minx = Integer.MAX_VALUE; int miny = Integer.MAX_VALUE; - for (int i = 0; i < nrTransforms(); i++) { - TransformMeta transformMeta = getTransform(i); + for (TransformMeta transformMeta : getTransforms()) { Point loc = transformMeta.getLocation(); if (loc.x < minx) { minx = loc.x; @@ -2352,8 +2349,7 @@ public Point getMinimum() { miny = loc.y; } } - for (int i = 0; i < nrNotes(); i++) { - NotePadMeta notePadMeta = getNote(i); + for (NotePadMeta notePadMeta : getNotes()) { Point loc = notePadMeta.getLocation(); if (loc.x < minx) { minx = loc.x; diff --git a/engine/src/main/java/org/apache/hop/pipeline/PipelinePainter.java b/engine/src/main/java/org/apache/hop/pipeline/PipelinePainter.java index 20108c4377a..d7d7886cb96 100644 --- a/engine/src/main/java/org/apache/hop/pipeline/PipelinePainter.java +++ b/engine/src/main/java/org/apache/hop/pipeline/PipelinePainter.java @@ -223,20 +223,16 @@ private void drawPipeline() throws HopException { LogChannel.GENERAL.logError("Error in PipelinePainterStart extension point", e); } - gc.setFont(EFont.NOTE); - // First the notes - for (int i = 0; i < pipelineMeta.nrNotes(); i++) { - NotePadMeta ni = pipelineMeta.getNote(i); - drawNote(ni); + gc.setFont(EFont.NOTE); + for (NotePadMeta notePad : pipelineMeta.getNotes()) { + drawNote(notePad); } + // Second draw the hops on top of it... gc.setFont(EFont.GRAPH); - gc.setBackground(EColor.BACKGROUND); - - for (int i = 0; i < pipelineMeta.nrPipelineHops(); i++) { - PipelineHopMeta hi = pipelineMeta.getPipelineHop(i); - drawHop(hi); + for (PipelineHopMeta hop : pipelineMeta.getPipelineHops()) { + drawHop(hop); } EImage arrow; @@ -295,24 +291,19 @@ private void drawPipeline() throws HopException { } // Draw regular transform appearance - for (int i = 0; i < pipelineMeta.nrTransforms(); i++) { - TransformMeta transformMeta = pipelineMeta.getTransform(i); + for (TransformMeta transformMeta : pipelineMeta.getTransforms()) { drawTransform(transformMeta); } if (slowTransformIndicatorEnabled) { - // Highlight possible bottlenecks - for (int i = 0; i < pipelineMeta.nrTransforms(); i++) { - TransformMeta transformMeta = pipelineMeta.getTransform(i); + for (TransformMeta transformMeta : pipelineMeta.getTransforms()) { checkDrawSlowTransformIndicator(transformMeta); } } // Display after slow transform indicator - for (int i = 0; i < pipelineMeta.nrTransforms(); i++) { - TransformMeta transformMeta = pipelineMeta.getTransform(i); - + for (TransformMeta transformMeta : pipelineMeta.getTransforms()) { // Draw transform information icon if description is available drawTransformInformationIndicator(transformMeta); @@ -322,15 +313,13 @@ private void drawPipeline() throws HopException { // Draw data grid indicators (output data available) if (outputRowsMap != null && !outputRowsMap.isEmpty()) { - for (int i = 0; i < pipelineMeta.nrTransforms(); i++) { - TransformMeta transformMeta = pipelineMeta.getTransform(i); + for (TransformMeta transformMeta : pipelineMeta.getTransforms()) { drawTransformOutputIndicator(transformMeta); } } // Draw performance table for selected transform(s) - for (int i = 0; i < pipelineMeta.nrTransforms(); i++) { - TransformMeta transformMeta = pipelineMeta.getTransform(i); + for (TransformMeta transformMeta : pipelineMeta.getTransforms()) { drawTransformPerformanceTable(transformMeta); } diff --git a/engine/src/main/java/org/apache/hop/workflow/WorkflowPainter.java b/engine/src/main/java/org/apache/hop/workflow/WorkflowPainter.java index 6033b4e4576..f0e4becf3af 100644 --- a/engine/src/main/java/org/apache/hop/workflow/WorkflowPainter.java +++ b/engine/src/main/java/org/apache/hop/workflow/WorkflowPainter.java @@ -120,23 +120,19 @@ private void drawActions() throws HopException { ExtensionPointHandler.callExtensionPoint( LogChannel.GENERAL, variables, HopExtensionPoint.WorkflowPainterStart.id, this); } catch (HopException e) { - LogChannel.GENERAL.logError("Error in JobPainterStart extension point", e); + LogChannel.GENERAL.logError("Error in WorkflowPainterStart extension point", e); } // First draw the notes... gc.setFont(EFont.NOTE); - - for (int i = 0; i < workflowMeta.nrNotes(); i++) { - NotePadMeta ni = workflowMeta.getNote(i); - drawNote(ni); + for (NotePadMeta notePad : workflowMeta.getNotes()) { + drawNote(notePad); } + // Second draw the hops on top of it... gc.setFont(EFont.GRAPH); - - // ... and then the rest on top of it... - for (int i = 0; i < workflowMeta.nrWorkflowHops(); i++) { - WorkflowHopMeta hi = workflowMeta.getWorkflowHop(i); - drawWorkflowHop(hi, false); + for (WorkflowHopMeta hop : workflowMeta.getWorkflowHops()) { + drawWorkflowHop(hop, false); } EImage arrow; @@ -194,12 +190,11 @@ private void drawActions() throws HopException { } } - for (int j = 0; j < workflowMeta.nrActions(); j++) { - ActionMeta je = workflowMeta.getAction(j); - drawAction(je); + for (ActionMeta actionMeta : workflowMeta.getActions()) { + drawAction(actionMeta); } - // Display an icon on the indicated location signaling to the user that the transform in + // Display an icon on the indicated location signaling to the user that the action in // question does not accept input // if (noInputAction != null) { @@ -222,7 +217,7 @@ private void drawActions() throws HopException { ExtensionPointHandler.callExtensionPoint( LogChannel.GENERAL, variables, HopExtensionPoint.WorkflowPainterEnd.id, this); } catch (HopException e) { - LogChannel.GENERAL.logError("Error in JobPainterEnd extension point", e); + LogChannel.GENERAL.logError("Error in WorkflowPainterEnd extension point", e); } drawRect(selectionRectangle); diff --git a/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java b/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java index 537abc29729..332e60a43e2 100644 --- a/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java +++ b/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java @@ -59,6 +59,7 @@ import org.apache.hop.core.gui.IGc; import org.apache.hop.core.gui.IRedrawable; import org.apache.hop.core.gui.Point; +import org.apache.hop.core.gui.Rectangle; import org.apache.hop.core.gui.SnapAllignDistribute; import org.apache.hop.core.gui.plugin.GuiPlugin; import org.apache.hop.core.gui.plugin.IGuiActionLambda; @@ -339,7 +340,7 @@ public class HopGuiPipelineGraph extends HopGuiAbstractGraph protected int currentMouseY = 0; - protected NotePadMeta ni = null; + protected NotePadMeta currentNotePad = null; protected TransformMeta currentTransform; @@ -399,11 +400,11 @@ public class HopGuiPipelineGraph extends HopGuiAbstractGraph private boolean avoidContextDialog; public void setCurrentNote(NotePadMeta ni) { - this.ni = ni; + this.currentNotePad = ni; } public NotePadMeta getCurrentNote() { - return ni; + return currentNotePad; } public TransformMeta getCurrentTransform() { @@ -747,10 +748,10 @@ public void mouseDown(MouseEvent e) { break; case NOTE: - ni = (NotePadMeta) areaOwner.getOwner(); + currentNotePad = (NotePadMeta) areaOwner.getOwner(); selectedNotes = pipelineMeta.getSelectedNotes(); - selectedNote = ni; - Point loc = ni.getLocation(); + selectedNote = currentNotePad; + Point loc = currentNotePad.getLocation(); previousNoteLocations = pipelineMeta.getSelectedNoteLocations(); @@ -1491,26 +1492,7 @@ public void mouseMove(MouseEvent event) { } } - selectedNotes = pipelineMeta.getSelectedNotes(); - selectedTransforms = pipelineMeta.getSelectedTransforms(); - - // Adjust location of selected transforms... - if (selectedTransforms != null) { - for (int i = 0; i < selectedTransforms.size(); i++) { - TransformMeta transformMeta = selectedTransforms.get(i); - PropsUi.setLocation( - transformMeta, - transformMeta.getLocation().x + dx, - transformMeta.getLocation().y + dy); - } - } - // Adjust location of selected hops... - if (selectedNotes != null) { - for (int i = 0; i < selectedNotes.size(); i++) { - NotePadMeta ni = selectedNotes.get(i); - PropsUi.setLocation(ni, ni.getLocation().x + dx, ni.getLocation().y + dy); - } - } + moveSelected(dx, dy); doRedraw = true; } else if ((startHopTransform != null && endHopTransform == null) @@ -1576,26 +1558,7 @@ public void mouseMove(MouseEvent event) { int dx = note.x - selectedNote.getLocation().x; int dy = note.y - selectedNote.getLocation().y; - selectedNotes = pipelineMeta.getSelectedNotes(); - selectedTransforms = pipelineMeta.getSelectedTransforms(); - - // Adjust location of selected transforms... - if (selectedTransforms != null) { - for (int i = 0; i < selectedTransforms.size(); i++) { - TransformMeta transformMeta = selectedTransforms.get(i); - PropsUi.setLocation( - transformMeta, - transformMeta.getLocation().x + dx, - transformMeta.getLocation().y + dy); - } - } - // Adjust location of selected hops... - if (selectedNotes != null) { - for (int i = 0; i < selectedNotes.size(); i++) { - NotePadMeta ni = selectedNotes.get(i); - PropsUi.setLocation(ni, ni.getLocation().x + dx, ni.getLocation().y + dy); - } - } + moveSelected(dx, dy); doRedraw = true; } @@ -1637,6 +1600,50 @@ public void mouseHover(MouseEvent event) { } } + protected void moveSelected(int dx, int dy) { + selectedNotes = pipelineMeta.getSelectedNotes(); + selectedTransforms = pipelineMeta.getSelectedTransforms(); + + // Check minimum location of selected elements + if (selectedTransforms != null) { + for (TransformMeta transformMeta : selectedTransforms) { + Point location = transformMeta.getLocation(); + if (location.x + dx < 0) { + dx = -location.x; + } + if (location.y + dy < 0) { + dy = -location.y; + } + } + } + if (selectedNotes != null) { + for (NotePadMeta notePad : selectedNotes) { + Point location = notePad.getLocation(); + if (location.x + dx < 0) { + dx = -location.x; + } + if (location.y + dy < 0) { + dy = -location.y; + } + } + } + + // Adjust location of selected transforms... + if (selectedTransforms != null) { + for (TransformMeta transformMeta : selectedTransforms) { + PropsUi.setLocation( + transformMeta, transformMeta.getLocation().x + dx, transformMeta.getLocation().y + dy); + } + } + // Adjust location of selected hops... + if (selectedNotes != null) { + for (NotePadMeta notePadMeta : selectedNotes) { + PropsUi.setLocation( + notePadMeta, notePadMeta.getLocation().x + dx, notePadMeta.getLocation().y + dy); + } + } + } + private void addCandidateAsHop(int mouseX, int mouseY) { boolean forward = startHopTransform != null; @@ -1970,41 +1977,33 @@ protected void hideToolTips() { } /** - * Select all the transforms in a certain (screen) rectangle + * Select all the transforms and notes in a certain (screen) rectangle * * @param rect The selection area as a rectangle */ - public void selectInRect(PipelineMeta pipelineMeta, org.apache.hop.core.gui.Rectangle rect) { - if (rect.height < 0 || rect.width < 0) { - org.apache.hop.core.gui.Rectangle rectified = - new org.apache.hop.core.gui.Rectangle(rect.x, rect.y, rect.width, rect.height); - - // Only for people not dragging from left top to right bottom - if (rectified.height < 0) { - rectified.y = rectified.y + rectified.height; - rectified.height = -rectified.height; - } - if (rectified.width < 0) { - rectified.x = rectified.x + rectified.width; - rectified.width = -rectified.width; - } - rect = rectified; + public void selectInRect(PipelineMeta pipelineMeta, Rectangle rect) { + + // Normalize the selection area + // Only for people not dragging from left top to right bottom + if (rect.height < 0) { + rect.y = rect.y + rect.height; + rect.height = -rect.height; + } + if (rect.width < 0) { + rect.x = rect.x + rect.width; + rect.width = -rect.width; } - for (int i = 0; i < pipelineMeta.nrTransforms(); i++) { - TransformMeta transformMeta = pipelineMeta.getTransform(i); - Point a = transformMeta.getLocation(); - if (rect.contains(a.x, a.y)) { - transformMeta.setSelected(true); + for (TransformMeta transform : pipelineMeta.getTransforms()) { + if (rect.contains(transform.getLocation())) { + transform.setSelected(true); } } - - for (int i = 0; i < pipelineMeta.nrNotes(); i++) { - NotePadMeta ni = pipelineMeta.getNote(i); - Point a = ni.getLocation(); - Point b = new Point(a.x + ni.width, a.y + ni.height); - if (rect.contains(a.x, a.y) && rect.contains(b.x, b.y)) { - ni.setSelected(true); + for (NotePadMeta note : pipelineMeta.getNotes()) { + Point a = note.getLocation(); + Point b = new Point(a.x + note.width, a.y + note.height); + if (rect.contains(a) && rect.contains(b)) { + note.setSelected(true); } } } diff --git a/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/HopGuiWorkflowGraph.java b/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/HopGuiWorkflowGraph.java index 370b70a6fa1..512fb4fa5d2 100644 --- a/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/HopGuiWorkflowGraph.java +++ b/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/HopGuiWorkflowGraph.java @@ -49,6 +49,7 @@ import org.apache.hop.core.gui.IGc; import org.apache.hop.core.gui.IRedrawable; import org.apache.hop.core.gui.Point; +import org.apache.hop.core.gui.Rectangle; import org.apache.hop.core.gui.SnapAllignDistribute; import org.apache.hop.core.gui.WorkflowTracker; import org.apache.hop.core.gui.plugin.GuiPlugin; @@ -299,7 +300,7 @@ public class HopGuiWorkflowGraph extends HopGuiAbstractGraph protected int currentMouseY = 0; - protected NotePadMeta ni = null; + private NotePadMeta currentNotePad = null; private SashForm sashForm; @@ -601,10 +602,10 @@ public void mouseDown(MouseEvent event) { break; case NOTE: - ni = (NotePadMeta) areaOwner.getOwner(); + currentNotePad = (NotePadMeta) areaOwner.getOwner(); selectedNotes = workflowMeta.getSelectedNotes(); - selectedNote = ni; - Point loc = ni.getLocation(); + selectedNote = currentNotePad; + Point loc = currentNotePad.getLocation(); previousNoteLocations = workflowMeta.getSelectedNoteLocations(); @@ -1126,7 +1127,7 @@ public void mouseMove(MouseEvent event) { hop = findWorkflowHop(real.x, real.y); } - // Mouse over the name of the transform + // Mouse over the name of the action // if (!PropsUi.getInstance().useDoubleClick()) { if (areaOwner != null && areaOwner.getAreaType() == AreaOwner.AreaType.ACTION_NAME) { @@ -1204,24 +1205,7 @@ public void mouseMove(MouseEvent event) { } } - selectedNotes = workflowMeta.getSelectedNotes(); - selectedActions = workflowMeta.getSelectedActions(); - - // Adjust location of selected transforms... - if (selectedActions != null) { - for (int i = 0; i < selectedActions.size(); i++) { - ActionMeta actionCopy = selectedActions.get(i); - PropsUi.setLocation( - actionCopy, actionCopy.getLocation().x + dx, actionCopy.getLocation().y + dy); - } - } - // Adjust location of selected hops... - if (selectedNotes != null) { - for (int i = 0; i < selectedNotes.size(); i++) { - NotePadMeta ni = selectedNotes.get(i); - PropsUi.setLocation(ni, ni.getLocation().x + dx, ni.getLocation().y + dy); - } - } + moveSelected(dx, dy); doRedraw = true; } else if ((startHopAction != null && endHopAction == null) @@ -1267,7 +1251,7 @@ public void mouseMove(MouseEvent event) { } } - // Move around notes & transforms + // Move around notes & actions // if (selectedNote != null && lastButton == 1 && !shift) { /* @@ -1278,24 +1262,7 @@ public void mouseMove(MouseEvent event) { int dx = note.x - selectedNote.getLocation().x; int dy = note.y - selectedNote.getLocation().y; - selectedNotes = workflowMeta.getSelectedNotes(); - selectedActions = workflowMeta.getSelectedActions(); - - // Adjust location of selected transforms... - if (selectedActions != null) { - for (int i = 0; i < selectedActions.size(); i++) { - ActionMeta actionCopy = selectedActions.get(i); - PropsUi.setLocation( - actionCopy, actionCopy.getLocation().x + dx, actionCopy.getLocation().y + dy); - } - } - // Adjust location of selected hops... - if (selectedNotes != null) { - for (int i = 0; i < selectedNotes.size(); i++) { - NotePadMeta ni = selectedNotes.get(i); - PropsUi.setLocation(ni, ni.getLocation().x + dx, ni.getLocation().y + dy); - } - } + moveSelected(dx, dy); doRedraw = true; } @@ -1637,24 +1604,34 @@ private void readMagnification() { redraw(); } - public void selectInRect(WorkflowMeta workflowMeta, org.apache.hop.core.gui.Rectangle rect) { - int i; - for (i = 0; i < workflowMeta.nrActions(); i++) { - ActionMeta je = workflowMeta.getAction(i); - Point p = je.getLocation(); - if (((p.x >= rect.x && p.x <= rect.x + rect.width) - || (p.x >= rect.x + rect.width && p.x <= rect.x)) - && ((p.y >= rect.y && p.y <= rect.y + rect.height) - || (p.y >= rect.y + rect.height && p.y <= rect.y))) { - je.setSelected(true); + /** + * Select all the actions and notes in a certain (screen) rectangle + * + * @param rect The selection area as a rectangle + */ + public void selectInRect(WorkflowMeta workflowMeta, Rectangle rect) { + + // Normalize the selection area + // Only for people not dragging from left top to right bottom + if (rect.height < 0) { + rect.y = rect.y + rect.height; + rect.height = -rect.height; + } + if (rect.width < 0) { + rect.x = rect.x + rect.width; + rect.width = -rect.width; + } + + for (ActionMeta action : workflowMeta.getActions()) { + if (rect.contains(action.getLocation())) { + action.setSelected(true); } } - for (i = 0; i < workflowMeta.nrNotes(); i++) { - NotePadMeta ni = workflowMeta.getNote(i); - Point a = ni.getLocation(); - Point b = new Point(a.x + ni.width, a.y + ni.height); - if (rect.contains(a.x, a.y) && rect.contains(b.x, b.y)) { - ni.setSelected(true); + for (NotePadMeta note : workflowMeta.getNotes()) { + Point a = note.getLocation(); + Point b = new Point(a.x + note.width, a.y + note.height); + if (rect.contains(a) && rect.contains(b)) { + note.setSelected(true); } } } @@ -2100,12 +2077,12 @@ public void newNote(HopGuiWorkflowContext context) { } } - public void setCurrentNote(NotePadMeta ni) { - this.ni = ni; + public void setCurrentNote(NotePadMeta notePad) { + this.currentNotePad = notePad; } public NotePadMeta getCurrentNote() { - return ni; + return currentNotePad; } @GuiContextAction( @@ -2537,6 +2514,48 @@ private Set enableDisableNextHops( return checkedActions; } + protected void moveSelected(int dx, int dy) { + selectedNotes = workflowMeta.getSelectedNotes(); + selectedActions = workflowMeta.getSelectedActions(); + + // Check minimum location of selected elements + if (selectedActions != null) { + for (ActionMeta action : selectedActions) { + Point location = action.getLocation(); + if (location.x + dx < 0) { + dx = -location.x; + } + if (location.y + dy < 0) { + dy = -location.y; + } + } + } + if (selectedNotes != null) { + for (NotePadMeta notePad : selectedNotes) { + Point location = notePad.getLocation(); + if (location.x + dx < 0) { + dx = -location.x; + } + if (location.y + dy < 0) { + dy = -location.y; + } + } + } + + // Adjust location of selected actions... + if (selectedActions != null) { + for (ActionMeta action : selectedActions) { + PropsUi.setLocation(action, action.getLocation().x + dx, action.getLocation().y + dy); + } + } + // Adjust location of selected notes... + if (selectedNotes != null) { + for (NotePadMeta notePad : selectedNotes) { + PropsUi.setLocation(notePad, notePad.getLocation().x + dx, notePad.getLocation().y + dy); + } + } + } + private void modalMessageDialog(String title, String message, int swtFlags) { MessageBox messageBox = new MessageBox(hopShell(), swtFlags); messageBox.setMessage(message); diff --git a/ui/src/main/java/org/apache/hop/ui/hopgui/perspective/dataorch/HopGuiAbstractGraph.java b/ui/src/main/java/org/apache/hop/ui/hopgui/perspective/dataorch/HopGuiAbstractGraph.java index beacd883675..496f88a3ee2 100644 --- a/ui/src/main/java/org/apache/hop/ui/hopgui/perspective/dataorch/HopGuiAbstractGraph.java +++ b/ui/src/main/java/org/apache/hop/ui/hopgui/perspective/dataorch/HopGuiAbstractGraph.java @@ -44,8 +44,8 @@ import org.eclipse.swt.widgets.ToolTip; /** - * The beginnings of a common graph object, used by JobGraph and HopGuiPipelineGraph to share common - * behaviors. + * The beginnings of a common graph object, used by {@code HopGuiWorkflowGraph} and {@code + * HopGuiPipelineGraph} to share common behaviors. */ public abstract class HopGuiAbstractGraph extends DragViewZoomBase implements IGraphSnapAlignDistribute { diff --git a/ui/src/main/java/org/apache/hop/ui/hopgui/perspective/execution/DragViewZoomBase.java b/ui/src/main/java/org/apache/hop/ui/hopgui/perspective/execution/DragViewZoomBase.java index 7d874a9cb70..bc34371cc64 100644 --- a/ui/src/main/java/org/apache/hop/ui/hopgui/perspective/execution/DragViewZoomBase.java +++ b/ui/src/main/java/org/apache/hop/ui/hopgui/perspective/execution/DragViewZoomBase.java @@ -109,6 +109,7 @@ public void zoomIn() { if (magnification > 10f) { magnification = 10f; } + validateOffset(); setZoomLabel(); redraw(); } @@ -144,6 +145,7 @@ public void zoomIn(MouseEvent mouseEvent) { / 100 * (viewHeight - oldViewHeight); + validateOffset(); setZoomLabel(); redraw(); } @@ -161,6 +163,7 @@ public void zoomOut() { if (magnification < 0.1f) { magnification = 0.1f; } + validateOffset(); setZoomLabel(); redraw(); } @@ -193,6 +196,7 @@ public void zoomOut(MouseEvent mouseEvent) { offset.x = offset.x > 0 ? 0 : offset.x; offset.y = offset.y > 0 ? 0 : offset.y; + validateOffset(); setZoomLabel(); redraw(); } @@ -200,6 +204,7 @@ public void zoomOut(MouseEvent mouseEvent) { @GuiKeyboardShortcut(control = true, key = '0') public void zoom100Percent() { magnification = 1.0f; + validateOffset(); setZoomLabel(); redraw(); } @@ -319,30 +324,24 @@ public void validateOffset() { double viewWidth = area.x / zoomFactor; double viewHeight = area.y / zoomFactor; - // As a percentage of the view area, how much can we go outside the graph area? - // - double overshootPct = 0.75; - double overshootWidth = viewWidth * overshootPct; - double overshootHeight = viewHeight * overshootPct; - // Let's not move the graph off the screen to the top/left // - double minX = -graphWidth - overshootWidth; + double minX = -graphWidth + viewWidth; if (offset.x < minX) { offset.x = minX; } - double minY = -graphHeight - overshootHeight; + double minY = -graphHeight + viewHeight; if (offset.y < minY) { offset.y = minY; } // Are we moving the graph too far down/right? // - double maxX = overshootWidth; + double maxX = 0; if (offset.x > maxX) { offset.x = maxX; } - double maxY = overshootHeight; + double maxY = 0; if (offset.y > maxY) { offset.y = maxY; } From e0acb3e12cafee0a2f4b0152ded2a4f6f1e21c84 Mon Sep 17 00:00:00 2001 From: Nicolas Adment <39568358+nadment@users.noreply.github.com> Date: Mon, 25 Nov 2024 22:02:24 +0100 Subject: [PATCH 4/5] Fix encrypt PGP transform #4621 --- .../transforms/pgpencryptstream/PGPEncryptStreamMeta.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/plugins/transforms/pgp/src/main/java/org/apache/hop/pipeline/transforms/pgpencryptstream/PGPEncryptStreamMeta.java b/plugins/transforms/pgp/src/main/java/org/apache/hop/pipeline/transforms/pgpencryptstream/PGPEncryptStreamMeta.java index 42c7f58f874..b127c754510 100644 --- a/plugins/transforms/pgp/src/main/java/org/apache/hop/pipeline/transforms/pgpencryptstream/PGPEncryptStreamMeta.java +++ b/plugins/transforms/pgp/src/main/java/org/apache/hop/pipeline/transforms/pgpencryptstream/PGPEncryptStreamMeta.java @@ -34,7 +34,6 @@ import org.apache.hop.pipeline.PipelineMeta; import org.apache.hop.pipeline.transform.BaseTransformMeta; import org.apache.hop.pipeline.transform.TransformMeta; -import org.apache.hop.pipeline.transforms.pgpdecryptstream.PGPDecryptStream; import org.w3c.dom.Node; @Transform( @@ -45,9 +44,9 @@ categoryDescription = "i18n:org.apache.hop.pipeline.transform:BaseTransform.Category.Cryptography", keywords = "i18n::PGPEncryptStreamMeta.keyword", - documentationUrl = "/pipeline/transforms/pgpdecryptstream.html") + documentationUrl = "/pipeline/transforms/pgpencryptstream.html") public class PGPEncryptStreamMeta - extends BaseTransformMeta { + extends BaseTransformMeta { private static final Class PKG = PGPEncryptStreamMeta.class; /** GPG location */ From 6aaeac10998572c0253c43c356f0b8d7d97595e1 Mon Sep 17 00:00:00 2001 From: Adalennis Date: Tue, 26 Nov 2024 19:36:06 +0100 Subject: [PATCH 5/5] updated beam input and beam output page names.fixes #4609 --- .../modules/ROOT/pages/pipeline/transforms.adoc | 4 ++-- .../transforms/{beaminput.adoc => beamfileinput.adoc} | 6 +++--- .../transforms/{beamoutput.adoc => beamfileoutput.adoc} | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) rename docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/{beaminput.adoc => beamfileinput.adoc} (89%) rename docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/{beamoutput.adoc => beamfileoutput.adoc} (90%) diff --git a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms.adoc b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms.adoc index d8ad52baa48..d37e15ebed3 100644 --- a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms.adoc +++ b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms.adoc @@ -45,12 +45,12 @@ The pages nested under this topic contain information on how to use the transfor * xref:pipeline/transforms/beambigqueryoutput.adoc[Beam BigQuery Output] * xref:pipeline/transforms/beamgcppublisher.adoc[Beam GCP Pub/Sub : Publish] * xref:pipeline/transforms/beamgcpsubscriber.adoc[Beam GCP Pub/Sub : Subscribe] -* xref:pipeline/transforms/beaminput.adoc[Beam Input] +* xref:pipeline/transforms/beamfileinput.adoc[Beam File Input] +* xref:pipeline/transforms/beamfileoutput.adoc[Beam File Output] * xref:pipeline/transforms/beamkafkaconsume.adoc[Beam Kafka Consume] * xref:pipeline/transforms/beamkafkaproduce.adoc[Beam Kafka Produce] * xref:pipeline/transforms/beamkinesisconsume.adoc[Beam Kinesis Consume] * xref:pipeline/transforms/beamkinesisproduce.adoc[Beam Kinesis Produce] -* xref:pipeline/transforms/beamoutput.adoc[Beam Output] * xref:pipeline/transforms/beamtimestamp.adoc[Beam Timestamp] * xref:pipeline/transforms/beamwindow.adoc[Beam Window] * xref:pipeline/transforms/blockingtransform.adoc[Blocking transform] diff --git a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beaminput.adoc b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beamfileinput.adoc similarity index 89% rename from docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beaminput.adoc rename to docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beamfileinput.adoc index 474583a7241..2283f0819b4 100644 --- a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beaminput.adoc +++ b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beamfileinput.adoc @@ -16,16 +16,16 @@ under the License. //// :documentationPath: /pipeline/transforms/ :language: en_US -:description: The Beam Input transform reads files using a file definition with the Beam execution engine. +:description: The Beam File Input transform reads files using a file definition with the Beam execution engine. -= image:transforms/icons/beam-input.svg[Beam Input Icon, role="image-doc-icon"] Beam Input += image:transforms/icons/beam-input.svg[Beam Input Icon, role="image-doc-icon"] Beam File Input [%noheader,cols="3a,1a", role="table-no-borders" ] |=== | == Description -The Beam Input transform reads files using a file definition with the Beam execution engine. +The Beam File Input transform reads files using a file definition with the Beam execution engine. | == Supported Engines diff --git a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beamoutput.adoc b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beamfileoutput.adoc similarity index 90% rename from docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beamoutput.adoc rename to docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beamfileoutput.adoc index 0a6ccbcf775..391ac6d83b2 100644 --- a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beamoutput.adoc +++ b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beamfileoutput.adoc @@ -16,16 +16,16 @@ under the License. //// :documentationPath: /pipeline/transforms/ :language: en_US -:description: The Beam Output transform writes files using a file definition with the Beam execution engine. +:description: The Beam File Output transform writes files using a file definition with the Beam execution engine. -= image:transforms/icons/beam-output.svg[Beam Output Icon, role="image-doc-icon"] Beam Output += image:transforms/icons/beam-output.svg[Beam Output Icon, role="image-doc-icon"] Beam File Output [%noheader,cols="3a,1a", role="table-no-borders" ] |=== | == Description -The Beam Output transform writes files using a file definition with the Beam execution engine. +The Beam File Output transform writes files using a file definition with the Beam execution engine. | == Supported Engines [%noheader,cols="2,1a",frame=none, role="table-supported-engines"]