blob: 8e0596defc8e81a02d4e4bd329590d5f7fc1ce8d [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.ui.internal.common.commands;
import java.util.List;
import org.eclipse.wst.xsd.ui.internal.common.util.XSDCommonUIUtils;
import org.eclipse.xsd.XSDCompositor;
import org.eclipse.xsd.XSDConcreteComponent;
import org.eclipse.xsd.XSDFactory;
import org.eclipse.xsd.XSDModelGroup;
import org.eclipse.xsd.XSDModelGroupDefinition;
import org.eclipse.xsd.XSDParticle;
import org.eclipse.xsd.XSDSchema;
import org.eclipse.xsd.util.XSDSchemaBuildingTools;
import org.w3c.dom.Text;
public class AddXSDModelGroupDefinitionCommand extends BaseCommand
{
XSDConcreteComponent parent;
boolean isReference;
public AddXSDModelGroupDefinitionCommand(String label, XSDConcreteComponent parent, boolean isReference)
{
super(label);
this.parent = parent;
this.isReference = isReference;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.commands.Command#execute()
*/
public void execute()
{
if (parent instanceof XSDSchema)
{
ensureSchemaElement((XSDSchema)parent);
}
try
{
beginRecording(parent.getElement());
if (!isReference)
{
XSDModelGroupDefinition def = createXSDModelGroupDefinition();
addedXSDConcreteComponent = def;
}
else
{
XSDFactory factory = XSDSchemaBuildingTools.getXSDFactory();
XSDModelGroupDefinition def = factory.createXSDModelGroupDefinition();
XSDParticle particle = XSDFactory.eINSTANCE.createXSDParticle();
particle.setContent(def);
List list = parent.getSchema().getModelGroupDefinitions();
if (list.size() > 0)
{
def.setResolvedModelGroupDefinition((XSDModelGroupDefinition) list.get(0));
}
else
{
XSDModelGroupDefinition newGroupDef = createXSDModelGroupDefinition();
def.setResolvedModelGroupDefinition(newGroupDef);
}
if (parent instanceof XSDModelGroup)
{
((XSDModelGroup) parent).getContents().add(particle);
}
formatChild(def.getElement());
addedXSDConcreteComponent = def;
}
}
finally
{
endRecording();
}
}
protected XSDModelGroupDefinition createXSDModelGroupDefinition()
{
XSDFactory factory = XSDSchemaBuildingTools.getXSDFactory();
XSDModelGroupDefinition def = factory.createXSDModelGroupDefinition();
List list = parent.getSchema().getModelGroupDefinitions();
String newName = XSDCommonUIUtils.createUniqueElementName("ModelGroupDefinition", list); //$NON-NLS-1$
def.setName(newName);
XSDModelGroup modelGroup = createModelGroup();
def.setModelGroup(modelGroup);
Text textNode = parent.getSchema().getDocument().createTextNode("\n"); //$NON-NLS-1$
parent.getSchema().getElement().appendChild(textNode);
parent.getSchema().getContents().add(def);
formatChild(def.getElement());
return def;
}
protected XSDModelGroup createModelGroup()
{
XSDFactory factory = XSDSchemaBuildingTools.getXSDFactory();
XSDParticle particle = factory.createXSDParticle();
XSDModelGroup modelGroup = factory.createXSDModelGroup();
modelGroup.setCompositor(XSDCompositor.SEQUENCE_LITERAL);
particle.setContent(modelGroup);
return modelGroup;
}
}