blob: 3d6d8bf00c7874f8c3378dee7b64bcf1d6ccd700 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2007 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();
int length = list.size();
if (length > 1)
{
for (int i = 0; i < length; i++)
{
XSDModelGroupDefinition gr = (XSDModelGroupDefinition) list.get(i);
if (gr.getModelGroup() != parent)
{
def.setResolvedModelGroupDefinition(gr);
}
}
}
else if (length <= 1)
{
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;
}
}