| /******************************************************************************* |
| * Copyright (c) 2001, 2007 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.providers; |
| |
| import org.eclipse.jface.viewers.LabelProvider; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.ui.IEditorInput; |
| import org.eclipse.ui.IEditorPart; |
| import org.eclipse.ui.IFileEditorInput; |
| import org.eclipse.ui.IWorkbench; |
| import org.eclipse.ui.IWorkbenchPage; |
| import org.eclipse.ui.IWorkbenchWindow; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.ide.FileStoreEditorInput; |
| import org.eclipse.wst.xsd.ui.internal.adapters.XSDAdapterFactory; |
| import org.eclipse.wst.xsd.ui.internal.adapters.XSDBaseAdapter; |
| import org.eclipse.wst.xsd.ui.internal.adt.outline.ITreeElement; |
| import org.eclipse.wst.xsd.ui.internal.editor.Messages; |
| import org.eclipse.xsd.XSDAttributeDeclaration; |
| import org.eclipse.xsd.XSDConcreteComponent; |
| import org.eclipse.xsd.XSDElementDeclaration; |
| import org.eclipse.xsd.XSDModelGroupDefinition; |
| import org.eclipse.xsd.XSDNamedComponent; |
| import org.eclipse.xsd.XSDSchema; |
| import org.eclipse.xsd.util.XSDConstants; |
| import org.w3c.dom.Element; |
| |
| public class XSDSectionLabelProvider extends LabelProvider |
| { |
| /** |
| * |
| */ |
| public XSDSectionLabelProvider() |
| { |
| super(); |
| } |
| |
| /** |
| * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object) |
| */ |
| public Image getImage(Object object) |
| { |
| if (object == null || object.equals(StructuredSelection.EMPTY)) |
| { |
| return null; |
| } |
| Image result = null; |
| if (object instanceof StructuredSelection) |
| { |
| Object selected = ((StructuredSelection) object).getFirstElement(); |
| |
| if (selected instanceof XSDConcreteComponent) |
| { |
| XSDBaseAdapter adapter = (XSDBaseAdapter)XSDAdapterFactory.getInstance().adapt((XSDConcreteComponent)selected); |
| return ((ITreeElement)adapter).getImage(); |
| } |
| } |
| return result; |
| } |
| |
| /** |
| * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object) |
| */ |
| public String getText(Object object) |
| { |
| if (object == null || object.equals(StructuredSelection.EMPTY)) |
| { |
| return org.eclipse.wst.xsd.ui.internal.common.util.Messages._UI_LABEL_NO_ITEMS_SELECTED; |
| } |
| |
| String result = null; |
| |
| boolean isReference = false; |
| Object selected = null; |
| if (object instanceof StructuredSelection) |
| { |
| selected = ((StructuredSelection) object).getFirstElement(); |
| |
| if (selected instanceof XSDConcreteComponent) |
| { |
| if (selected instanceof XSDElementDeclaration) |
| { |
| XSDElementDeclaration xsdElementDeclaration = (XSDElementDeclaration) selected; |
| if (xsdElementDeclaration.isElementDeclarationReference()) |
| { |
| isReference = true; |
| } |
| } else if (selected instanceof XSDAttributeDeclaration) |
| { |
| if (((XSDAttributeDeclaration) selected).isAttributeDeclarationReference()) |
| { |
| isReference = true; |
| } |
| } else if (selected instanceof XSDModelGroupDefinition) |
| { |
| if (((XSDModelGroupDefinition) selected).isModelGroupDefinitionReference()) |
| { |
| isReference = true; |
| } |
| } |
| StringBuffer sb = new StringBuffer(); |
| Element element = ((XSDConcreteComponent) selected).getElement(); |
| if (element != null) |
| { |
| sb.append(((XSDConcreteComponent) selected).getElement().getLocalName()); |
| |
| if (isReference) |
| { |
| sb.append(" ref");//$NON-NLS-1$ |
| // This string is not easily translatable to other languages. |
| // For now, make it english-only since we use the element tag as the title anyway |
| // sb.append(Messages.UI_PAGE_HEADING_REFERENCE); |
| } |
| |
| IWorkbench workbench = PlatformUI.getWorkbench(); |
| IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow(); |
| if (workbenchWindow != null) |
| { |
| IWorkbenchPage page = workbenchWindow.getActivePage(); |
| if (page != null) |
| { |
| IEditorPart editorPart = page.getActiveEditor(); |
| XSDSchema xsdSchema = ((XSDConcreteComponent) selected).getSchema(); |
| IEditorInput editorInput = editorPart.getEditorInput(); |
| boolean isReadOnly = false; |
| if (!(editorInput instanceof IFileEditorInput || editorInput instanceof FileStoreEditorInput)) |
| { |
| isReadOnly = true; |
| } |
| if (editorPart != null && xsdSchema != editorPart.getAdapter(XSDSchema.class) || isReadOnly) |
| { |
| sb.append(" (" + Messages.UI_LABEL_READ_ONLY + ")"); //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| } |
| } |
| return sb.toString(); |
| } |
| else |
| { |
| // If the element is null, then let's use the model object to find |
| // an appropriate name |
| if ((XSDConcreteComponent) selected instanceof XSDNamedComponent) |
| { |
| return ((XSDNamedComponent)selected).getName(); |
| } |
| else if ((XSDConcreteComponent) selected instanceof XSDSchema) |
| { |
| return XSDConstants.SCHEMA_ELEMENT_TAG; |
| } |
| // last resort.... |
| return "(" + Messages.UI_LABEL_READ_ONLY + ")"; //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| } |
| |
| if (object instanceof Element) |
| { |
| return ((Element) object).getLocalName(); |
| } |
| } |
| |
| return result; |
| } |
| } |