fix(TUP-21346)XSD File not creating all columns in Schema (#2148)

* fix(TUP-21346)XSD File not creating all columns in Schema

* fix(TUP-21346)settings in the preference is useless  when  edit the xml
metadata

* fix(TUP-21346)settings in the preference is useless when edit the xml

* fix(TUP-21346)settings in the preference is useless when edit the xml

* fix(TUP-21346)settings in the preference is useless when edit the xml

* fix(TUP-21346)settings in the preference is useless when edit the xml

* fix(TUP-21346)settings in the preference is useless when edit the xml

* fix(TUP-21346)improve the ui

* fix(TUP-21346)XSD File not creating all columns in Schema

* fix(TUP-21346)XSD File not creating all columns in Schema

* fix(TUP-21346)XSD File not creating all columns in Schema
This commit is contained in:
jiezhang-tlnd
2019-01-15 19:17:19 +08:00
committed by Chao MENG
parent e5deedc9a8
commit a55da89a22
4 changed files with 176 additions and 74 deletions

View File

@@ -1421,7 +1421,7 @@ XmlToXPathLinker.illegalArgumentException=This type of currentControl is unsuppo
XmlFileSelectWizardPage.Input_XML=Input XML
XmlFileSelectWizardPage.OutPut_XML=OutPut XML
XmlFileOutputStep1Form.Encording=Encording
XmlFileOutputStep2Form.Error=You could increase maximum amount columns in 'Preferences/Talend/Metadata' to show all columns of schema\n
XmlFileOutputStep2Form.refresh=Refresh 'Schema List' viewer
MetadataTableEditor.ColumnNameIsNull=Error\: Column name is null
MetadataTalendTypeEditor.button.edit=E&dit
MetadataTalendTypeEditor.button.export=E&xport

View File

@@ -31,6 +31,7 @@ import org.talend.commons.runtime.xml.XmlUtil;
import org.talend.commons.ui.runtime.exception.ExceptionHandler;
import org.talend.commons.utils.workbench.resources.ResourceUtils;
import org.talend.core.model.general.Project;
import org.talend.core.model.metadata.IMetadataColumn;
import org.talend.core.model.metadata.builder.ConvertionHelper;
import org.talend.core.model.metadata.builder.connection.ConnectionFactory;
import org.talend.core.model.metadata.builder.connection.MetadataColumn;
@@ -119,57 +120,64 @@ public abstract class AbstractXmlFileStepForm extends AbstractXmlStepForm {
}
protected void initMetadataTable(List<FOXTreeNode> list, EList columnList) {
protected void initMetadataTable(List<FOXTreeNode> list, EList columnList, boolean isEditor, int maxLimit) {
int maxColumnsNumber = CoreUIPlugin.getDefault().getPreferenceStore()
.getInt(ITalendCorePrefConstants.MAXIMUM_AMOUNT_OF_COLUMNS_FOR_XML);
if (isEditor) {
maxColumnsNumber = maxLimit;
}
for (FOXTreeNode node : list) {
if (columnList.size() > maxColumnsNumber) {
if (columnList.size() >= maxColumnsNumber) {
return;
}
MetadataEmfTableEditor editor = new MetadataEmfTableEditor();
if (node instanceof Element) {
String label = node.getLabel();
if (!node.hasChildren() && label != null && !label.equals("")) {
String columnName = label;
if (columnName.contains(":")) { //$NON-NLS-1$
columnName = columnName.split(":")[1]; //$NON-NLS-1$
IMetadataColumn column = node.getColumn();
if (!isEditor || column == null) {
MetadataEmfTableEditor editor = new MetadataEmfTableEditor();
if (node instanceof Element) {
String label = node.getLabel();
if (!node.hasChildren() && label != null && !label.equals("")) {
String columnName = label;
if (columnName.contains(":")) { //$NON-NLS-1$
columnName = columnName.split(":")[1]; //$NON-NLS-1$
}
columnName = columnName.replaceAll("[^a-zA-Z0-9]", "_");
String dataType = node.getDataType();
MetadataColumn metadataColumn = ConnectionFactory.eINSTANCE.createMetadataColumn();
metadataColumn.setLabel(editor.getNextGeneratedColumnName(columnName, columnList));
metadataColumn.setOriginalField(label);
metadataColumn.setTalendType(dataType);
metadataColumn.setPattern("\"dd-MM-yyyy\""); //$NON-NLS-1$
metadataColumn.setLength(node.getDataMaxLength());
metadataColumn.setPrecision(node.getPrecisionValue());
columnList.add(metadataColumn);
node.setColumn(ConvertionHelper.convertToIMetaDataColumn(metadataColumn));
}
columnName = columnName.replaceAll("[^a-zA-Z0-9]", "_");
String dataType = node.getDataType();
MetadataColumn metadataColumn = ConnectionFactory.eINSTANCE.createMetadataColumn();
metadataColumn.setLabel(editor.getNextGeneratedColumnName(columnName, columnList));
metadataColumn.setOriginalField(label);
metadataColumn.setTalendType(dataType);
metadataColumn.setPattern("\"dd-MM-yyyy\""); //$NON-NLS-1$
metadataColumn.setLength(node.getDataMaxLength());
metadataColumn.setPrecision(node.getPrecisionValue());
columnList.add(metadataColumn);
node.setColumn(ConvertionHelper.convertToIMetaDataColumn(metadataColumn));
}
}
if (node instanceof Attribute) {
String label = node.getLabel();
if (label != null && !label.equals("")) {
String columnName = label;
if (columnName.contains(":")) { //$NON-NLS-1$
columnName = columnName.split(":")[1]; //$NON-NLS-1$
if (node instanceof Attribute) {
String label = node.getLabel();
if (label != null && !label.equals("")) {
String columnName = label;
if (columnName.contains(":")) { //$NON-NLS-1$
columnName = columnName.split(":")[1]; //$NON-NLS-1$
}
columnName = columnName.replaceAll("[^a-zA-Z0-9]", "_");
String dataType = node.getDataType();
MetadataColumn metadataColumn = ConnectionFactory.eINSTANCE.createMetadataColumn();
metadataColumn.setLabel(editor.getNextGeneratedColumnName(columnName, columnList));
metadataColumn.setOriginalField(label);
metadataColumn.setTalendType(dataType);
metadataColumn.setPattern("\"dd-MM-yyyy\""); //$NON-NLS-1$
metadataColumn.setLength(node.getDataMaxLength());
metadataColumn.setPrecision(node.getPrecisionValue());
columnList.add(metadataColumn);
node.setColumn(ConvertionHelper.convertToIMetaDataColumn(metadataColumn));
}
columnName = columnName.replaceAll("[^a-zA-Z0-9]", "_");
String dataType = node.getDataType();
MetadataColumn metadataColumn = ConnectionFactory.eINSTANCE.createMetadataColumn();
metadataColumn.setLabel(editor.getNextGeneratedColumnName(columnName, columnList));
metadataColumn.setOriginalField(label);
metadataColumn.setTalendType(dataType);
metadataColumn.setPattern("\"dd-MM-yyyy\""); //$NON-NLS-1$
metadataColumn.setLength(node.getDataMaxLength());
metadataColumn.setPrecision(node.getPrecisionValue());
columnList.add(metadataColumn);
node.setColumn(ConvertionHelper.convertToIMetaDataColumn(metadataColumn));
}
}
if (node.hasChildren()) {
List<FOXTreeNode> children = node.getChildren();
initMetadataTable(children, columnList);
initMetadataTable(children, columnList, isEditor, maxLimit);
}
}
}
@@ -480,5 +488,4 @@ public abstract class AbstractXmlFileStepForm extends AbstractXmlStepForm {
public MetadataTable getMetadataOutputTable() {
return null;
}
}

View File

@@ -86,6 +86,7 @@ import org.talend.metadata.managment.ui.wizard.metadata.xml.utils.TreeUtil;
import org.talend.repository.ProjectManager;
import org.talend.repository.metadata.i18n.Messages;
import org.talend.repository.metadata.ui.wizards.form.AbstractXmlFileStepForm;
import orgomg.cwm.resource.record.RecordFactory;
import orgomg.cwm.resource.record.RecordFile;
@@ -330,7 +331,7 @@ public class XmlFileOutputStep1Form extends AbstractXmlFileStepForm {
}
EList schemaMetadataColumn = ConnectionHelper.getTables(getConnection()).toArray(new MetadataTable[0])[0].getColumns();
schemaMetadataColumn.clear();
initMetadataTable(rootFoxTreeNodes, schemaMetadataColumn);
initMetadataTable(rootFoxTreeNodes, schemaMetadataColumn, false, 0);
updateConnectionProperties(rootFoxTreeNodes.get(0));
}

View File

@@ -16,6 +16,7 @@ import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.emf.common.util.EList;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuListener;
@@ -23,6 +24,7 @@ import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ICellEditorListener;
@@ -39,6 +41,8 @@ import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
@@ -53,9 +57,9 @@ import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.talend.commons.runtime.xml.XmlUtil;
import org.talend.commons.ui.runtime.image.EImage;
import org.talend.commons.ui.runtime.image.ImageProvider;
import org.talend.commons.ui.swt.drawing.link.IExtremityLink;
import org.talend.commons.ui.swt.drawing.link.LinkDescriptor;
import org.talend.commons.ui.swt.drawing.link.LinksManager;
@@ -100,7 +104,6 @@ import org.talend.repository.ui.wizards.metadata.connection.files.xml.view.XmlFi
import org.talend.repository.ui.wizards.metadata.connection.files.xml.view.XmlFileTableViewerProvider;
import org.talend.repository.ui.wizards.metadata.connection.files.xml.view.XmlFileTreeViewerProvider;
import org.talend.repository.ui.wizards.metadata.connection.files.xml.view.XmlTree2SchemaLinker;
/**
* wzhang class global comment. Detailled comment
*/
@@ -108,12 +111,12 @@ public class XmlFileOutputStep2Form extends AbstractXmlFileStepForm {
private SashForm mainSashFormComposite;
protected Label statusLabelWarnText;
protected Label statusLabelWarn;
private Text limitNumberText;
private Button schemaButton;
private Button schemaButtonRefresh;
private ComboViewer rootComboViewer;
private Combo rootCombo;
@@ -178,15 +181,6 @@ public class XmlFileOutputStep2Form extends AbstractXmlFileStepForm {
addXmlFileViewer(mainSashFormComposite, 400, 100);
mainSashFormComposite.setWeights(new int[] { 40, 60 });
Composite createGroup = Form.startNewGridLayout(this, 2, false, SWT.RIGHT, SWT.BOTTOM);
createGroup.setLayoutData(new GridData());
statusLabelWarn = new Label(createGroup, SWT.NONE);
statusLabelWarn.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_WARN_TSK));
statusLabelWarnText = new Label(createGroup, SWT.NONE);
statusLabelWarnText.setText(Messages.getString("XmlFileOutputStep2Form.Error"));
statusLabelWarnText.setVisible(false);
statusLabelWarn.setVisible(false);
linker = new XmlFileSchema2TreeLinker(mainSashFormComposite);
linker.setForm(this);
linker.init(schemaViewer.getTable(), xmlViewer);
@@ -408,11 +402,32 @@ public class XmlFileOutputStep2Form extends AbstractXmlFileStepForm {
private void addSchemaViewer(final Composite mainComposite, final int width, final int height) {
final Group group = Form.createGroup(mainComposite, 1, "Linker Source", height);
// group.setBackgroundMode(SWT.INHERIT_FORCE);
schemaButton = new Button(group, SWT.PUSH);
Composite createGroup = new Composite(group, SWT.NONE);
GridLayout gridLayoutTop = new GridLayout(2, false);
gridLayoutTop.marginHeight = 0;
gridLayoutTop.marginBottom = 0;
gridLayoutTop.marginLeft = 0;
gridLayoutTop.marginRight = 0;
gridLayoutTop.marginTop = 0;
gridLayoutTop.marginWidth = 0;
createGroup.setLayout(gridLayoutTop);
createGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
schemaButton = new Button(createGroup, SWT.PUSH);
schemaButton.setText("Schema Management");
schemaButton.setToolTipText("You can add or edit schema and save in 'Schema List' viewer");
Composite createGroupRight = new Composite(createGroup, SWT.NULL);
GridLayout gridLayoutRight = new GridLayout(3, false);
gridLayoutRight.marginHeight = 0;
gridLayoutRight.marginBottom = 0;
gridLayoutRight.marginLeft = 0;
gridLayoutRight.marginRight = 0;
gridLayoutRight.marginTop = 0;
gridLayoutRight.marginWidth = 0;
createGroupRight.setLayout(gridLayoutRight);
GridData gridDataRight = new GridData(SWT.END, SWT.BOTTOM, true, true);
createGroupRight.setLayoutData(gridDataRight);
setSchemaRefreshButton(createGroupRight, "Field Limit:", 1, SWT.BORDER);
schemaViewer = new TableViewer(group);
XmlFileTableViewerProvider provider = new XmlFileTableViewerProvider();
schemaViewer.setContentProvider(provider);
@@ -441,6 +456,34 @@ public class XmlFileOutputStep2Form extends AbstractXmlFileStepForm {
});
}
private void setSchemaRefreshButton(final Composite composite, String string, int horizontalSpan,
int styleField) {
Label label = new Label(composite, SWT.LEFT);
label.setText(string);
GridDataFactory.swtDefaults().applyTo(label);
limitNumberText = new Text(composite, styleField);
limitNumberText.setBackground(ColorConstants.white);
limitNumberText.selectAll();
GridData gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
gridData.horizontalSpan = horizontalSpan;
limitNumberText.setLayoutData(gridData);
Composite compositeButton = new Composite(composite, SWT.NONE);
GridLayout gridLayout = new GridLayout();
gridLayout.marginHeight = 0;
gridLayout.marginBottom = 0;
gridLayout.marginLeft = 0;
gridLayout.marginRight = 0;
gridLayout.marginTop = 0;
gridLayout.marginWidth = 0;
compositeButton.setLayout(gridLayout);
compositeButton.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
schemaButtonRefresh = new Button(compositeButton, SWT.PUSH);
GridDataFactory.swtDefaults().applyTo(schemaButtonRefresh);
schemaButtonRefresh.setImage(ImageProvider.getImage(EImage.REFRESH_ICON));
schemaButtonRefresh.setToolTipText(Messages.getString("XmlFileOutputStep2Form.refresh"));
}
private void fillContextMenu(IMenuManager manager) {
if (!xmlViewer.getSelection().isEmpty()) {
manager.add(createAction);
@@ -476,7 +519,7 @@ public class XmlFileOutputStep2Form extends AbstractXmlFileStepForm {
EList schemaMetadataColumn = ConnectionHelper.getTables(getConnection()).toArray(new MetadataTable[0])[0]
.getColumns();
schemaMetadataColumn.clear();
initMetadataTable(nodeList, schemaMetadataColumn);
initMetadataTable(nodeList, schemaMetadataColumn, false, 0);
}
updateConnectionProperties(nodeList.get(0));
initXmlTreeData();
@@ -489,6 +532,26 @@ public class XmlFileOutputStep2Form extends AbstractXmlFileStepForm {
}
}
});
limitNumberText.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent e) {
checkInteger(limitNumberText, e);
}
});
}
private void checkInteger(Text textCtrl, VerifyEvent e) {
if (e.character != 0 && e.keyCode != SWT.BS && e.keyCode != SWT.DEL && !Character.isDigit(e.character)) {
e.doit = false;
} else {
if (e.character == '0' && e.start == 0) {
e.doit = false;
} else {
e.doit = true;
}
}
}
@Override
@@ -517,9 +580,44 @@ public class XmlFileOutputStep2Form extends AbstractXmlFileStepForm {
updateXmlTreeViewer(inputList);
redrawLinkers();
checkFieldsValue();
limitNumberText.setText(String.valueOf(schemaViewer.getTable().getItems().length));
}
}
});
schemaButtonRefresh.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
String limitNumber = limitNumberText.getText();
Integer maxNumber = Integer.valueOf(limitNumber);
int schemaViewerCount = schemaViewer.getTable().getItems().length;
if (schemaViewerCount != maxNumber) {
refreshSchema(maxNumber);
}
}
});
}
private void refreshSchema(int inputNumber) {
int maxColumnsNumber = inputNumber;
EList schemaMetadataColumn = ConnectionHelper.getTables(getConnection()).toArray(new MetadataTable[0])[0]
.getColumns();
initMetadataTable(treeData, schemaMetadataColumn, true, maxColumnsNumber);
List<MetadataColumn> columnList = new ArrayList<MetadataColumn>();
for (int i = 0; i < maxColumnsNumber && i < schemaMetadataColumn.size(); i++) {
columnList.add((MetadataColumn) schemaMetadataColumn.get(i));
}
schemaMetadataColumn.clear();
schemaMetadataColumn.addAll(columnList);
updateXmlTreeViewer(columnList);
xmlViewer.setInput(treeData);
xmlViewer.expandToLevel(3);
schemaViewer.setInput(columnList);
schemaViewer.refresh();
linker.createLinks();
// redrawLinkers();
checkFieldsValue();
}
private void updateXmlTreeViewer(List<MetadataColumn> metaColumns) {
@@ -535,10 +633,14 @@ public class XmlFileOutputStep2Form extends AbstractXmlFileStepForm {
IExtremityLink<Tree, Object> ex2 = linkDescriptor.getExtremity2();
MetadataColumn metaColumn = (MetadataColumn) ex1.getDataItem();
FOXTreeNode node = (FOXTreeNode) ex2.getDataItem();
if (!cloumnNames.contains(metaColumn.getName())) {
node.setColumn(null);
if (i < metaColumns.size()) {
if (!cloumnNames.contains(metaColumn.getName())) {
node.setColumn(null);
} else {
node.setColumn(ConvertionHelper.convertToIMetaDataColumn(metaColumn));
}
} else {
node.setColumn(ConvertionHelper.convertToIMetaDataColumn(metaColumn));
node.setColumn(null);
}
node.setDataType(metaColumn.getTalendType());
}
@@ -548,15 +650,6 @@ public class XmlFileOutputStep2Form extends AbstractXmlFileStepForm {
@Override
protected boolean checkFieldsValue() {
int schemaViewerCount = schemaViewer.getTable().getItems().length;
if (schemaViewerCount == CoreUIPlugin.getDefault().getPreferenceStore()
.getInt(ITalendCorePrefConstants.MAXIMUM_AMOUNT_OF_COLUMNS_FOR_XML) + 1) {
statusLabelWarnText.setVisible(true);
statusLabelWarn.setVisible(true);
} else {
statusLabelWarnText.setVisible(false);
statusLabelWarn.setVisible(false);
}
int num = 0, rootNum = 0;
StringBuffer msgError = new StringBuffer();
List<FOXTreeNode> onLoopNodes = new ArrayList<FOXTreeNode>();
@@ -1001,10 +1094,11 @@ public class XmlFileOutputStep2Form extends AbstractXmlFileStepForm {
}
xmlViewer.setInput(treeData);
xmlViewer.expandToLevel(3);
redrawLinkers();
linker.createLinks();
// if (!creation) {
checkFieldsValue();
// }
limitNumberText.setText(String.valueOf(schemaViewer.getTable().getItems().length));
}
}