/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.ui.properties; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.DialogCellEditor; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.dialogs.ListDialog; import org.eclipse.ui.views.properties.IPropertyDescriptor; import org.eclipse.xsd.XSDSchema; import org.teiid.core.designer.util.I18nUtil; import org.teiid.designer.ui.UiConstants; class NamespacePropertyDescriptor implements ITransientPropertyDescriptor, UiConstants { static final String PREFIX = I18nUtil.getPropertyPrefix(NamespacePropertyDescriptor.class); private EObject obj; private ILabelProvider labelProvider; List namespaces; /** * @see org.eclipse.ui.views.properties.IPropertyDescriptor#createPropertyEditor(org.eclipse.swt.widgets.Composite) * @since 4.3 */ @Override public CellEditor createPropertyEditor( Composite theParent ) { CellEditor editor = new DialogCellEditor(theParent) { @Override protected Object openDialogBox( Control cellEditorWindow ) { ListDialog dialog = new ListDialog(cellEditorWindow.getShell()); dialog.setInput(namespaces); dialog.setContentProvider(new ListSCP()); dialog.setLabelProvider(getLabelProvider()); dialog.setTitle(Util.getStringOrKey(PREFIX + "displayName")); //$NON-NLS-1$ dialog.open(); return null; } }; return editor; } /** * @see org.eclipse.ui.views.properties.IPropertyDescriptor#getCategory() * @since 4.3 */ @Override public String getCategory() { return Util.getStringOrKey(PREFIX + "category"); //$NON-NLS-1$ } /** * @see org.eclipse.ui.views.properties.IPropertyDescriptor#getDescription() * @since 4.3 */ @Override public String getDescription() { return Util.getStringOrKey(PREFIX + "description"); //$NON-NLS-1$ } @Override public String getDisplayName() { return Util.getStringOrKey(PREFIX + "displayName"); //$NON-NLS-1$ } /** * @see org.eclipse.ui.views.properties.IPropertyDescriptor#getFilterFlags() * @since 4.3 */ @Override public String[] getFilterFlags() { return null; } /** * @see org.teiid.designer.ui.properties.ITransientPropertyDescriptor#getPropertyValue() * @since 4.3 */ @Override public Object getPropertyValue() { if (this.obj == null) { throw new IllegalStateException(Util.getStringOrKey(PREFIX + "errorMsg.objectNotSet")); //$NON-NLS-1$ } XSDSchema xsdObj = (XSDSchema)obj; Map qNameRoNamespaces = xsdObj.getQNamePrefixToNamespaceMap(); if (qNameRoNamespaces != null && !qNameRoNamespaces.isEmpty()) { namespaces = new ArrayList(); Iterator iter = qNameRoNamespaces.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry)iter.next(); if (entry.getKey() != null) { namespaces.add("xmlns:" + entry.getKey() + "=" + entry.getValue()); //$NON-NLS-1$ //$NON-NLS-2$ // null key is used for default NS } else { namespaces.add("xmlns[default]=" + entry.getValue()); //$NON-NLS-1$ } } } if (namespaces != null && namespaces.size() > 0) { return namespaces.get(0); } return null; } /** * @see org.eclipse.ui.views.properties.IPropertyDescriptor#getHelpContextIds() * @since 4.3 */ @Override public Object getHelpContextIds() { return null; } /** * @see org.eclipse.ui.views.properties.IPropertyDescriptor#getId() * @since 4.3 */ @Override public Object getId() { return Util.getStringOrKey(PREFIX + "id"); //$NON-NLS-1$ } /** * @see org.eclipse.ui.views.properties.IPropertyDescriptor#getLabelProvider() * @since 4.3 */ @Override public ILabelProvider getLabelProvider() { if (labelProvider == null) { labelProvider = new LabelProvider(); } // endif return labelProvider; } /** * @see org.eclipse.ui.views.properties.IPropertyDescriptor#isCompatibleWith(org.eclipse.ui.views.properties.IPropertyDescriptor) * @since 4.3 */ @Override public boolean isCompatibleWith( IPropertyDescriptor theAnotherProperty ) { return false; } /** * @see org.teiid.designer.ui.properties.ITransientPropertyDescriptor#setObject(java.lang.Object) * @since 4.3 */ @Override public void setObject( Object theObject ) { if ((theObject != null) && supports(theObject)) { this.obj = (XSDSchema)theObject; } else { throw new IllegalArgumentException(Util.getString(PREFIX + "errorMsg.objectNotSupported", this.obj)); //$NON-NLS-1$ } } /** * @see org.teiid.designer.ui.properties.ITransientPropertyDescriptor#supports(java.lang.Object) * @since 4.3 */ @Override public boolean supports( Object theObject ) { return (theObject instanceof XSDSchema); } class ListSCP implements IStructuredContentProvider { @Override public Object[] getElements( Object inputElement ) { if (inputElement != null) { return ((Collection)inputElement).toArray(); } // endif return new Object[0]; } @Override public void dispose() { // ignore } @Override public void inputChanged( Viewer viewer, Object oldInput, Object newInput ) { // ignore } } // endclass ListSCP }