/******************************************************************************* * Copyright (c) 2008 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.smooks.edimap.wizard; import org.eclipse.core.resources.IFile; import org.eclipse.emf.common.ui.dialogs.WorkspaceResourceDialog; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.jboss.tools.smooks.configuration.editors.utils.SmooksUIUtils; /** * @author Dart (dpeng@redhat.com) * */ public class EDIMappingConfigFileConfigPage extends WizardPage { private String name; private String version; private String segments; private String componentDelimiter; private String subComponentDelimiter; private String fieldDelimiter; private String segmentDelimiter; private String ediFilePath; private String[] fileExtensionNames; private ISelection selection; public EDIMappingConfigFileConfigPage(String pageName, String title, ImageDescriptor titleImage,ISelection selection) { super(pageName, title, titleImage); this.selection = selection; this.setTitle(Messages.EDIMappingConfigFileConfigPage_Page_Title); this.setDescription(Messages.EDIMappingConfigFileConfigPage_Page_Description); } public EDIMappingConfigFileConfigPage(String pageName,ISelection selection) { super(pageName); this.selection = selection; this.setTitle(Messages.EDIMappingConfigFileConfigPage_Page_Title); this.setDescription(Messages.EDIMappingConfigFileConfigPage_Page_Description); } /* * (non-Javadoc) * * @see * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets * .Composite) */ public void createControl(Composite parent) { Composite mainComposite = new Composite(parent, SWT.NONE); GridData gd = new GridData(GridData.FILL_BOTH); mainComposite.setLayoutData(gd); GridLayout mgl = new GridLayout(); mainComposite.setLayout(mgl); mgl.numColumns = 2; mgl.verticalSpacing = 8; mgl.horizontalSpacing = 5; Label nameLabel = new Label(mainComposite, SWT.NONE); nameLabel.setText(Messages.EDIMappingConfigFileConfigPage_Label_Name); final Text nameText = new Text(mainComposite, SWT.BORDER); gd = new GridData(GridData.FILL_HORIZONTAL); nameText.setLayoutData(gd); nameText.addModifyListener(new ModifyListener(){ /* (non-Javadoc) * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent) */ public void modifyText(ModifyEvent e) { setName(nameText.getText()); } }); Label versionLabel = new Label(mainComposite, SWT.NONE); versionLabel.setText(Messages.EDIMappingConfigFileConfigPage_Label_Version); final Text versionText = new Text(mainComposite, SWT.BORDER); gd = new GridData(GridData.FILL_HORIZONTAL); versionText.setLayoutData(gd); versionText.addModifyListener(new ModifyListener(){ /* (non-Javadoc) * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent) */ public void modifyText(ModifyEvent e) { setVersion(versionText.getText()); } }); Label segmentsNameLabel = new Label(mainComposite, SWT.NONE); segmentsNameLabel.setText(Messages.EDIMappingConfigFileConfigPage_Label_Root_Tag_Name); final Text segmentsNameText = new Text(mainComposite, SWT.BORDER); gd = new GridData(GridData.FILL_HORIZONTAL); segmentsNameText.setLayoutData(gd); segmentsNameText.addModifyListener(new ModifyListener(){ /* (non-Javadoc) * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent) */ public void modifyText(ModifyEvent e) { setSegments(segmentsNameText.getText()); updatePageStatus(); } }); Composite separator = new Composite(mainComposite,SWT.NONE); gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; gd.heightHint = 10; separator.setLayoutData(gd); Group group = new Group(mainComposite,SWT.NONE); group.setText(Messages.EDIMappingConfigFileConfigPage_Group_Delimiter); GridLayout dgl = new GridLayout(); dgl.numColumns = 2; dgl.verticalSpacing = 5; dgl.horizontalSpacing = 5; group.setLayout(dgl); gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; group.setLayoutData(gd); Label segmentLabel = new Label(group, SWT.NONE); segmentLabel.setText(Messages.EDIMappingConfigFileConfigPage_Label_Segment); final Text segmentText = new Text(group, SWT.BORDER); gd = new GridData(GridData.FILL_HORIZONTAL); segmentText.setLayoutData(gd); segmentText.addModifyListener(new ModifyListener(){ /* (non-Javadoc) * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent) */ public void modifyText(ModifyEvent e) { setSegmentDelimiter(segmentText.getText()); } }); Label fieldLabel = new Label(group, SWT.NONE); fieldLabel.setText(Messages.EDIMappingConfigFileConfigPage_Label_Field); final Text fieldText = new Text(group, SWT.BORDER); gd = new GridData(GridData.FILL_HORIZONTAL); fieldText.setLayoutData(gd); fieldText.addModifyListener(new ModifyListener(){ /* (non-Javadoc) * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent) */ public void modifyText(ModifyEvent e) { setFieldDelimiter(fieldText.getText()); } }); Label componentLabel = new Label(group, SWT.NONE); componentLabel.setText(Messages.EDIMappingConfigFileConfigPage_Label_Component); final Text compoenentText = new Text(group, SWT.BORDER); gd = new GridData(GridData.FILL_HORIZONTAL); compoenentText.setLayoutData(gd); compoenentText.addModifyListener(new ModifyListener(){ /* (non-Javadoc) * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent) */ public void modifyText(ModifyEvent e) { setComponentDelimiter(compoenentText.getText()); } }); Label subcomponentLabel = new Label(group, SWT.NONE); subcomponentLabel.setText(Messages.EDIMappingConfigFileConfigPage_Label_Subcomponent); final Text subcompoenentText = new Text(group, SWT.BORDER); gd = new GridData(GridData.FILL_HORIZONTAL); subcompoenentText.setLayoutData(gd); subcompoenentText.addModifyListener(new ModifyListener(){ /* (non-Javadoc) * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent) */ public void modifyText(ModifyEvent e) { setSubComponentDelimiter(subcompoenentText.getText()); } }); Composite separator1= new Composite(mainComposite,SWT.NONE); gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; gd.heightHint = 10; separator1.setLayoutData(gd); Label nfileLanel = new Label(mainComposite, SWT.NONE); nfileLanel.setText("EDI Input Data File : "); //$NON-NLS-1$ final Text fileText = new Text(mainComposite,SWT.BORDER); gd = new GridData(GridData.FILL_HORIZONTAL); fileText.setLayoutData(gd); fileText.addModifyListener(new ModifyListener(){ /* (non-Javadoc) * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent) */ public void modifyText(ModifyEvent e) { setEdiFilePath(fileText.getText()); } }); Composite browseButtonComposite = new Composite(mainComposite, SWT.NONE); gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; browseButtonComposite.setLayoutData(gd); GridLayout bg = new GridLayout(); bg.numColumns = 2; bg.marginHeight = 0; bg.marginWidth = 0; bg.makeColumnsEqualWidth = false; browseButtonComposite.setLayout(bg); final Button fileSystemBrowseButton = new Button(browseButtonComposite, SWT.NONE); fileSystemBrowseButton.setText("Browse File System"); //$NON-NLS-1$ final Button workspaceBrowseButton = new Button(browseButtonComposite, SWT.NONE); workspaceBrowseButton.setText("Browse WorkSpace"); //$NON-NLS-1$ gd = new GridData(); gd.horizontalAlignment = GridData.END; workspaceBrowseButton.setLayoutData(gd); gd = new GridData(); gd.grabExcessHorizontalSpace = true; gd.horizontalAlignment = GridData.END; fileSystemBrowseButton.setLayoutData(gd); SelectionAdapter browseButtonSelectionAdapter = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Text relationT = null; if (e.getSource() == fileSystemBrowseButton) { relationT = fileText; } openFileSelection(relationT); } }; SelectionAdapter wbrowseButtonSelectionAdapter = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Text relationT = null; if (e.getSource() == workspaceBrowseButton) { relationT = fileText; } openWorkSpaceSelection(relationT); } }; fileSystemBrowseButton.addSelectionListener(browseButtonSelectionAdapter); workspaceBrowseButton.addSelectionListener(wbrowseButtonSelectionAdapter); setControl(mainComposite); updatePageStatus(); } protected void openFileSelection(Text relationText) { FileDialog dialog = new FileDialog(this.getShell()); if (fileExtensionNames != null) { String s = ""; //$NON-NLS-1$ for (int i = 0; i < fileExtensionNames.length; i++) { String exname = fileExtensionNames[i]; s += "*." + exname + ";"; //$NON-NLS-1$ //$NON-NLS-2$ } if (s.length() != 0) { s = s.substring(0, s.length() - 1); dialog.setFilterExtensions(new String[]{s,"*.*"}); //$NON-NLS-1$ } } String path = dialog.open(); if (path != null) { path = processFileSystemFilePath(path); relationText.setText(path); } } protected String processWorkSpaceFilePath(IFile file) { // if (filePathProcessor != null) { // String s = filePathProcessor.processWorkBenchPath(file); // if (s != null) { // return s; // } // } String s = file.getFullPath().toPortableString(); s = SmooksUIUtils.WORKSPACE_PRIX + s; return s; } protected void openWorkSpaceSelection(Text relationT) { Object[] obj = new Object[]{}; if(selection != null && selection instanceof IStructuredSelection){ obj = ((IStructuredSelection)selection).toArray(); } IFile[] files = WorkspaceResourceDialog.openFileSelection(getShell(), "Select Files", "", false, obj, null); //$NON-NLS-1$ //$NON-NLS-2$ // dialog.setInitialSelections(selectedResources); if (files.length > 0) { IFile file = files[0]; String s = processWorkSpaceFilePath(file); relationT.setText(s); } } protected String processFileSystemFilePath(String path) { // if (filePathProcessor != null) { // String s = filePathProcessor.processFileSystemPath(path); // if (s != null) { // return s; // } // } path = SmooksUIUtils.FILE_PRIX + path; return path; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the version */ public String getVersion() { return version; } /** * @param version the version to set */ public void setVersion(String version) { this.version = version; } /** * @return the segments */ public String getSegments() { return segments; } /** * @param segments the segments to set */ public void setSegments(String segments) { this.segments = segments; } /** * @return the componentDelimiter */ public String getComponentDelimiter() { return componentDelimiter; } /** * @param componentDelimiter the componentDelimiter to set */ public void setComponentDelimiter(String componentDelimiter) { this.componentDelimiter = componentDelimiter; } /** * @return the subComponentDelimiter */ public String getSubComponentDelimiter() { return subComponentDelimiter; } /** * @param subComponentDelimiter the subComponentDelimiter to set */ public void setSubComponentDelimiter(String subComponentDelimiter) { this.subComponentDelimiter = subComponentDelimiter; } /** * @return the fieldDelimiter */ public String getFieldDelimiter() { return fieldDelimiter; } /** * @param fieldDelimiter the fieldDelimiter to set */ public void setFieldDelimiter(String fieldDelimiter) { this.fieldDelimiter = fieldDelimiter; } /** * @return the segmentDelimiter */ public String getSegmentDelimiter() { return segmentDelimiter; } /** * @param segmentDelimiter the segmentDelimiter to set */ public void setSegmentDelimiter(String segmentDelimiter) { this.segmentDelimiter = segmentDelimiter; } /** * @return the ediFilePath */ public String getEdiFilePath() { return ediFilePath; } /** * @param ediFilePath the ediFilePath to set */ public void setEdiFilePath(String ediFilePath) { this.ediFilePath = ediFilePath; } private void updatePageStatus(){ String error = null; if(segments == null || segments.length() == 0){ error = Messages.EDIMappingConfigFileConfigPage_Error_Root_Name_Cannot_Be_Null; } this.setErrorMessage(error); this.setPageComplete(error == null); } }