This is an automated email from the ASF dual-hosted git repository. nadment pushed a commit to branch 4145 in repository https://gitbox.apache.org/repos/asf/hop.git
commit 0bc8108bc5dff9dcfde7661daa52e412e2d2c124 Author: Nicolas Adment <[email protected]> AuthorDate: Sat Jul 20 16:58:47 2024 +0200 Cleanup XML of transform WriteToLog #4145 --- .../ROOT/pages/pipeline/metadata-injection.adoc | 2 +- .../{WriteToLogData.java => LogField.java} | 45 +++-- .../pipeline/transforms/writetolog/WriteToLog.java | 56 ++---- .../transforms/writetolog/WriteToLogData.java | 4 +- .../transforms/writetolog/WriteToLogDialog.java | 83 ++++----- .../transforms/writetolog/WriteToLogMeta.java | 199 +++++++-------------- .../writetolog/messages/messages_en_US.properties | 8 + .../writetolog/WriteToLogMetaSymmetric.java | 48 ----- .../transforms/writetolog/WriteToLogMetaTest.java | 99 +++++----- 9 files changed, 211 insertions(+), 333 deletions(-) diff --git a/docs/hop-user-manual/modules/ROOT/pages/pipeline/metadata-injection.adoc b/docs/hop-user-manual/modules/ROOT/pages/pipeline/metadata-injection.adoc index 5023357164..b1626e7b8a 100644 --- a/docs/hop-user-manual/modules/ROOT/pages/pipeline/metadata-injection.adoc +++ b/docs/hop-user-manual/modules/ROOT/pages/pipeline/metadata-injection.adoc @@ -295,7 +295,7 @@ The goal is to add Metadata Injection support to all transforms, The current sta |Web services lookup|N |Workflow executor|N |Workflow Logging|Y -|Write to log|N +|Write to log|Y |XML input stream (StAX)|N |XML join|Y |XML output|Y diff --git a/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLogData.java b/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/LogField.java similarity index 52% copy from plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLogData.java copy to plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/LogField.java index 9225e4e57e..54dc0c6212 100644 --- a/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLogData.java +++ b/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/LogField.java @@ -17,19 +17,42 @@ package org.apache.hop.pipeline.transforms.writetolog; -import org.apache.hop.core.logging.LogLevel; -import org.apache.hop.pipeline.transform.BaseTransformData; -import org.apache.hop.pipeline.transform.ITransformData; +import java.util.Objects; +import org.apache.hop.metadata.api.HopMetadataProperty; -@SuppressWarnings("java:S1104") -public class WriteToLogData extends BaseTransformData implements ITransformData { +public class LogField { - public int[] fieldnrs; - public int fieldnr; - public LogLevel loglevel; - public String logmessage; + public LogField() {} - public WriteToLogData() { - super(); + public LogField(String name) { + this.name = name; + } + + @HopMetadataProperty( + key = "name", + injectionKey = "NAME", + injectionKeyDescription = "WriteToLogMeta.Injection.field.Name") + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public int hashCode() { + return Objects.hash(name); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; + LogField other = (LogField) obj; + return Objects.equals(name, other.name); } } diff --git a/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLog.java b/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLog.java index 061c924d60..1ed18756a6 100644 --- a/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLog.java +++ b/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLog.java @@ -48,8 +48,8 @@ public class WriteToLog extends BaseTransform<WriteToLogMeta, WriteToLogData> { @Override public boolean processRow() throws HopException { - Object[] r = getRow(); // get row, set busy! - if (r == null) { // no more input to be expected... + Object[] row = getRow(); // get row, set busy! + if (row == null) { // no more input to be expected... setOutputDone(); return false; @@ -57,25 +57,23 @@ public class WriteToLog extends BaseTransform<WriteToLogMeta, WriteToLogData> { // Limit hit? skip if (rowCounterLimitHit) { - putRow(getInputRowMeta(), r); // copy row to output + putRow(getInputRowMeta(), row); // copy row to output return true; } if (first) { first = false; - if (meta.getFieldName() != null && meta.getFieldName().length > 0) { - data.fieldnrs = new int[meta.getFieldName().length]; - + if (meta.getLogFields() != null && !meta.getLogFields().isEmpty()) { + data.fieldnrs = new int[meta.getLogFields().size()]; for (int i = 0; i < data.fieldnrs.length; i++) { - data.fieldnrs[i] = getInputRowMeta().indexOfValue(meta.getFieldName()[i]); + LogField field = meta.getLogFields().get(i); + data.fieldnrs[i] = getInputRowMeta().indexOfValue(field.getName()); if (data.fieldnrs[i] < 0) { logError( - BaseMessages.getString( - PKG, "WriteToLog.Log.CanNotFindField", meta.getFieldName()[i])); + BaseMessages.getString(PKG, "WriteToLog.Log.CanNotFindField", field.getName())); throw new HopException( - BaseMessages.getString( - PKG, "WriteToLog.Log.CanNotFindField", meta.getFieldName()[i])); + BaseMessages.getString(PKG, "WriteToLog.Log.CanNotFindField", field.getName())); } } } else { @@ -85,10 +83,10 @@ public class WriteToLog extends BaseTransform<WriteToLogMeta, WriteToLogData> { } } data.fieldnr = data.fieldnrs.length; - data.loglevel = meta.getLogLevelByDesc(); - data.logmessage = Const.NVL(this.resolve(meta.getLogMessage()), ""); - if (!Utils.isEmpty(data.logmessage)) { - data.logmessage += Const.CR + Const.CR; + data.logLevel = meta.getLogLevel(); + data.logMessage = Const.NVL(this.resolve(meta.getLogMessage()), ""); + if (!Utils.isEmpty(data.logMessage)) { + data.logMessage += Const.CR + Const.CR; } } // end if first @@ -104,7 +102,7 @@ public class WriteToLog extends BaseTransform<WriteToLogMeta, WriteToLogData> { // Loop through fields for (int i = 0; i < data.fieldnr; i++) { - String fieldvalue = getInputRowMeta().getString(r, data.fieldnrs[i]); + String fieldvalue = getInputRowMeta().getString(row, data.fieldnrs[i]); if (meta.isDisplayHeader()) { String fieldname = getInputRowMeta().getFieldNames()[data.fieldnrs[i]]; @@ -115,52 +113,46 @@ public class WriteToLog extends BaseTransform<WriteToLogMeta, WriteToLogData> { } out.append(Const.CR + "===================="); - setLog(data.loglevel, out); + setLog(data.logLevel, out); // Increment counter if (meta.isLimitRows() && ++rowCounter >= meta.getLimitRowsNumber()) { rowCounterLimitHit = true; } - putRow(getInputRowMeta(), r); // copy row to output + putRow(getInputRowMeta(), row); // copy row to output return true; } - private void setLog(LogLevel loglevel, StringBuilder msg) { + /** Output message to log */ + private void setLog(final LogLevel loglevel, final StringBuilder msg) { switch (loglevel) { case ERROR: - // Output message to log // Log level = ERREUR logError(msg.toString()); break; case MINIMAL: - // Output message to log // Log level = MINIMAL logMinimal(msg.toString()); break; case BASIC: - // Output message to log // Log level = BASIC logBasic(msg.toString()); break; case DETAILED: - // Output message to log // Log level = DETAILED logDetailed(msg.toString()); break; case DEBUG: - // Output message to log // Log level = DEBUG logDebug(msg.toString()); break; case ROWLEVEL: - // Output message to log // Log level = ROW LEVEL logRowlevel(msg.toString()); break; case NOTHING: - // Output nothing to log // Log level = NOTHING break; default: @@ -169,16 +161,6 @@ public class WriteToLog extends BaseTransform<WriteToLogMeta, WriteToLogData> { } public String getRealLogMessage() { - return data.logmessage; - } - - @Override - public boolean init() { - - if (super.init()) { - // Add init code here. - return true; - } - return false; + return data.logMessage; } } diff --git a/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLogData.java b/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLogData.java index 9225e4e57e..086b669bd1 100644 --- a/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLogData.java +++ b/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLogData.java @@ -26,8 +26,8 @@ public class WriteToLogData extends BaseTransformData implements ITransformData public int[] fieldnrs; public int fieldnr; - public LogLevel loglevel; - public String logmessage; + public LogLevel logLevel; + public String logMessage; public WriteToLogData() { super(); diff --git a/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLogDialog.java b/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLogDialog.java index 7d99537e7a..3f5d33d984 100644 --- a/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLogDialog.java +++ b/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLogDialog.java @@ -40,14 +40,12 @@ import org.apache.hop.ui.pipeline.transform.BaseTransformDialog; import org.apache.hop.ui.pipeline.transform.ITableItemInsertListener; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CCombo; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; @@ -59,16 +57,11 @@ public class WriteToLogDialog extends BaseTransformDialog { private final WriteToLogMeta input; private CCombo wLoglevel; - private Button wPrintHeader; - private StyledTextComp wLogMessage; - private TableView wFields; - private Button wLimitRows; - - Label wlLimitRowsNumber; + private Label wlLimitRowsNumber; private Text wLimitRowsNumber; private final List<String> inputFields = new ArrayList<>(); @@ -89,24 +82,7 @@ public class WriteToLogDialog extends BaseTransformDialog { PropsUi.setLook(shell); setShellImage(shell, input); - ModifyListener lsMod = modifyEvent -> input.setChanged(); - - SelectionAdapter lsSelMod = - new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - input.setChanged(); - } - }; - - SelectionAdapter lsLimitRows = - new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - input.setChanged(); - enableFields(); - } - }; + Listener lsModify = event -> input.setChanged(); changed = input.hasChanged(); @@ -132,7 +108,7 @@ public class WriteToLogDialog extends BaseTransformDialog { wTransformName = new Text(shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER); wTransformName.setText(transformName); PropsUi.setLook(wTransformName); - wTransformName.addModifyListener(lsMod); + wTransformName.addListener(SWT.Modify, lsModify); fdTransformName = new FormData(); fdTransformName.left = new FormAttachment(middle, 0); fdTransformName.top = new FormAttachment(0, margin); @@ -156,7 +132,7 @@ public class WriteToLogDialog extends BaseTransformDialog { fdLoglevel.top = new FormAttachment(wTransformName, margin); fdLoglevel.right = new FormAttachment(100, 0); wLoglevel.setLayoutData(fdLoglevel); - wLoglevel.addSelectionListener(lsSelMod); + wLoglevel.addListener(SWT.Selection, lsModify); // print header? Label wlPrintHeader = new Label(shell, SWT.RIGHT); @@ -176,7 +152,7 @@ public class WriteToLogDialog extends BaseTransformDialog { fdPrintHeader.top = new FormAttachment(wlPrintHeader, 0, SWT.CENTER); fdPrintHeader.right = new FormAttachment(100, 0); wPrintHeader.setLayoutData(fdPrintHeader); - wPrintHeader.addSelectionListener(lsSelMod); + wPrintHeader.addListener(SWT.Selection, lsModify); // Limit output? // ICache? @@ -194,7 +170,8 @@ public class WriteToLogDialog extends BaseTransformDialog { fdLimitRows.left = new FormAttachment(middle, 0); fdLimitRows.top = new FormAttachment(wlLimitRows, 0, SWT.CENTER); wLimitRows.setLayoutData(fdLimitRows); - wLimitRows.addSelectionListener(lsLimitRows); + wLimitRows.addListener(SWT.Selection, lsModify); + wLimitRows.addListener(SWT.Selection, e -> enableFields()); // LimitRows size line wlLimitRowsNumber = new Label(shell, SWT.RIGHT); @@ -210,7 +187,7 @@ public class WriteToLogDialog extends BaseTransformDialog { wLimitRowsNumber = new Text(shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER); PropsUi.setLook(wLimitRowsNumber); wLimitRowsNumber.setEnabled(input.isLimitRows()); - wLimitRowsNumber.addModifyListener(lsMod); + wLimitRowsNumber.addListener(SWT.Modify, lsModify); FormData fdLimitRowsNumber = new FormData(); fdLimitRowsNumber.left = new FormAttachment(middle, 0); fdLimitRowsNumber.right = new FormAttachment(100, 0); @@ -231,13 +208,13 @@ public class WriteToLogDialog extends BaseTransformDialog { new StyledTextComp( variables, shell, SWT.MULTI | SWT.LEFT | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); PropsUi.setLook(wLogMessage, Props.WIDGET_STYLE_FIXED); - wLogMessage.addModifyListener(lsMod); FormData fdLogMessage = new FormData(); fdLogMessage.left = new FormAttachment(middle, 0); fdLogMessage.top = new FormAttachment(wLimitRowsNumber, margin); fdLogMessage.right = new FormAttachment(100, -2 * margin); fdLogMessage.height = (int) (125 * props.getZoomFactor()); wLogMessage.setLayoutData(fdLogMessage); + wLogMessage.addListener(SWT.Modify, lsModify); wOk = new Button(shell, SWT.PUSH); wOk.setText(BaseMessages.getString(PKG, "System.Button.OK")); @@ -257,10 +234,10 @@ public class WriteToLogDialog extends BaseTransformDialog { fdlFields.top = new FormAttachment(wLogMessage, margin); wlFields.setLayoutData(fdlFields); - final int FieldsCols = 1; - final int FieldsRows = input.getFieldName().length; + final int fieldsCols = 1; + final int fieldsRows = input.getLogFields().size(); - colinf = new ColumnInfo[FieldsCols]; + colinf = new ColumnInfo[fieldsCols]; colinf[0] = new ColumnInfo( BaseMessages.getString(PKG, "WriteToLogDialog.Fieldname.Column"), @@ -273,8 +250,8 @@ public class WriteToLogDialog extends BaseTransformDialog { shell, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI, colinf, - FieldsRows, - lsMod, + fieldsRows, + event -> input.setChanged(), props); FormData fdFields = new FormData(); @@ -284,9 +261,8 @@ public class WriteToLogDialog extends BaseTransformDialog { fdFields.bottom = new FormAttachment(wOk, -2 * margin); wFields.setLayoutData(fdFields); - // // Search the fields in the background - + // final Runnable runnable = () -> { TransformMeta transformMeta = pipelineMeta.findTransform(transformName); @@ -347,24 +323,25 @@ public class WriteToLogDialog extends BaseTransformDialog { /** Copy information from the meta-data input to the dialog fields. */ public void getData() { - wLoglevel.select(input.getLogLevelByDesc().getLevel()); wPrintHeader.setSelection(input.isDisplayHeader()); wLimitRows.setSelection(input.isLimitRows()); wLimitRowsNumber.setText("" + input.getLimitRowsNumber()); + if (input.getLogLevel() != null) { + wLoglevel.select(input.getLogLevel().getLevel()); + } + if (input.getLogMessage() != null) { wLogMessage.setText(input.getLogMessage()); } Table table = wFields.table; - if (input.getFieldName().length > 0) { - table.removeAll(); - } - for (int i = 0; i < input.getFieldName().length; i++) { + for (int i = 0; i < input.getLogFields().size(); i++) { + LogField field = input.getLogFields().get(i); TableItem ti = new TableItem(table, SWT.NONE); ti.setText(0, "" + (i + 1)); - ti.setText(1, input.getFieldName()[i]); + ti.setText(1, field.getName()); } wFields.setRowNums(); @@ -391,9 +368,9 @@ public class WriteToLogDialog extends BaseTransformDialog { input.setLimitRowsNumber(Const.toInt(wLimitRowsNumber.getText(), 0)); if (wLoglevel.getSelectionIndex() < 0) { - input.setLogLevel(3); // Basic + input.setLogLevel(LogLevel.BASIC); } else { - input.setLogLevel(wLoglevel.getSelectionIndex()); + input.setLogLevel(LogLevel.lookupCode(wLoglevel.getText())); } if (wLogMessage.getText() != null && wLogMessage.getText().length() > 0) { @@ -403,12 +380,14 @@ public class WriteToLogDialog extends BaseTransformDialog { } int nrFields = wFields.nrNonEmpty(); - input.allocate(nrFields); + List<LogField> fields = new ArrayList<>(nrFields); for (int i = 0; i < nrFields; i++) { - TableItem ti = wFields.getNonEmpty(i); - - input.getFieldName()[i] = ti.getText(1); + TableItem item = wFields.getNonEmpty(i); + LogField field = new LogField(); + field.setName(item.getText(1)); } + input.setLogFields(fields); + dispose(); } diff --git a/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLogMeta.java b/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLogMeta.java index e9933b68ec..640c8260b0 100644 --- a/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLogMeta.java +++ b/plugins/transforms/writetolog/src/main/java/org/apache/hop/pipeline/transforms/writetolog/WriteToLogMeta.java @@ -17,23 +17,21 @@ package org.apache.hop.pipeline.transforms.writetolog; -import java.util.Arrays; +import java.util.ArrayList; import java.util.List; import org.apache.hop.core.CheckResult; import org.apache.hop.core.Const; import org.apache.hop.core.ICheckResult; import org.apache.hop.core.annotations.Transform; -import org.apache.hop.core.exception.HopXmlException; import org.apache.hop.core.logging.LogLevel; import org.apache.hop.core.row.IRowMeta; import org.apache.hop.core.variables.IVariables; -import org.apache.hop.core.xml.XmlHandler; import org.apache.hop.i18n.BaseMessages; +import org.apache.hop.metadata.api.HopMetadataProperty; import org.apache.hop.metadata.api.IHopMetadataProvider; import org.apache.hop.pipeline.PipelineMeta; import org.apache.hop.pipeline.transform.BaseTransformMeta; import org.apache.hop.pipeline.transform.TransformMeta; -import org.w3c.dom.Node; @Transform( id = "WriteToLog", @@ -46,99 +44,76 @@ import org.w3c.dom.Node; public class WriteToLogMeta extends BaseTransformMeta<WriteToLog, WriteToLogData> { private static final Class<?> PKG = WriteToLogMeta.class; // For Translator - /** by which fields to display? */ - private String[] fieldName; - - public static String[] logLevelCodes = { - "log_level_nothing", - "log_level_error", - "log_level_minimal", - "log_level_basic", - "log_level_detailed", - "log_level_debug", - "log_level_rowlevel" - }; - + @HopMetadataProperty( + key = "displayHeader", + injectionKey = "DISPLAY_HEADER", + injectionKeyDescription = "WriteToLogMeta.Injection.DisplayHeader") private boolean displayHeader; + @HopMetadataProperty( + key = "limitRows", + injectionKey = "LIMIT_ROWS", + injectionKeyDescription = "WriteToLogMeta.Injection.LimitRows") private boolean limitRows; + @HopMetadataProperty( + key = "limitRowsNumber", + injectionKey = "LIMIT_ROWS_NUMBER", + injectionKeyDescription = "WriteToLogMeta.Injection.LimitRowsNumber") private int limitRowsNumber; - private String logmessage; - - private String loglevel; + @HopMetadataProperty( + key = "logmessage", + injectionKey = "LOG_MESSAGE", + injectionKeyDescription = "WriteToLogMeta.Injection.LogMessage") + private String logMessage; + + /** The log level with which the message should be logged. */ + @HopMetadataProperty( + key = "loglevel", + storeWithCode = true, + injectionKeyDescription = "WriteToLogMeta.Injection.LogLevel") + private LogLevel logLevel; + + /** The fields which should be to logged. */ + @HopMetadataProperty( + key = "field", + groupKey = "fields", + injectionGroupDescription = "WriteToLogMeta.Injection.Fields", + injectionKeyDescription = "WriteToLogMeta.Injection.Field") + private List<LogField> logFields = new ArrayList<>(); public WriteToLogMeta() { - super(); // allocate BaseTransformMeta + super(); } - // For testing purposes only - public int getLogLevel() { - return Arrays.asList(logLevelCodes).indexOf(loglevel); - } - - public void setLogLevel(int i) { - loglevel = logLevelCodes[i]; - } - - public LogLevel getLogLevelByDesc() { - if (loglevel == null) { - return LogLevel.BASIC; - } - LogLevel retval; - if (loglevel.equals(logLevelCodes[0])) { - retval = LogLevel.NOTHING; - } else if (loglevel.equals(logLevelCodes[1])) { - retval = LogLevel.ERROR; - } else if (loglevel.equals(logLevelCodes[2])) { - retval = LogLevel.MINIMAL; - } else if (loglevel.equals(logLevelCodes[3])) { - retval = LogLevel.BASIC; - } else if (loglevel.equals(logLevelCodes[4])) { - retval = LogLevel.DETAILED; - } else if (loglevel.equals(logLevelCodes[5])) { - retval = LogLevel.DEBUG; - } else { - retval = LogLevel.ROWLEVEL; - } - return retval; + public LogLevel getLogLevel() { + return this.logLevel; } - @Override - public void loadXml(Node transformNode, IHopMetadataProvider metadataProvider) - throws HopXmlException { - readData(transformNode); + public void setLogLevel(LogLevel logLevel) { + this.logLevel = logLevel; } @Override public Object clone() { WriteToLogMeta retval = (WriteToLogMeta) super.clone(); - int nrFields = fieldName.length; - - retval.allocate(nrFields); - System.arraycopy(fieldName, 0, retval.fieldName, 0, nrFields); - return retval; } - public void allocate(int nrFields) { - fieldName = new String[nrFields]; - } - /** * @return Returns the fieldName. */ - public String[] getFieldName() { - return fieldName; + public List<LogField> getLogFields() { + return logFields; } /** * @param fieldName The fieldName to set. */ - public void setFieldName(String[] fieldName) { - this.fieldName = fieldName; + public void setLogFields(List<LogField> fields) { + this.logFields = fields; } public boolean isDisplayHeader() { @@ -166,75 +141,22 @@ public class WriteToLogMeta extends BaseTransformMeta<WriteToLog, WriteToLogData } public String getLogMessage() { - if (logmessage == null) { - logmessage = ""; - } - return logmessage; - } - - public void setLogMessage(String s) { - logmessage = s; - } - - private void readData(Node transformNode) throws HopXmlException { - try { - loglevel = XmlHandler.getTagValue(transformNode, "loglevel"); - displayHeader = "Y".equalsIgnoreCase(XmlHandler.getTagValue(transformNode, "displayHeader")); - - limitRows = "Y".equalsIgnoreCase(XmlHandler.getTagValue(transformNode, "limitRows")); - String limitRowsNumberString = XmlHandler.getTagValue(transformNode, "limitRowsNumber"); - limitRowsNumber = Const.toInt(limitRowsNumberString, 5); - - logmessage = XmlHandler.getTagValue(transformNode, "logmessage"); - - Node fields = XmlHandler.getSubNode(transformNode, "fields"); - int nrFields = XmlHandler.countNodes(fields, "field"); - - allocate(nrFields); - - for (int i = 0; i < nrFields; i++) { - Node fnode = XmlHandler.getSubNodeByNr(fields, "field", i); - fieldName[i] = XmlHandler.getTagValue(fnode, "name"); - } - } catch (Exception e) { - throw new HopXmlException("Unable to load transform info from XML", e); + if (logMessage == null) { + logMessage = ""; } + return logMessage; } - @Override - public String getXml() { - StringBuilder retval = new StringBuilder(); - retval.append(" " + XmlHandler.addTagValue("loglevel", loglevel)); - retval.append(" " + XmlHandler.addTagValue("displayHeader", displayHeader)); - retval.append(" " + XmlHandler.addTagValue("limitRows", limitRows)); - retval.append(" " + XmlHandler.addTagValue("limitRowsNumber", limitRowsNumber)); - - retval.append(" " + XmlHandler.addTagValue("logmessage", logmessage)); - - retval.append(" <fields>" + Const.CR); - for (int i = 0; i < fieldName.length; i++) { - retval.append(" <field>" + Const.CR); - retval.append(" " + XmlHandler.addTagValue("name", fieldName[i])); - retval.append(" </field>" + Const.CR); - } - retval.append(" </fields>" + Const.CR); - - return retval.toString(); + public void setLogMessage(String message) { + logMessage = message; } @Override public void setDefault() { - loglevel = logLevelCodes[3]; displayHeader = true; - logmessage = ""; - - int nrFields = 0; - - allocate(nrFields); - - for (int i = 0; i < nrFields; i++) { - fieldName[i] = "field" + i; - } + logLevel = LogLevel.BASIC; + logMessage = ""; + logFields = new ArrayList<>(); } @Override @@ -269,10 +191,11 @@ public class WriteToLogMeta extends BaseTransformMeta<WriteToLog, WriteToLogData boolean errorFound = false; // Starting from selected fields in ... - for (int i = 0; i < fieldName.length; i++) { - int idx = prev.indexOfValue(fieldName[i]); + // for (int i = 0; i < fieldName.length; i++) { + for (LogField field : logFields) { + int idx = prev.indexOfValue(field.getName()); if (idx < 0) { - errorMessage += "\t\t" + fieldName[i] + Const.CR; + errorMessage += "\t\t" + field.getName() + Const.CR; errorFound = true; } } @@ -283,19 +206,21 @@ public class WriteToLogMeta extends BaseTransformMeta<WriteToLog, WriteToLogData cr = new CheckResult(ICheckResult.TYPE_RESULT_ERROR, errorMessage, transformMeta); remarks.add(cr); } else { - if (fieldName.length > 0) { + if (logFields.isEmpty()) { cr = new CheckResult( - ICheckResult.TYPE_RESULT_OK, - BaseMessages.getString(PKG, "WriteToLogMeta.CheckResult.AllFieldsFound"), + CheckResult.TYPE_RESULT_WARNING, + BaseMessages.getString(PKG, "WriteToLogMeta.CheckResult.NoFieldsEntered"), transformMeta); + remarks.add(cr); } else { cr = new CheckResult( - CheckResult.TYPE_RESULT_WARNING, - BaseMessages.getString(PKG, "WriteToLogMeta.CheckResult.NoFieldsEntered"), + ICheckResult.TYPE_RESULT_OK, + BaseMessages.getString(PKG, "WriteToLogMeta.CheckResult.AllFieldsFound"), transformMeta); + remarks.add(cr); } } diff --git a/plugins/transforms/writetolog/src/main/resources/org/apache/hop/pipeline/transforms/writetolog/messages/messages_en_US.properties b/plugins/transforms/writetolog/src/main/resources/org/apache/hop/pipeline/transforms/writetolog/messages/messages_en_US.properties index 60d3c0be73..990c2eeaf6 100644 --- a/plugins/transforms/writetolog/src/main/resources/org/apache/hop/pipeline/transforms/writetolog/messages/messages_en_US.properties +++ b/plugins/transforms/writetolog/src/main/resources/org/apache/hop/pipeline/transforms/writetolog/messages/messages_en_US.properties @@ -36,3 +36,11 @@ WriteToLogMeta.CheckResult.NotReceivingFields=Not receiving any fields from prev WriteToLogMeta.CheckResult.TransformRecevingData=Transform is connected to previous one, receiving {0} fields WriteToLogMeta.CheckResult.TransformRecevingData2=Transform is receiving info from other transforms. WriteToLogMeta.keyword=write,log +WriteToLogMeta.Injection.DisplayHeader=Print header (Y/N) +WriteToLogMeta.Injection.LimitRows=Limit rows (Y/N) +WriteToLogMeta.Injection.LimitRowsNumber=Nr of rows to print +WriteToLogMeta.Injection.LogMessage=Write to log +WriteToLogMeta.Injection.LogLevel=Log level +WriteToLogMeta.Injection.Fields=Fields +WriteToLogMeta.Injection.Field=Field +WriteToLogMeta.Injection.field.Name=Name diff --git a/plugins/transforms/writetolog/src/test/java/org/apache/pipeline/transforms/writetolog/WriteToLogMetaSymmetric.java b/plugins/transforms/writetolog/src/test/java/org/apache/pipeline/transforms/writetolog/WriteToLogMetaSymmetric.java deleted file mode 100644 index 696bb2e592..0000000000 --- a/plugins/transforms/writetolog/src/test/java/org/apache/pipeline/transforms/writetolog/WriteToLogMetaSymmetric.java +++ /dev/null @@ -1,48 +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. - */ -package org.apache.pipeline.transforms.writetolog; - -import org.apache.hop.core.logging.LogLevel; -import org.apache.hop.pipeline.transforms.writetolog.WriteToLogMeta; - -public class WriteToLogMetaSymmetric extends WriteToLogMeta { - - /** - * This class is here because of the asymmetry in WriteToLogMeta with respect to the getter and - * setter for the "loglevel" variable. The only getter for the variable actually returns a - * LogLevel object, and the setter expects an int. The underlying storage is a String. This - * asymmetry causes issues with test harnesses using reflection. - * - * <p>MB - 5/2016 - */ - public WriteToLogMetaSymmetric() { - super(); - } - - public String getLogLevelString() { - LogLevel lvl = super.getLogLevelByDesc(); - if (lvl == null) { - lvl = LogLevel.BASIC; - } - return WriteToLogMeta.logLevelCodes[lvl.getLevel()]; - } - - public void setLogLevelString(String value) { - LogLevel lvl = LogLevel.lookupCode(value); - super.setLogLevel(lvl.getLevel()); - } -} diff --git a/plugins/transforms/writetolog/src/test/java/org/apache/pipeline/transforms/writetolog/WriteToLogMetaTest.java b/plugins/transforms/writetolog/src/test/java/org/apache/pipeline/transforms/writetolog/WriteToLogMetaTest.java index c5ebc6303b..f35324e007 100644 --- a/plugins/transforms/writetolog/src/test/java/org/apache/pipeline/transforms/writetolog/WriteToLogMetaTest.java +++ b/plugins/transforms/writetolog/src/test/java/org/apache/pipeline/transforms/writetolog/WriteToLogMetaTest.java @@ -16,20 +16,26 @@ */ package org.apache.pipeline.transforms.writetolog; -import java.util.Arrays; +import java.util.EnumSet; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; +import java.util.UUID; import org.apache.hop.core.HopEnvironment; import org.apache.hop.core.exception.HopException; +import org.apache.hop.core.logging.LogLevel; import org.apache.hop.core.plugins.PluginRegistry; import org.apache.hop.junit.rules.RestoreHopEngineEnvironment; import org.apache.hop.pipeline.transforms.loadsave.LoadSaveTester; import org.apache.hop.pipeline.transforms.loadsave.initializer.IInitializer; -import org.apache.hop.pipeline.transforms.loadsave.validator.ArrayLoadSaveValidator; +import org.apache.hop.pipeline.transforms.loadsave.validator.BooleanLoadSaveValidator; +import org.apache.hop.pipeline.transforms.loadsave.validator.EnumLoadSaveValidator; import org.apache.hop.pipeline.transforms.loadsave.validator.IFieldLoadSaveValidator; +import org.apache.hop.pipeline.transforms.loadsave.validator.IntLoadSaveValidator; +import org.apache.hop.pipeline.transforms.loadsave.validator.ListLoadSaveValidator; import org.apache.hop.pipeline.transforms.loadsave.validator.StringLoadSaveValidator; +import org.apache.hop.pipeline.transforms.writetolog.LogField; import org.apache.hop.pipeline.transforms.writetolog.WriteToLogMeta; import org.junit.Before; import org.junit.ClassRule; @@ -37,51 +43,53 @@ import org.junit.Test; public class WriteToLogMetaTest implements IInitializer<WriteToLogMeta> { @ClassRule public static RestoreHopEngineEnvironment env = new RestoreHopEngineEnvironment(); - LoadSaveTester loadSaveTester; - Class<WriteToLogMetaSymmetric> testMetaClass = WriteToLogMetaSymmetric.class; + LoadSaveTester<WriteToLogMeta> loadSaveTester; @Before public void setUpLoadSave() throws Exception { HopEnvironment.init(); PluginRegistry.init(); List<String> attributes = - Arrays.asList( - "displayHeader", "limitRows", "limitRowsNumber", "logmessage", "loglevel", "fieldName"); + List.of( + "DisplayHeader", "LimitRows", "LimitRowsNumber", "LogMessage", "LogLevel", "LogFields"); Map<String, String> getterMap = - new HashMap<String, String>() { + new HashMap<>() { { - put("displayHeader", "isDisplayHeader"); - put("limitRows", "isLimitRows"); - put("limitRowsNumber", "getLimitRowsNumber"); - put("logmessage", "getLogMessage"); - put("loglevel", "getLogLevelString"); - put("fieldName", "getFieldName"); + put("DisplayHeader", "isDisplayHeader"); + put("LimitRows", "isLimitRows"); + put("LimitRowsNumber", "getLimitRowsNumber"); + put("LogMessage", "getLogMessage"); + put("LogLevel", "getLogLevel"); + put("LogFields", "getLogFields"); } }; + Map<String, String> setterMap = - new HashMap<String, String>() { + new HashMap<>() { { - put("displayHeader", "setDisplayHeader"); - put("limitRows", "setLimitRows"); - put("limitRowsNumber", "setLimitRowsNumber"); - put("logmessage", "setLogMessage"); - put("loglevel", "setLogLevelString"); - put("fieldName", "setFieldName"); + put("DisplayHeader", "setDisplayHeader"); + put("LimitRows", "setLimitRows"); + put("LimitRowsNumber", "setLimitRowsNumber"); + put("LogMessage", "setLogMessage"); + put("LogLevel", "setLogLevel"); + put("LogFields", "setLogFields"); } }; - IFieldLoadSaveValidator<String[]> stringArrayLoadSaveValidator = - new ArrayLoadSaveValidator<>(new StringLoadSaveValidator(), 5); Map<String, IFieldLoadSaveValidator<?>> attrValidatorMap = new HashMap<>(); - attrValidatorMap.put("fieldName", stringArrayLoadSaveValidator); - attrValidatorMap.put("loglevel", new LogLevelLoadSaveValidator()); + attrValidatorMap.put("DisplayHeader", new BooleanLoadSaveValidator()); + attrValidatorMap.put("LimitRows", new BooleanLoadSaveValidator()); + attrValidatorMap.put("LimitRowsNumber", new IntLoadSaveValidator()); + attrValidatorMap.put("LogMessage", new StringLoadSaveValidator()); + attrValidatorMap.put("LogLevel", createLogLevelValidators()); + attrValidatorMap.put("LogFields", new ListLoadSaveValidator<>(new LogFieldLoadSaveValidator())); Map<String, IFieldLoadSaveValidator<?>> typeValidatorMap = new HashMap<>(); loadSaveTester = - new LoadSaveTester( - testMetaClass, + new LoadSaveTester<WriteToLogMeta>( + WriteToLogMeta.class, attributes, getterMap, setterMap, @@ -90,35 +98,36 @@ public class WriteToLogMetaTest implements IInitializer<WriteToLogMeta> { this); } - // Call the allocate method on the LoadSaveTester meta class - @Override - public void modify(WriteToLogMeta someMeta) { - if (someMeta instanceof WriteToLogMeta) { - ((WriteToLogMeta) someMeta).allocate(5); - } - } - @Test public void testSerialization() throws HopException { loadSaveTester.testSerialization(); } - public class LogLevelLoadSaveValidator implements IFieldLoadSaveValidator<String> { - final Random rand = new Random(); - - @Override - public String getTestObject() { - int idx = rand.nextInt((WriteToLogMeta.logLevelCodes.length)); - return WriteToLogMeta.logLevelCodes[idx]; - } + protected EnumLoadSaveValidator<LogLevel> createLogLevelValidators() { + EnumSet<LogLevel> logLevels = EnumSet.allOf(LogLevel.class); + LogLevel random = (LogLevel) logLevels.toArray()[new Random().nextInt(logLevels.size())]; + return new EnumLoadSaveValidator<>(random); + } + private final class LogFieldLoadSaveValidator implements IFieldLoadSaveValidator<LogField> { @Override - public boolean validateTestObject(String testObject, Object actual) { - if (!(actual instanceof String)) { + public boolean validateTestObject(LogField testObject, Object actual) { + if (!(actual instanceof LogField)) { return false; } - String actualInput = (String) actual; + LogField actualInput = (LogField) actual; return (testObject.equals(actualInput)); } + + @Override + public LogField getTestObject() { + return new LogField(UUID.randomUUID().toString()); + } + } + + @Override + public void modify(WriteToLogMeta object) { + // TODO Auto-generated method stub + } }
