/****************************************************************************** * Copyright (c) 2016 Oracle * 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: * Konstantin Komissarchik - initial implementation and ongoing maintenance ******************************************************************************/ package org.eclipse.sapphire.modeling.xml.schema; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.xml.namespace.QName; /** * @author <a href="mailto:konstantin.komissarchik@oracle.com">Konstantin Komissarchik</a> */ public abstract class XmlGroupContentModel extends XmlContentModel { private final List<XmlContentModel> nestedContent = new ArrayList<XmlContentModel>(); private final List<XmlContentModel> nestedContentReadOnly = Collections.unmodifiableList( this.nestedContent ); protected XmlGroupContentModel( final XmlDocumentSchema schema, final int minOccur, final int maxOccur, final List<XmlContentModel> list ) { super( schema, minOccur, maxOccur ); this.nestedContent.addAll( list ); } public List<XmlContentModel> getNestedContent() { return this.nestedContentReadOnly; } @Override public XmlContentModel findChildElementContentModel( final QName childElementName ) { for( XmlContentModel childContentModel : getNestedContent() ) { final XmlContentModel res = childContentModel.findChildElementContentModel( childElementName ); if( res != null ) { return res; } } return null; } public static abstract class Factory extends XmlContentModel.Factory { protected final List<XmlContentModel.Factory> nestedContent = new ArrayList<XmlContentModel.Factory>(); public final List<XmlContentModel.Factory> getNestedContent() { return Collections.unmodifiableList( this.nestedContent ); } public final void addNestedContent( final XmlContentModel.Factory child ) { if( child != null ) { this.nestedContent.add( child ); } } public final boolean hasNestedContent() { return ! this.nestedContent.isEmpty(); } } }