blob: a090be1f093c9d29c7b51bc3f3221e47bd7df88e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.xsd.ui.internal.common.properties.sections;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin;
import org.eclipse.wst.xsd.ui.internal.util.TypesHelper;
import org.eclipse.wst.xsd.ui.internal.util.ViewUtility;
import org.eclipse.wst.xsd.ui.internal.widgets.TypeSection;
import org.eclipse.xsd.XSDSchema;
import org.eclipse.xsd.XSDSimpleTypeDefinition;
import org.eclipse.xsd.util.XSDConstants;
public class SimpleContentUnionMemberTypesDialog extends Dialog implements SelectionListener
{
XSDSimpleTypeDefinition simpleType;
/**
* @param parentShell
*/
public SimpleContentUnionMemberTypesDialog(Shell parentShell, XSDSimpleTypeDefinition simpleType)
{
super(parentShell);
this.simpleType = simpleType;
}
Table table;
TypeSection typeSection;
Button addButton, removeButton;
org.eclipse.swt.widgets.List memberTypesList;
private String result;
protected void configureShell(Shell shell)
{
super.configureShell(shell);
}
protected void buttonPressed(int buttonId)
{
if (buttonId == Window.OK)
{
StringBuffer sb = new StringBuffer();
int length = memberTypesList.getItemCount();
for (int i=0 ; i < length; i++)
{
sb.append(memberTypesList.getItem(i));
if (i < length - 1)
{
sb.append(" "); //$NON-NLS-1$
}
}
result = sb.toString();
}
super.buttonPressed(buttonId);
}
public String getResult() { return result; }
//
// Create the controls
//
public Control createDialogArea(Composite parent)
{
Composite client = (Composite)super.createDialogArea(parent);
getShell().setText("Union " + XSDConstants.MEMBERTYPES_ATTRIBUTE); //$NON-NLS-1$
Label instructions = new Label(client, SWT.LEFT | SWT.WRAP);
instructions.setText(XSDEditorPlugin.getXSDString("_UI_LABEL_SELECT_MEMBERTYPES")); //$NON-NLS-1$
Composite columnsComposite = new Composite(client, SWT.NONE);
GridLayout ccGL = new GridLayout();
ccGL.verticalSpacing = 0;
ccGL.horizontalSpacing = 0;
ccGL.marginHeight = 0;
ccGL.marginWidth = 0;
ccGL.makeColumnsEqualWidth = true;
ccGL.numColumns = 3;
columnsComposite.setLayout(ccGL);
GridData ccGD = new GridData();
ccGD.grabExcessHorizontalSpace = true;
ccGD.horizontalAlignment = GridData.FILL;
columnsComposite.setLayoutData(ccGD);
typeSection = new TypeSection(columnsComposite);
typeSection.setShowUserComplexType(false);
typeSection.createClient(columnsComposite);
typeSection.getSimpleType().setSelection(false);
typeSection.getSimpleType().addSelectionListener(this);
typeSection.getUserSimpleType().addSelectionListener(this);
ViewUtility.createHorizontalFiller(columnsComposite, 1);
Label memberListLabel = new Label(columnsComposite, SWT.LEFT);
memberListLabel.setText(XSDEditorPlugin.getXSDString("_UI_LABEL_MEMBERTYPES_VALUE")); //$NON-NLS-1$
Composite dataComposite = new Composite(client, SWT.NONE);
GridLayout dcGL = new GridLayout();
dcGL.verticalSpacing = 0;
dcGL.marginHeight = 0;
dcGL.marginWidth = 0;
dcGL.numColumns = 3;
dataComposite.setLayout(dcGL);
GridData dcGD = new GridData();
dcGD.grabExcessHorizontalSpace = true;
dcGD.grabExcessVerticalSpace = true;
dataComposite.setLayoutData(dcGD);
table = new Table(dataComposite,
SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
table.setHeaderVisible(false);
table.setLinesVisible(true);
GridData gd2 = new GridData();
gd2.grabExcessHorizontalSpace = true;
gd2.grabExcessVerticalSpace = true;
gd2.horizontalAlignment = GridData.FILL;
gd2.verticalAlignment = GridData.FILL;
gd2.heightHint = 200;
gd2.widthHint = 200;
table.setLayoutData(gd2);
// Fill table
handleSetInput();
table.getItemCount();
TableColumn tc = new TableColumn(table, SWT.LEFT);
tc.setWidth(200);
tc.setResizable(true);
Composite buttonComposite = new Composite(dataComposite, SWT.NONE);
GridLayout bcGL = new GridLayout();
bcGL.numColumns = 1;
buttonComposite.setLayout(bcGL);
addButton = new Button(buttonComposite, SWT.PUSH);
addButton.setText(">"); //$NON-NLS-1$
addButton.addSelectionListener(this);
removeButton = new Button(buttonComposite, SWT.PUSH);
removeButton.setText("<"); //$NON-NLS-1$
removeButton.addSelectionListener(this);
Composite listComposite = new Composite(dataComposite, SWT.NONE);
GridLayout mtGL = new GridLayout();
mtGL.numColumns = 1;
mtGL.marginHeight = 0;
mtGL.marginWidth = 0;
mtGL.horizontalSpacing = 0;
mtGL.verticalSpacing = 0;
listComposite.setLayout(mtGL);
GridData mtGD = new GridData();
mtGD.grabExcessHorizontalSpace = true;
mtGD.grabExcessVerticalSpace = true;
mtGD.verticalAlignment = GridData.FILL;
mtGD.horizontalAlignment = GridData.FILL;
listComposite.setLayoutData(mtGD);
memberTypesList = new org.eclipse.swt.widgets.List(listComposite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
GridData mtlGD = new GridData();
mtlGD.grabExcessHorizontalSpace = true;
mtlGD.grabExcessVerticalSpace = true;
mtlGD.verticalAlignment = GridData.FILL;
mtlGD.horizontalAlignment = GridData.FILL;
mtlGD.heightHint = 200;
mtlGD.widthHint = 200;
memberTypesList.setLayoutData(mtlGD);
initializeMemberListContent();
return client;
}
private void initializeMemberListContent()
{
// String result = element.getAttribute(XSDConstants.MEMBERTYPES_ATTRIBUTE);
// if (result == null)
// {
// return;
// }
// StringTokenizer token = new StringTokenizer(result);
// while (token.hasMoreTokens())
// {
// memberTypesList.add(token.nextToken());
// }
XSDSchema schema = simpleType.getSchema();
for (Iterator i = simpleType.getMemberTypeDefinitions().iterator(); i.hasNext(); )
{
String name = ((XSDSimpleTypeDefinition)i.next()).getQName(schema);
if (name != null)
memberTypesList.add(name);
}
}
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e)
{
if (e.widget == typeSection.getSimpleType() && typeSection.getSimpleType().getSelection())
{
populateBuiltInType();
}
else if (e.widget == typeSection.getUserSimpleType() && typeSection.getUserSimpleType().getSelection())
{
populateUserSimpleType(false);
}
else if (e.widget == addButton)
{
TableItem[] items = table.getItems();
int selection = table.getSelectionIndex();
if (items != null && items.length > 0 && selection >= 0)
{
String typeToAdd = items[selection].getData().toString();
if (memberTypesList.indexOf(typeToAdd) < 0)
{
memberTypesList.add(items[selection].getData().toString());
}
}
}
else if (e.widget == removeButton)
{
String[] typesToRemove = memberTypesList.getSelection();
for (int i=0; i < typesToRemove.length; i++)
{
memberTypesList.remove(typesToRemove[i]);
}
}
}
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetDefaultSelected(SelectionEvent e)
{
}
public void handleSetInput()
{
populateBuiltInType();
}
public void populateBuiltInType()
{
table.removeAll();
List items = getBuiltInTypeNamesList();
for (int i = 0; i < items.size(); i++)
{
TableItem item = new TableItem(table, SWT.NONE);
item.setText(items.get(i).toString());
item.setImage(XSDEditorPlugin.getXSDImage("icons/XSDSimpleType.gif")); //$NON-NLS-1$
item.setData(items.get(i));
}
}
public void populateUserSimpleType(boolean showAnonymous)
{
table.removeAll();
if (showAnonymous)
{
TableItem anonymousItem = new TableItem(table, SWT.NONE);
anonymousItem.setText("**anonymous**"); //$NON-NLS-1$
anonymousItem.setData("**anonymous**"); //$NON-NLS-1$
}
List items = getUserSimpleTypeNamesList();
for (int i = 0; i < items.size(); i++)
{
TableItem item = new TableItem(table, SWT.NONE);
item.setText(items.get(i).toString());
item.setImage(XSDEditorPlugin.getXSDImage("icons/XSDSimpleType.gif")); //$NON-NLS-1$
item.setData(items.get(i));
}
}
public java.util.List getBuiltInTypeNamesList()
{
TypesHelper helper = new TypesHelper(simpleType.getSchema());
return helper.getBuiltInTypeNamesList();
}
public java.util.List getUserSimpleTypeNamesList()
{
TypesHelper helper = new TypesHelper(simpleType.getSchema());
return helper.getUserSimpleTypeNamesList();
}
}