blob: 9984076ba496ea752b48ec5d1f2841230d6cd129 [file] [log] [blame]
/*******************************************************************************
* 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;
}
}