// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.dataprofiler.core.ui.wizard; import java.util.List; import org.apache.log4j.Logger; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.talend.commons.exception.PersistenceException; import org.talend.commons.runtime.model.emf.EmfHelper; import org.talend.commons.utils.WorkspaceUtils; import org.talend.core.model.properties.Property; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.repository.model.ProxyRepositoryFactory; import org.talend.cwm.constants.DevelopmentStatus; import org.talend.cwm.helper.TaggedValueHelper; import org.talend.cwm.management.api.FolderProvider; import org.talend.dataprofiler.core.PluginConstant; import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl; import org.talend.dataprofiler.core.ui.dialog.FolderSelectionDialog; import org.talend.dataprofiler.core.ui.filters.DQFolderFilter; import org.talend.dataquality.helpers.MetadataHelper; import org.talend.model.bridge.ReponsitoryContextBridge; import orgomg.cwm.objectmodel.core.CorePackage; /** * @author zqin */ public abstract class MetadataWizardPage extends AbstractWizardPage { private static final int TEXT_FIELD_DEFAULT_MAX_CHAR_LIMIT = 200; public String getNameTextValue() { return nameText != null ? nameText.getText() : ""; //$NON-NLS-1$ } // protected members protected Text nameText; protected Text purposeText; protected Text descriptionText; protected Text authorText; protected Text versionText; protected Button button; protected CCombo statusText; protected Text pathText; protected List<IRepositoryViewObject> existRepObjects; protected static Logger log = Logger.getLogger(MetadataWizardPage.class); protected boolean isTextValueValid = true; // private members // private Button versionMajorBtn; // private Button versionMinorBtn; public MetadataWizardPage() { this.setPageComplete(false); } /* * (non-Javadoc) * * @see org.talend.dataprofiler.core.ui.wizard.PropertiesWizardPage#createControl * (org.eclipse.swt.widgets.Composite) */ public void createControl(Composite parent) { if (getParameter().getFolderProvider() == null || getParameter().getFolderProvider().isNull()) { FolderProvider defaultFolder = new FolderProvider(); defaultFolder.setFolderResource(getStoredFolder()); getParameter().setFolderProvider(defaultFolder); } Composite container = new Composite(parent, SWT.NONE); GridLayout gdLayout = new GridLayout(2, false); container.setLayout(gdLayout); GridData data; // Name Label nameLab = new Label(container, SWT.NONE); nameLab.setText(DefaultMessagesImpl.getString("MetadataWizardPage.name")); //$NON-NLS-1$ nameText = new Text(container, SWT.BORDER); nameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); // set the max number of characters to be entered in the text field // ADDED sgandon 16/03/2010 bug 11760 nameText.setTextLimit(EmfHelper.getStringMaxSize(CorePackage.Literals.MODEL_ELEMENT__NAME, TEXT_FIELD_DEFAULT_MAX_CHAR_LIMIT)); // Purpose Label purposeLab = new Label(container, SWT.NONE); purposeLab.setText(DefaultMessagesImpl.getString("MetadataWizardPage.purpose")); //$NON-NLS-1$ purposeText = new Text(container, SWT.BORDER); purposeText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); // set the max number of characters to be entered in the text field // ADDED sgandon 16/03/2010 bug 11760 purposeText .setTextLimit(TaggedValueHelper.getStringMaxSize(TaggedValueHelper.PURPOSE, TEXT_FIELD_DEFAULT_MAX_CHAR_LIMIT)); // Description Label descriptionLab = new Label(container, SWT.NONE); descriptionLab.setText(DefaultMessagesImpl.getString("MetadataWizardPage.description")); //$NON-NLS-1$ descriptionLab.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); descriptionText = new Text(container, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL); data = new GridData(GridData.FILL_HORIZONTAL); data.heightHint = 60; descriptionText.setLayoutData(data); // set the max number of characters to be entered in the text field descriptionText.setTextLimit(TaggedValueHelper.getStringMaxSize(TaggedValueHelper.DESCRIPTION, TEXT_FIELD_DEFAULT_MAX_CHAR_LIMIT)); // Author Label authorLab = new Label(container, SWT.NONE); authorLab.setText(DefaultMessagesImpl.getString("MetadataWizardPage.author")); //$NON-NLS-1$ authorText = new Text(container, SWT.BORDER); authorText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); authorText.setTextLimit(TaggedValueHelper.getStringMaxSize(TaggedValueHelper.AUTHOR, TEXT_FIELD_DEFAULT_MAX_CHAR_LIMIT)); String author = ReponsitoryContextBridge.getAuthor(); authorText.setText(author); getParameter().setAuthor(author); // MOD 2016-10-19 xqliu TDQ-12692 change the author field to read-only always // both TDQ and TOS for DQ, the author field should be read-only authorText.setEnabled(false); // Version // Label versionLab = new Label(container, SWT.NONE); // versionLab.setText("Version"); // // Composite versionContainer = new Composite(container, SWT.NONE); // versionContainer.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); // GridLayout versionLayout = new GridLayout(3, false); // versionLayout.marginHeight = 0; // versionLayout.marginWidth = 0; // versionLayout.horizontalSpacing = 0; // versionContainer.setLayout(versionLayout); // // versionText = new Text(versionContainer, SWT.BORDER); // versionText.setEnabled(false); // versionText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); // versionText.setText(getParameter().getVersion()); // // versionMajorBtn = new Button(versionContainer, SWT.PUSH); // versionMajorBtn.setText("M"); // // versionMinorBtn = new Button(versionContainer, SWT.PUSH); // versionMinorBtn.setText("m"); //$NON-NLS-1$ // Status Label statusLab = new Label(container, SWT.NONE); statusLab.setText("Status"); //$NON-NLS-1$ statusText = new CCombo(container, SWT.BORDER); // statusText.setText(DevelopmentStatus.DRAFT.getLiteral()); statusText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); statusText.setEditable(false); // MOD mzhao feature 7479 2009-10-12 List<org.talend.core.model.properties.Status> statusList = MetadataHelper.getTechnicalStatus(); if (statusList != null && statusList.size() > 0) { String[] tempString = new String[statusList.size()]; statusText.setItems(MetadataHelper.toArray(statusList).toArray(tempString)); } else { for (DevelopmentStatus status : DevelopmentStatus.values()) { statusText.add(status.getLiteral()); } } statusText.select(0); getParameter().setStatus(statusText.getText()); // Path: Label pathLab = new Label(container, SWT.NONE); pathLab.setText("Path"); //$NON-NLS-1$ Composite pathContainer = new Composite(container, SWT.NONE); pathContainer.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); GridLayout pathLayout = new GridLayout(2, false); pathLayout.marginHeight = 0; pathLayout.marginWidth = 0; pathLayout.horizontalSpacing = 0; pathContainer.setLayout(pathLayout); pathText = new Text(pathContainer, SWT.BORDER); pathText.setEnabled(false); pathText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); button = new Button(pathContainer, SWT.PUSH); button.setText(DefaultMessagesImpl.getString("MetadataWizardPage.select")); //$NON-NLS-1$ createExtendedControl(container); addListeners(); setControl(container); } /** * DOC bZhou Comment method "openFolderSelectionDialog". * * @param inputFolder */ protected void openFolderSelectionDialog(IFolder inputFolder) { FolderSelectionDialog dialog = new FolderSelectionDialog(getShell()); dialog.setTitle(DefaultMessagesImpl.getString("MetadataWizardPage.selectFolder")); //$NON-NLS-1$ dialog.setMessage(DefaultMessagesImpl.getString("MetadataWizardPage.selectFolderItem")); //$NON-NLS-1$ dialog.setInput(inputFolder); dialog.addFilter(new DQFolderFilter()); if (dialog.open() == Window.OK) { if (dialog.getResult() == null || dialog.getResult().length == 0) { return; } Object elements = dialog.getResult()[0]; IResource elem = (IResource) elements; if (elem instanceof IFolder) { pathText.setText(elem.getFullPath().toString()); getParameter().getFolderProvider().setFolderResource((IFolder) elem); } } } protected void addListeners() { nameText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { getParameter().setName(nameText.getText()); fireEvent(); } }); purposeText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { getParameter().setPurpose(purposeText.getText()); } }); descriptionText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { getParameter().setDescription(descriptionText.getText()); } }); authorText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { getParameter().setAuthor(authorText.getText()); } }); // versionMajorBtn.addSelectionListener(new SelectionAdapter() { // // @Override // public void widgetSelected(SelectionEvent e) { // String version = getParameter().getVersion(); // version = VersionUtils.upMajor(version); // versionText.setText(version); // getParameter().setVersion(version); // } // }); // // versionMinorBtn.addSelectionListener(new SelectionAdapter() { // // @Override // public void widgetSelected(SelectionEvent e) { // String version = getParameter().getVersion(); // version = VersionUtils.upMinor(version); // versionText.setText(version); // getParameter().setVersion(version); // } // }); statusText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { String selected = ((CCombo) e.getSource()).getText(); getParameter().setStatus(selected); } }); } @Override public boolean checkFieldsValue() { if (PluginConstant.EMPTY_STRING.equals(nameText.getText().trim())) { updateStatus(IStatus.ERROR, MSG_EMPTY); isTextValueValid = false; return false; } // reopen this commented code for TDQ-4593. if (!checkDuplicateName()) { isTextValueValid = false; return false; } updateStatus(IStatus.OK, MSG_OK); isTextValueValid = super.checkFieldsValue(); return isTextValueValid; } protected abstract void createExtendedControl(Composite container); protected abstract IFolder getStoredFolder(); protected void fireEvent() { setPageComplete(checkFieldsValue()); } /** * DOC yyi Comment method "checkDuplicateModelName". * * @return */ public boolean checkDuplicateName() { String elementName = getParameter().getName(); if (elementName == null) { updateStatus(IStatus.ERROR, MSG_EMPTY); return false; } // TDQ-5078,normalize some special chars with "_". elementName = WorkspaceUtils.normalize(elementName); // elementName=elementName.replaceAll("/", ""); // MOD qionlgi 2012-2-13 TDQ-4593,check if exsit name in old items list when input a name. if (existRepObjects == null || existRepObjects.isEmpty()) { ERepositoryObjectType type = null; switch (getParameter().getParamType()) { case ANALYSIS: type = ERepositoryObjectType.TDQ_ANALYSIS_ELEMENT; break; case REPORT: type = ERepositoryObjectType.TDQ_REPORT_ELEMENT; break; case PATTERN: type = ERepositoryObjectType.TDQ_PATTERN_ELEMENT; break; case DQRULE: type = ERepositoryObjectType.TDQ_RULES; break; case UDINDICATOR: type = ERepositoryObjectType.TDQ_USERDEFINE_INDICATORS; break; default: break; } try { if (type != null) { existRepObjects = ProxyRepositoryFactory.getInstance().getAll(type, true, false); } } catch (PersistenceException e) { log.error(e); } } if (existRepObjects != null) { for (IRepositoryViewObject object : existRepObjects) { Property prop = object.getProperty(); if (prop == null) { continue; } if (elementName.equalsIgnoreCase(prop.getLabel()) || elementName.equalsIgnoreCase(prop.getDisplayName())) { updateStatus(IStatus.ERROR, DefaultMessagesImpl.getString("UIMessages.ItemExistsErrorWithParameter", prop.getLabel())); return false; } } } return true; } }