/******************************************************************************* * Copyright (c) 2001, 2008 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.adapters; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.common.notify.Adapter; import org.eclipse.gef.commands.Command; import org.eclipse.swt.graphics.Image; import org.eclipse.wst.xsd.ui.internal.adt.actions.BaseSelectionAction; import org.eclipse.wst.xsd.ui.internal.adt.actions.DeleteAction; import org.eclipse.wst.xsd.ui.internal.adt.actions.SetInputToGraphView; import org.eclipse.wst.xsd.ui.internal.adt.actions.ShowPropertiesViewAction; import org.eclipse.wst.xsd.ui.internal.adt.design.editparts.model.IGraphElement; import org.eclipse.wst.xsd.ui.internal.adt.facade.IField; import org.eclipse.wst.xsd.ui.internal.adt.facade.IModel; import org.eclipse.wst.xsd.ui.internal.adt.facade.IType; import org.eclipse.wst.xsd.ui.internal.common.actions.AddXSDAttributeDeclarationAction; import org.eclipse.wst.xsd.ui.internal.common.actions.OpenInNewEditor; import org.eclipse.wst.xsd.ui.internal.common.commands.DeleteCommand; import org.eclipse.wst.xsd.ui.internal.common.commands.UpdateNameCommand; import org.eclipse.wst.xsd.ui.internal.editor.Messages; import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin; import org.eclipse.xsd.XSDAttributeDeclaration; import org.eclipse.xsd.XSDTypeDefinition; import org.eclipse.xsd.util.XSDConstants; // a base adapter for reuse by an AttributeUse and AttributeDeclaration // public abstract class XSDBaseAttributeAdapter extends XSDBaseAdapter implements IField, IGraphElement { protected abstract XSDAttributeDeclaration getXSDAttributeDeclaration(); protected abstract XSDAttributeDeclaration getResolvedXSDAttributeDeclaration(); public XSDBaseAttributeAdapter() { super(); } public String[] getActions(Object object) { List list = new ArrayList(); if (!isGlobal()) { list.add(AddXSDAttributeDeclarationAction.ID); list.add(BaseSelectionAction.SEPARATOR_ID); } list.add(DeleteAction.ID); list.add(BaseSelectionAction.SEPARATOR_ID); Object schema = getEditorSchema(); if (getXSDAttributeDeclaration().getSchema() == schema) { if (getXSDAttributeDeclaration().getContainer() == schema) { list.add(SetInputToGraphView.ID); } } else { list.add(OpenInNewEditor.ID); } list.add(BaseSelectionAction.SEPARATOR_ID); list.add(ShowPropertiesViewAction.ID); return (String[]) list.toArray(new String[0]); } public Command getDeleteCommand() { return new DeleteCommand(getXSDAttributeDeclaration()); } public String getKind() { return XSDConstants.ATTRIBUTE_ELEMENT_TAG; } public int getMaxOccurs() { // TODO Auto-generated method stub return -3; } public int getMinOccurs() { // TODO Auto-generated method stub return -3; } public String getName() { XSDAttributeDeclaration resolvedAttributeDeclaration = getResolvedXSDAttributeDeclaration(); String name = resolvedAttributeDeclaration.getName(); return (name == null) ? "" : name; //$NON-NLS-1$ } public IType getType() { XSDTypeDefinition td = getResolvedXSDAttributeDeclaration().getTypeDefinition(); return (td != null) ? (IType) XSDAdapterFactory.getInstance().adapt(td) : null; } public String getTypeName() { IType type = getType(); if (type != null) { return type.getName(); } return ""; } public String getTypeNameQualifier() { XSDAttributeDeclaration attr = getResolvedXSDAttributeDeclaration(); if (attr != null) { if (attr.getTypeDefinition() != null) { return attr.getTypeDefinition().getTargetNamespace(); } } return null; } public Command getUpdateMaxOccursCommand(int maxOccurs) { // TODO Auto-generated method stub return null; } public Command getUpdateMinOccursCommand(int minOccurs) { // TODO Auto-generated method stub return null; } public Command getUpdateNameCommand(String name) { return new UpdateNameCommand(Messages._UI_ACTION_UPDATE_NAME, getResolvedXSDAttributeDeclaration(), name); } public Command getUpdateTypeNameCommand(String typeName, String quailifier) { // TODO Auto-generated method stub return null; } /* * (non-Javadoc) * * @see org.eclipse.wst.xsd.ui.internal.adt.outline.ITreeElement#getImage() */ public Image getImage() { XSDAttributeDeclaration xsdAttributeDeclaration = getXSDAttributeDeclaration(); // don't want the resolved attribute if (xsdAttributeDeclaration.isAttributeDeclarationReference()) { if (isReadOnly()) { return XSDEditorPlugin.getPlugin().getIcon("obj16/XSDAttributeRefdis.gif"); } return XSDEditorPlugin.getXSDImage("icons/XSDAttributeRef.gif"); //$NON-NLS-1$ } else { if (isReadOnly()) { return XSDEditorPlugin.getPlugin().getIcon("obj16/XSDAttributedis.gif"); } return XSDEditorPlugin.getXSDImage("icons/XSDAttribute.gif"); //$NON-NLS-1$ } } /* * (non-Javadoc) * * @see org.eclipse.wst.xsd.ui.internal.adt.outline.ITreeElement#getText() */ public String getText() { return getTextForAttribute(getResolvedXSDAttributeDeclaration(), true); } public String getTextForAttribute(XSDAttributeDeclaration ad, boolean showType) { ad = ad.getResolvedAttributeDeclaration(); String name = ad.getName(); StringBuffer result = new StringBuffer(); if (name == null) { result.append(" " + Messages._UI_LABEL_ABSENT + " "); //$NON-NLS-1$ //$NON-NLS-2$ } else { result.append(name); } if (ad.getAnonymousTypeDefinition() == null && ad.getTypeDefinition() != null) { result.append(" : "); //$NON-NLS-1$ // result.append(resolvedAttributeDeclaration.getTypeDefinition().getQName(xsdAttributeDeclaration)); result.append(ad.getTypeDefinition().getName()); } return result.toString(); } public boolean isGlobal() { return false; } public boolean isReference() { return false; } public IModel getModel() { Adapter adapter = XSDAdapterFactory.getInstance().adapt(getXSDAttributeDeclaration().getSchema()); return (IModel)adapter; } public boolean isFocusAllowed() { return false; } }