/******************************************************************************* * 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.configuration.editors; import java.util.Iterator; import java.util.List; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.ICheckStateProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FillLayout; 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.TableColumn; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.editor.FormEditor; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.forms.widgets.Section; import org.jboss.tools.smooks.configuration.editors.input.InputParameter; import org.jboss.tools.smooks.configuration.editors.input.InputType; import org.jboss.tools.smooks.configuration.editors.utils.SmooksUIUtils; import org.jboss.tools.smooks.editor.ISmooksModelProvider; import org.jboss.tools.smooks.model.smooks.AbstractReader; import org.jboss.tools.smooks.model.smooks.SmooksResourceListType; /** * @author Dart * */ public class SmooksConfigurationReaderPage extends SmooksConfigurationFormPage { private CheckboxTableViewer inputDataViewer; boolean lockCheck = false; public SmooksConfigurationReaderPage(FormEditor editor, String id, String title) { super(editor, id, title); } public SmooksConfigurationReaderPage(String id, String title) { super(id, title); } @Override protected ViewerFilter[] createViewerFilters() { return new ViewerFilter[] { new OnlyReaderViewerFilter() }; } @Override protected SmooksMasterDetailBlock createSmooksMasterDetailsBlock() { SmooksMasterDetailBlock detailBlock = new SmooksMasterDetailBlock(getEditor(), (AdapterFactoryEditingDomain) ((SmooksMultiFormEditor) getEditor()).getEditingDomain()) { @Override protected Object getEmptyDefaultSelection(EObject smooksTreeViewerInput) { List<EObject> contents = smooksTreeViewerInput.eContents(); for (Iterator<?> iterator = contents.iterator(); iterator.hasNext();) { EObject eObject = (EObject) iterator.next(); if (smooksTreeViewerInput instanceof SmooksResourceListType && eObject instanceof AbstractReader) { return eObject; } } return super.getEmptyDefaultSelection(smooksTreeViewerInput); } }; return detailBlock; } @Override protected String getNewSmooksElementDescription() { return Messages.SmooksConfigurationReaderPage_NewReaderDes; } @Override protected String getNewSmooksElementTitle() { return Messages.SmooksConfigurationReaderPage_NewReaderTitle; } @Override protected String getMainSectionDescription() { return Messages.SmooksConfigurationReaderPage_EditReaderDes; } @Override protected String getMainSectionTitle() { return Messages.SmooksConfigurationReaderPage_ReaderSectionTitle; } @Override protected void setPageTitle(ScrolledForm form) { form.setText(Messages.SmooksConfigurationReaderPage_PageTitle); } protected void createFormContent(IManagedForm managedForm) { super.createFormContent(managedForm); // create extention UI for add/remove extention data createExtentionArea(managedForm); } protected void createExtentionArea(IManagedForm managedForm) { FormToolkit toolkit = managedForm.getToolkit(); final ScrolledForm form = managedForm.getForm(); Section section = toolkit.createSection(form.getBody(), Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED); GridData gd = new GridData(GridData.FILL_HORIZONTAL); section.setLayoutData(gd); section.setText(Messages.SmooksConfigurationReaderPage_InputSectionTitle); FillLayout flayout = new FillLayout(); section.setLayout(flayout); Composite mainComposite = toolkit.createComposite(section, SWT.NONE); GridLayout gl = new GridLayout(); gl.numColumns = 2; mainComposite.setLayout(gl); section.setClient(mainComposite); Composite tableComposite = toolkit.createComposite(mainComposite, SWT.NONE); FillLayout fillLayout = new FillLayout(); fillLayout.marginHeight = 1; fillLayout.marginWidth = 1; gd = new GridData(GridData.FILL_BOTH); tableComposite.setLayoutData(gd); tableComposite.setBackground(GraphicsConstants.BORDER_CORLOR); tableComposite.setLayout(fillLayout); inputDataViewer = CheckboxTableViewer.newCheckList(tableComposite, SWT.MULTI | SWT.FULL_SELECTION); inputDataViewer.setCheckStateProvider(new ICheckStateProvider() { public boolean isGrayed(Object element) { return false; } public boolean isChecked(Object element) { if (element instanceof InputType) { return ((InputType) element).isActived(); // List<ParamType> params = ((InputType) // element).getParam(); // for (Iterator<?> iterator = params.iterator(); // iterator.hasNext();) { // ParamType paramType = (ParamType) iterator.next(); // if // (SmooksModelUtils.PARAM_NAME_ACTIVED.equals(paramType.getName())) // { // String value = paramType.getValue(); // if (value == null) // return false; // value = value.trim(); // return "true".equalsIgnoreCase(value); // } // } } return false; } }); inputDataViewer.addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { if (lockCheck) return; boolean checked = event.getChecked(); InputType inputType = (InputType) event.getElement(); List<InputParameter> params = inputType.getParameters(); if (checked) { boolean newOne = true; inputType.setActived(checked); // for (Iterator<?> iterator = params.iterator(); // iterator.hasNext();) { // InputParameter paramType = (InputParameter) // iterator.next(); // if // (SmooksModelUtils.PARAM_NAME_ACTIVED.equals(paramType.getName())) // { // paramType.setValue(String.valueOf(checked)); // newOne = false; // break; // } // } // if (newOne) { // ParamType p = GraphFactory.eINSTANCE.createParamType(); // p.setName(SmooksModelUtils.PARAM_NAME_ACTIVED); // p.setValue(String.valueOf(checked)); // inputType.getParam().add(p); // } Object[] checkedObjects = inputDataViewer.getCheckedElements(); for (int i = 0; i < checkedObjects.length; i++) { InputType type = (InputType) checkedObjects[i]; type.setActived(!checked); // if (type == event.getElement()) // continue; // List<ParamType> params1 = type.getParam(); // for (Iterator<?> iterator = params1.iterator(); // iterator.hasNext();) { // ParamType paramType = (ParamType) iterator.next(); // if // (SmooksModelUtils.PARAM_NAME_ACTIVED.equals(paramType.getName())) // { // paramType.setValue(String.valueOf(!checked)); // break; // } // } lockCheck = true; inputDataViewer.setChecked(type, false); lockCheck = false; } } else { inputType.setActived(checked); // for (Iterator<?> iterator = params.iterator(); // iterator.hasNext();) { // ParamType paramType = (ParamType) iterator.next(); // if // (SmooksModelUtils.PARAM_NAME_ACTIVED.equals(paramType.getName())) // { // paramType.setValue(String.valueOf(checked)); // break; // } // } } // EObject ext = inputType; // while (ext != null && !(ext instanceof // SmooksGraphicsExtType)) { // ext = ext.eContainer(); // } // // if (ext != null && ext instanceof SmooksGraphicsExtType) { // List<ISmooksGraphChangeListener> listeners = // ((SmooksGraphicsExtType) ext).getChangeListeners(); // for (Iterator<?> iterator = listeners.iterator(); // iterator.hasNext();) { // ISmooksGraphChangeListener smooksGraphChangeListener = // (ISmooksGraphChangeListener) iterator // .next(); // smooksGraphChangeListener.inputTypeChanged((SmooksGraphicsExtType) // ext); // } // } } }); TableColumn header = new TableColumn(inputDataViewer.getTable(), SWT.NONE); header.setText(Messages.SmooksConfigurationReaderPage_InputTableTypeColumnText); header.setWidth(100); TableColumn pathColumn = new TableColumn(inputDataViewer.getTable(), SWT.NONE); pathColumn.setText(Messages.SmooksConfigurationReaderPage_InputTablePathColumnLabel); pathColumn.setWidth(300); TableColumn extColumn = new TableColumn(inputDataViewer.getTable(), SWT.NONE); extColumn.setText(Messages.SmooksConfigurationReaderPage_InputTableExtensionLabel); extColumn.setWidth(400); inputDataViewer.setContentProvider(new ExtentionInputContentProvider()); inputDataViewer.setLabelProvider(new ExtentionInputLabelProvider()); inputDataViewer.getTable().setHeaderVisible(true); inputDataViewer.getTable().setLinesVisible(true); ISmooksModelProvider smooksModelProvider = (ISmooksModelProvider) getAdapter(ISmooksModelProvider.class); if (smooksModelProvider != null) { inputDataViewer.setInput(SmooksUIUtils.getSmooks11ResourceListType(smooksModelProvider.getSmooksModel())); } Composite buttonComposite = toolkit.createComposite(mainComposite, SWT.NONE); gd = new GridData(GridData.FILL_VERTICAL); buttonComposite.setLayoutData(gd); GridLayout l = new GridLayout(); buttonComposite.setLayout(l); Button addButton = toolkit.createButton(buttonComposite, Messages.SmooksConfigurationReaderPage_AddInputButtonLabel, SWT.FLAT); gd = new GridData(GridData.FILL_HORIZONTAL); addButton.setLayoutData(gd); addButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showInputDataWizard(); } }); Button removeButton = toolkit.createButton(buttonComposite, Messages.SmooksConfigurationReaderPage_DeleteInputButtonLabel, SWT.FLAT); gd = new GridData(GridData.FILL_HORIZONTAL); removeButton.setLayoutData(gd); removeButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { IStructuredSelection selection = (IStructuredSelection) inputDataViewer.getSelection(); if (selection != null) { ISmooksModelProvider modelProvider = (ISmooksModelProvider) getAdapter(ISmooksModelProvider.class); if(modelProvider == null){ return; } Object[] objs = selection.toArray(); for (int i = 0; i < objs.length; i++) { Object obj = objs[i]; if (obj instanceof InputType) { InputType input = (InputType)obj; SmooksUIUtils.removeInputType(input,modelProvider); } } // List<ISmooksGraphChangeListener> listeners = // extType.getChangeListeners(); // for (Iterator<?> iterator = listeners.iterator(); // iterator.hasNext();) { // ISmooksGraphChangeListener smooksGraphChangeListener = // (ISmooksGraphChangeListener) iterator // .next(); // smooksGraphChangeListener.inputTypeChanged(extType); // } } } }); } // public void inputTypeChanged(SmooksGraphicsExtType extType) { // if (inputDataViewer != null) // inputDataViewer.refresh(); // } }