blob: df4cab657d93d50890fcebdd81eb01c871a8728a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 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.editor;
import org.eclipse.core.resources.IFile;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.gef.commands.Command;
import org.eclipse.wst.common.ui.internal.search.dialogs.ComponentSpecification;
import org.eclipse.wst.xsd.ui.internal.adt.edit.ComponentReferenceEditManager;
import org.eclipse.wst.xsd.ui.internal.adt.edit.IComponentDialog;
import org.eclipse.wst.xsd.ui.internal.common.commands.AddXSDAttributeDeclarationCommand;
import org.eclipse.wst.xsd.ui.internal.common.commands.UpdateAttributeReferenceAndManagerDirectivesCommand;
import org.eclipse.wst.xsd.ui.internal.common.commands.UpdateAttributeReferenceCommand;
import org.eclipse.wst.xsd.ui.internal.common.util.XSDDirectivesManager;
import org.eclipse.wst.xsd.ui.internal.dialogs.NewAttributeDialog;
import org.eclipse.wst.xsd.ui.internal.editor.search.XSDSearchListDialogDelegate;
import org.eclipse.wst.xsd.ui.internal.search.IXSDSearchConstants;
import org.eclipse.xsd.XSDAttributeDeclaration;
import org.eclipse.xsd.XSDConcreteComponent;
import org.eclipse.xsd.XSDSchema;
public class XSDAttributeReferenceEditManager extends XSDElementReferenceEditManager implements ComponentReferenceEditManager
{
public XSDAttributeReferenceEditManager(IFile currentFile, XSDSchema[] schemas)
{
super(currentFile, schemas);
}
public IComponentDialog getBrowseDialog()
{
XSDSearchListDialogDelegate dialogDelegate =
new XSDSearchListDialogDelegate(XSDSearchListDialogDelegate.ATTRIBUTE_META_NAME, currentFile, schemas);
return dialogDelegate;
}
public IComponentDialog getNewDialog()
{
if (schemas.length > 0) {
return new NewAttributeDialog(schemas[0]);
}
else {
return new NewAttributeDialog();
}
}
public void modifyComponentReference(Object referencingObject, ComponentSpecification referencedComponent)
{
XSDAttributeDeclaration concreteComponent = null;
if (referencingObject instanceof Adapter)
{
Adapter adapter = (Adapter)referencingObject;
if (adapter.getTarget() instanceof XSDAttributeDeclaration)
{
concreteComponent = (XSDAttributeDeclaration)adapter.getTarget();
}
}
else if (referencingObject instanceof XSDConcreteComponent)
{
concreteComponent = (XSDAttributeDeclaration) referencingObject;
}
if (concreteComponent != null)
{
if (referencedComponent.isNew())
{
XSDAttributeDeclaration attributeDec = null;
if (referencedComponent.getMetaName() == IXSDSearchConstants.ATTRIBUTE_META_NAME)
{
AddXSDAttributeDeclarationCommand command = new AddXSDAttributeDeclarationCommand(Messages._UI_ACTION_ADD_ATTRIBUTE, concreteComponent.getSchema());
command.setNameToAdd(referencedComponent.getName());
command.execute();
attributeDec = (XSDAttributeDeclaration) command.getAddedComponent();
}
if (attributeDec != null)
{
Command command = new UpdateAttributeReferenceCommand(Messages._UI_ACTION_UPDATE_ATTRIBUTE_REFERENCE, concreteComponent, attributeDec);
command.execute();
}
XSDDirectivesManager.removeUnusedXSDImports(concreteComponent.getSchema());
}
else
{
Command command = new UpdateAttributeReferenceAndManagerDirectivesCommand(concreteComponent, referencedComponent.getName(), referencedComponent.getQualifier(), referencedComponent.getFile());
command.setLabel(Messages._UI_ACTION_UPDATE_ATTRIBUTE_REFERENCE);
command.execute();
}
}
}
}