/******************************************************************************* * 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.graphical.wizard.freemarker; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.Viewer; 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.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; /** * @author Dart * */ public class FreemarkerCSVCreationWizardPage extends WizardPage { private List<FieldText> fieldsList = new ArrayList<FieldText>(); private Text seperatorText; private Text quoteText; private Text fieldsText; private Button includeFieldNames; public FreemarkerCSVCreationWizardPage(String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); } public FreemarkerCSVCreationWizardPage(String pageName) { super(pageName); this.setTitle(Messages.FreemarkerCSVCreationWizardPage_WizardTitle); this.setDescription(Messages.FreemarkerCSVCreationWizardPage_WizardDes); } public Text getFieldsText() { return fieldsText; } public void setFieldsText(Text fieldsText) { this.fieldsText = fieldsText; } /** * @return the fieldsList */ public List<FieldText> getFieldsList() { return fieldsList; } /** * @return the seperatorText */ public Text getSeperatorText() { return seperatorText; } /** * @return the quoteText */ public Text getQuoteText() { return quoteText; } public Button getIncludeFieldNames() { return includeFieldNames; } /* * (non-Javadoc) * * @see * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets * .Composite) */ public void createControl(Composite parent) { fieldsList.clear(); Composite mainComposite = new Composite(parent, SWT.NONE); GridData gd = new GridData(GridData.FILL_BOTH); mainComposite.setLayoutData(gd); GridLayout layout = new GridLayout(); layout.numColumns = 2; mainComposite.setLayout(layout); Label filedsLabel = new Label(mainComposite, SWT.NONE); filedsLabel.setText(Messages.FreemarkerCSVCreationWizardPage_FieldsGroupText); fieldsText = new Text(mainComposite, SWT.BORDER); gd = new GridData(GridData.FILL_HORIZONTAL); fieldsText.setLayoutData(gd); Label seperatorLabel = new Label(mainComposite, SWT.NONE); seperatorLabel.setText(Messages.FreemarkerCSVCreationWizardPage_SeperatorCharLabel); seperatorText = new Text(mainComposite, SWT.BORDER); gd = new GridData(GridData.BEGINNING); seperatorText.setLayoutData(gd); seperatorText.setTextLimit(1); Label quoteLabel = new Label(mainComposite, SWT.NONE); quoteLabel.setText(Messages.FreemarkerCSVCreationWizardPage_QuoteCharLabel); quoteText = new Text(mainComposite, SWT.BORDER); gd = new GridData(GridData.BEGINNING); quoteText.setLayoutData(gd); quoteText.setTextLimit(1); Label includeFieldNamesLabel = new Label(mainComposite, SWT.NONE); includeFieldNamesLabel.setText(Messages.FreemarkerCSVCreationWizardPage_IncludeFieldNamesLabel); includeFieldNames = new Button(mainComposite, SWT.CHECK | SWT.CENTER | SWT.BORDER); gd = new GridData(GridData.BEGINNING); includeFieldNames.setLayoutData(gd); // gd = new GridData(GridData.FILL_HORIZONTAL); // gd.heightHint = 200; // gd.horizontalSpan = 2; // Group fieldsComposite = new Group(mainComposite, SWT.NONE); // fieldsComposite.setText(Messages.FreemarkerCSVCreationWizardPage_FieldsGroupText); // fieldsComposite.setLayoutData(gd); // GridLayout gl = new GridLayout(); // gl.numColumns = 2; // fieldsComposite.setLayout(gl); // // gd = new GridData(GridData.FILL_BOTH); // // String fields = null; // // final TableViewer fieldsViewer = new TableViewer(fieldsComposite, // SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION); // fieldsViewer.getControl().setLayoutData(gd); // fieldsViewer.getTable().setLinesVisible(true); // fieldsViewer.setContentProvider(new FieldsContentProvider()); // fieldsViewer.setLabelProvider(new FieldsLabelProvider()); // // CellEditor fieldCellEditor = new // TextCellEditor(fieldsViewer.getTable(), SWT.BORDER); // // fieldsViewer.getTable().setLinesVisible(true); // // fieldsViewer.setCellEditors(new CellEditor[] { fieldCellEditor }); // // fieldsViewer.setColumnProperties(new String[] { "field" }); //$NON-NLS-1$ // // fieldsViewer.setCellModifier(new ICellModifier() { // // public void modify(Object element, String property, Object value) { // Object el = null; // if (element instanceof Item) { // el = ((Item) element).getData(); // } // if (el == null) // return; // if (el instanceof FieldText && value instanceof String) { // if (property.equals("field")) { //$NON-NLS-1$ // if (value.toString().equals(((FieldText) el).getText())) { // return; // } // ((FieldText) el).setText(value.toString()); // fieldsViewer.refresh(el); // updatePage(); // } // } // } // // public Object getValue(Object element, String property) { // if (element instanceof FieldText) { // if (property.equals("field")) { //$NON-NLS-1$ // return ((FieldText) element).getText(); // } // } // // return null; // } // // public boolean canModify(Object element, String property) { // if (element instanceof FieldText) { // if (property.equals("field")) { //$NON-NLS-1$ // return true; // } // } // return false; // } // }); // if (fields == null) { // fields = ""; //$NON-NLS-1$ // } // fillFieldsList(fields); // fieldsViewer.setInput(fieldsList); // // Composite buttonComposite = new Composite(fieldsComposite, SWT.NONE); // gd = new GridData(GridData.FILL_VERTICAL); // gd.widthHint = 100; // buttonComposite.setLayoutData(gd); // // GridLayout bgl = new GridLayout(); // buttonComposite.setLayout(bgl); // // gd = new GridData(GridData.FILL_HORIZONTAL); // // final Button addButton = new Button(buttonComposite, SWT.NONE); // addButton.setLayoutData(gd); // addButton.setText(Messages.FreemarkerCSVCreationWizardPage_AddFieldButtonText); // // final Button removeButton = new Button(buttonComposite, SWT.NONE); // removeButton.setLayoutData(gd); // removeButton.setText(Messages.FreemarkerCSVCreationWizardPage_RemoveFieldButtonLabel); // // addButton.addSelectionListener(new SelectionListener() { // // public void widgetSelected(SelectionEvent e) { // addButton.setEnabled(false); // try { // FieldText field = new FieldText("field"); //$NON-NLS-1$ // fieldsList.add(field); // fieldsViewer.refresh(); // updatePage(); // } catch (Throwable t) { // // } finally { // addButton.setEnabled(true); // } // } // // public void widgetDefaultSelected(SelectionEvent e) { // // TODO Auto-generated method stub // // } // }); // // removeButton.addSelectionListener(new SelectionListener() { // // public void widgetSelected(SelectionEvent e) { // IStructuredSelection s = (IStructuredSelection) // fieldsViewer.getSelection(); // fieldsList.removeAll(s.toList()); // fieldsViewer.refresh(); // updatePage(); // } // // public void widgetDefaultSelected(SelectionEvent e) { // // } // }); this.setControl(mainComposite); seperatorText.setText(","); //$NON-NLS-1$ quoteText.setText("\""); //$NON-NLS-1$ seperatorText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { updatePage(); } }); quoteText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { updatePage(); } }); fieldsText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { updatePage(); } }); this.setPageComplete(false); } private void fillFieldsList(String fieldsString) { if (fieldsString == null || fieldsString.length() == 0) return; String input = fieldsString.toString(); input = input.trim(); if (input.indexOf(",") != -1) { //$NON-NLS-1$ String[] fields = input.split(","); //$NON-NLS-1$ if (fields != null && fields.length > 0) { for (int i = 0; i < fields.length; i++) { String field = fields[i]; if (field != null) { field = field.trim(); fieldsList.add(new FieldText(field)); } } } } else { fieldsList.add(new FieldText(input)); } } protected void updatePage() { String error = null; String seperator = seperatorText.getText(); String quote = quoteText.getText(); String fields = fieldsText.getText(); if (seperator == null || seperator.length() == 0) { error = Messages.FreemarkerCSVCreationWizardPage_SeperatorEmptyErrorMessage; } if (quote == null || quote.length() == 0) { error = Messages.FreemarkerCSVCreationWizardPage_QuoteEmptyErrorMessage; } if (seperator != null && seperator.length() > 1) { error = "Seperator must be only one character"; //$NON-NLS-1$ } if (quote != null && quote.length() > 1) { error = "Quote must be only one character"; //$NON-NLS-1$ } if (fields == null) { error = Messages.FreemarkerCSVCreationWizardPage_Error_Fields_Empty; } else { fields = fields.trim(); if ("".equals(fields)) { //$NON-NLS-1$ error = Messages.FreemarkerCSVCreationWizardPage_Error_Fields_Empty; } else { char[] chars = fields.toCharArray(); for (int i = 0; i < chars.length; i++) { char c = chars[i]; if (c == ',') { continue; } if (Character.isLetterOrDigit(c)) { } else { error = Messages.FreemarkerCSVCreationWizardPage_Error_Incorrect + c + Messages.FreemarkerCSVCreationWizardPage_Error_Incorrect2; break; } } String[] fieldsArray = fields.split(","); //$NON-NLS-1$ if(fieldsArray.length == 0){ error = Messages.FreemarkerCSVCreationWizardPage_Error_Fields_Empty; } for (int i = 0; i < fieldsArray.length; i++) { String f = fieldsArray[i]; if(f == null || "".equals(f.trim())){ //$NON-NLS-1$ error = Messages.FreemarkerCSVCreationWizardPage_Error_Fields_Empty; break; } } } } // if (fieldsList.isEmpty()) { // error = // Messages.FreemarkerCSVCreationWizardPage_FieldEmptyErrorMessage; // } this.setErrorMessage(error); this.setPageComplete(error == null); } private class FieldsLabelProvider extends LabelProvider { @Override public String getText(Object element) { if (element instanceof FieldText) { return ((FieldText) element).getText(); } return super.getText(element); } } private class FieldsContentProvider implements IStructuredContentProvider { public void dispose() { // TODO Auto-generated method stub } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } public Object[] getElements(Object inputElement) { if (inputElement instanceof List<?>) { return ((List<?>) inputElement).toArray(); } return new Object[] {}; } } class FieldText { private String text = null; public FieldText(String t) { setText(t); } public String getText() { return text; } public void setText(String text) { this.text = text; } } }