/******************************************************************************* * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 *******************************************************************************/ package org.ebayopensource.turmeric.eclipse.ui.wizards.pages.typelib; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; import org.ebayopensource.turmeric.eclipse.core.resources.constants.SOAProjectConstants; import org.ebayopensource.turmeric.eclipse.repositorysystem.core.GlobalRepositorySystem; import org.ebayopensource.turmeric.eclipse.repositorysystem.core.ISOAHelpProvider; import org.ebayopensource.turmeric.eclipse.ui.SOABasePage; import org.ebayopensource.turmeric.eclipse.ui.components.TableButtonPanelViewer; import org.ebayopensource.turmeric.eclipse.ui.components.TableButtonPanelViewer.ColumnDef; import org.ebayopensource.turmeric.eclipse.utils.collections.ListUtil; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Item; import org.eclipse.swt.widgets.Text; /** * Details Page for enum type wizard. * * @author ramurthy */ public class EnumTypeWizardDetailsPage extends SOABasePage { private static final String COL_ENUM_VALUE = "Value"; private static final String COL_ENUM_DESC = "Description"; private static final String[] colProperties = new String[] { SOAProjectConstants.EMPTY_STRING, COL_ENUM_VALUE, COL_ENUM_DESC }; private List<EnumTableModel> enumHolder = new LinkedList<EnumTableModel>(); private TableButtonPanelViewer enumViewer; private CellEditor[] editors; private static final ColumnDef[] colDef = { new ColumnDef(SOAProjectConstants.EMPTY_STRING, 20), // removing the icons because it is causing blur new ColumnDef(COL_ENUM_VALUE, 80, null),// UIActivator.getImageFromRegistry("enum.gif") new ColumnDef(COL_ENUM_DESC, 200, null) // UIActivator.getImageFromRegistry("description.gif") }; /** * Instantiates a new enum type wizard details page. */ public EnumTypeWizardDetailsPage() { super("enumTypeWizardDetailsPage", "Add Details", "Add Enum Values and Descriptions"); } /** * {@inheritDoc} */ @Override public void createControl(Composite parent) { final Composite container = super.createParentControl(parent, 2); createViewer(container); initializeCellEditors(); enumViewer.setCellEditors(editors); enumViewer.setCellModifier(new EnumTableCellModifier(enumViewer)); dialogChanged(); } /** * Creates the viewer. * * @param container the container */ public void createViewer(Composite container) { int style = SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION; enumViewer = new TableButtonPanelViewer(container, style, colDef, true) { @Override protected void addButtonSelected(SelectionEvent event) { super.addButtonSelected(event); EnumTableModel model = new EnumTableModel(); model.setEnumValue(COL_ENUM_VALUE); model.setEnumDesc(COL_ENUM_DESC); if (enumHolder.add(model)) { enumViewer.getRemoveButton().setEnabled(true); enumViewer.refresh(); dialogChanged(); } } @Override protected void downButtonSelected(SelectionEvent event) { super.downButtonSelected(event); final Object obj = getSelectedObject(); if (obj instanceof EnumTableModel) { ListUtil.moveOnePositionDown(enumHolder, (EnumTableModel) obj); enumViewer.refresh(); } } @Override protected void removeButtonSelected(SelectionEvent event) { super.removeButtonSelected(event); final Object obj = getSelectedObject(); if (obj instanceof EnumTableModel && enumHolder.remove(obj)) { enumViewer.getRemoveButton().setEnabled(false); enumViewer.refresh(); dialogChanged(); } } @Override protected void upButtonSelected(SelectionEvent event) { super.upButtonSelected(event); final Object obj = getSelectedObject(); if (obj instanceof EnumTableModel) { ListUtil .moveOnePositionUp(enumHolder, (EnumTableModel) obj); enumViewer.refresh(); } } @Override protected void viewerSelectionChanged(SelectionChangedEvent event) { super.viewerSelectionChanged(event); dialogChanged(); } }; enumViewer.setContentProvider(new ArrayContentProvider()); enumViewer.setLabelProvider(new EnumTableLabelProvider()); enumViewer.setColumnProperties(colProperties); enumViewer.setInput(enumHolder); enumViewer.getTable().setLayoutData( new GridData(SWT.FILL, SWT.FILL, true, true)); } /** * Initialize cell editors. */ public void initializeCellEditors() { editors = new CellEditor[colDef.length]; int i = 0; while (i < editors.length) { editors[i] = new TextCellEditor(enumViewer.getTable()); i++; } } /** * Gets the enum table model. * * @return the enum table model */ public EnumTableModel[] getEnumTableModel() { EnumTableModel[] enumTableModel = new EnumTableModel[enumHolder.size()]; enumTableModel = enumHolder.toArray(enumTableModel); return enumTableModel; } /* (non-Javadoc) * @see org.ebayopensource.turmeric.eclipse.ui.SOABasePage#getHelpContextID() */ @Override public String getHelpContextID() { return GlobalRepositorySystem.instanceOf().getActiveRepositorySystem() .getHelpProvider().getHelpContextID( ISOAHelpProvider.PAGE_CREATE_SCHEMA_TYPE); } /** * Label Provider for Enum Table * */ private static class EnumTableLabelProvider extends LabelProvider implements ITableLabelProvider { @Override public Image getColumnImage(Object element, int columnIndex) { return null; } @Override public String getColumnText(Object element, int columnIndex) { EnumTableModel enumTableModel = null; if (element instanceof EnumTableModel) enumTableModel = (EnumTableModel) element; switch (columnIndex) { case 1: return enumTableModel.getEnumValue(); case 2: return enumTableModel.getEnumDesc(); default: return SOAProjectConstants.EMPTY_STRING; } } } /** * Enum Table UI Model * */ private class EnumTableCellModifier implements ICellModifier { private TableButtonPanelViewer viewer; public EnumTableCellModifier(TableButtonPanelViewer viewer) { this.viewer = viewer; } @Override public boolean canModify(Object element, String property) { int colIndex = viewer.getColumnNames().indexOf(property); if (colIndex == 0) return false; return true; } @Override public Object getValue(Object element, String property) { EnumTableModel model = (EnumTableModel) element; int colIndex = viewer.getColumnNames().indexOf(property); switch (colIndex) { case 1: return model.getEnumValue(); case 2: return model.getEnumDesc(); default: return null; } } @Override public void modify(Object element, String property, Object value) { if (element instanceof Item) { element = ((Item) element).getData(); } EnumTableModel model = (EnumTableModel) element; int colIndex = viewer.getColumnNames().indexOf(property); switch (colIndex) { case 1: model.setEnumValue((String) value); break; case 2: model.setEnumDesc((String) value); break; default: } if (model != null) { viewer.refresh(); dialogChanged(); } } } /* (non-Javadoc) * @see org.ebayopensource.turmeric.eclipse.ui.SOABasePage#dialogChanged() */ @Override protected boolean dialogChanged() { updateStatus(null); final Set<String> enumValues = new HashSet<String>(); for (final EnumTableModel enumModel : enumHolder) { final String enumValue = enumModel.getEnumValue(); /* * if (!StringUtils.isAlphanumeric(enumValue)) { * updateStatus("Element name should be alphanumeric"); return * false; } */ if (enumValues.contains(enumValue)) { updateStatus(enumViewer.getTable(), "Duplicate enum value - " + enumValue); return false; }/* * else { updateStatus(null); } */ enumValues.add(enumValue); } return true; } /** * Enum Table Model. */ public static class EnumTableModel { private String enumValue; private String enumDesc; /** * Gets the enum desc. * * @return the enum desc */ public String getEnumDesc() { return enumDesc; } /** * Sets the enum desc. * * @param enumDesc the new enum desc */ public void setEnumDesc(String enumDesc) { this.enumDesc = enumDesc; } /** * Gets the enum value. * * @return the enum value */ public String getEnumValue() { return enumValue; } /** * Sets the enum value. * * @param enumValue the new enum value */ public void setEnumValue(String enumValue) { this.enumValue = enumValue; } } /* (non-Javadoc) * @see org.ebayopensource.turmeric.eclipse.ui.SOABasePage#getDefaultValue(org.eclipse.swt.widgets.Text) */ @Override public String getDefaultValue(Text text) { return SOAProjectConstants.EMPTY_STRING; } }