blob: aa3e00f402f1a740015ad01e703f10f275f31a11 [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.editor.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.adt.actions.BaseSelectionAction;
import org.eclipse.wst.xsd.adt.actions.ShowPropertiesViewAction;
import org.eclipse.wst.xsd.adt.facade.IField;
import org.eclipse.wst.xsd.adt.facade.IModel;
import org.eclipse.wst.xsd.adt.facade.IType;
import org.eclipse.wst.xsd.editor.XSDEditorPlugin;
import org.eclipse.wst.xsd.ui.common.actions.AddXSDAttributeDeclarationAction;
import org.eclipse.wst.xsd.ui.common.actions.DeleteXSDConcreteComponentAction;
import org.eclipse.wst.xsd.ui.common.commands.DeleteCommand;
import org.eclipse.wst.xsd.ui.common.commands.UpdateNameCommand;
import org.eclipse.xsd.XSDAttributeDeclaration;
import org.eclipse.xsd.XSDTypeDefinition;
// a base adapter for reuse by an AttributeUse and AttributeDeclaration
//
public abstract class XSDBaseAttributeAdapter extends XSDBaseAdapter implements IField
{
protected abstract XSDAttributeDeclaration getXSDAttributeDeclaration();
protected abstract XSDAttributeDeclaration getResolvedXSDAttributeDeclaration();
public XSDBaseAttributeAdapter()
{
super();
}
public String[] getActions(Object object)
{
List list = new ArrayList();
list.add(AddXSDAttributeDeclarationAction.ID);
list.add(BaseSelectionAction.SEPARATOR_ID);
list.add(DeleteXSDConcreteComponentAction.DELETE_XSD_COMPONENT_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 "attribute";
}
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;
}
public IType getType()
{
XSDTypeDefinition td = getResolvedXSDAttributeDeclaration().getTypeDefinition();
return (td != null) ? (IType) XSDAdapterFactory.getInstance().adapt(td) : null;
}
public String getTypeName()
{
XSDTypeDefinition td = getResolvedXSDAttributeDeclaration().getTypeDefinition();
return (td != null) ? td.getName() : "(no type defined)";
}
public String getTypeNameQualifier()
{
// TODO Auto-generated method stub
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("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.adt.outline.ITreeElement#getImage()
*/
public Image getImage()
{
XSDAttributeDeclaration xsdAttributeDeclaration = getXSDAttributeDeclaration(); // don't want the resolved attribute
if (xsdAttributeDeclaration.isAttributeDeclarationReference())
{
return XSDEditorPlugin.getXSDImage("icons/XSDAttributeRef.gif");
}
else
{
return XSDEditorPlugin.getXSDImage("icons/XSDAttribute.gif");
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.wst.xsd.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("'absent'");
}
else
{
result.append(name);
}
if (ad.getAnonymousTypeDefinition() == null && ad.getTypeDefinition() != null)
{
result.append(" : ");
// result.append(resolvedAttributeDeclaration.getTypeDefinition().getQName(xsdAttributeDeclaration));
result.append(ad.getTypeDefinition().getName());
}
return result.toString();
}
public boolean isGlobal()
{
return false;
}
public IModel getModel()
{
Adapter adapter = XSDAdapterFactory.getInstance().adapt(getXSDAttributeDeclaration().getSchema());
return (IModel)adapter;
}
}