/*******************************************************************************
* Copyright (c) 2010 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:
*     Oracle - initial API and implementation
*******************************************************************************/
package org.eclipse.jpt.eclipselink.ui.internal.persistence.customization;

import org.eclipse.jpt.eclipselink.core.context.persistence.customization.Customization;
import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
import org.eclipse.jpt.ui.internal.widgets.Pane;
import org.eclipse.swt.widgets.Composite;

/**
 *  WeavingPropertiesComposite
 */
public class WeavingPropertiesComposite extends Pane<Customization>
{
	public WeavingPropertiesComposite(Pane<Customization> subjectHolder,
	                                       Composite container) {

		super(subjectHolder, container);
	}

	@Override
	protected void initializeLayout(Composite parent) {

		Composite weavingGroup = this.addTitledGroup(
			this.addSubPane(parent, 10),
			EclipseLinkUiMessages.PersistenceXmlCustomizationTab_weavingPropertiesGroupBox
		);

		// Weaving
		new WeavingComposite(this, weavingGroup);

		// Weaving Lazy
		new WeavingLazyComposite(this, weavingGroup);

		// Weaving Fetch Groups
		new WeavingFetchGroupsComposite(this, weavingGroup);

		// Weaving Internal
		new WeavingInternalComposite(this, weavingGroup);

		// Weaving Eager
		new WeavingEagerComposite(this, weavingGroup);

		// Weaving Change Tracking
		new WeavingChangeTrackingComposite(this, weavingGroup);

	}
	
}