/*******************************************************************************
 * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
 * Distributed under license by Red Hat, Inc. All rights reserved.
 * This program is 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:
 *     Exadel, Inc. and Red Hat, Inc. - initial API and implementation
 ******************************************************************************/ 
package org.jboss.tools.common.model.ui.forms;

import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.ui.ModelUIPlugin;
import org.jboss.tools.common.model.util.ModelFeatureFactory;

/**
 * @author Igels
 */
public class FormContainer  extends DefaultFormContainer {

	private IFormData formData;
	
	private FormContainer() {}

	public FormContainer(IFormData formData) {
		super();
		this.formData = formData;
		this.setHeadingText(formData.getEntityName());

		IForm form = null;
		IFormData[] forms = formData.getForms();
//		String[] entities = formData.getEntities();
		for(int i=0; i<forms.length; i++) {
			if(!forms[i].isNotLayouredForm()) {
				form = new Form(forms[i]);
			} else {
				try {
					form = (IForm)ModelFeatureFactory.getInstance().createFeatureInstance(forms[i].getFormClassName());
				} catch(ClassCastException e) {
					ModelUIPlugin.getPluginLog().logError(e);
				}
			}
			if(form!=null) {
				this.addForm(form);
				form.setParent(this);
			}
		}
	}

	public void initialize(Object model) {
		IFormData[] forms = formData.getForms();
		String[] entities = formData.getEntities();
		if (forms!=null && entities!=null) {
			XModelObject xmo = (XModelObject)model;
			XModelObject child;
			for (int i=0;i<forms.length;++i) {
				if(forms[i].getEntityName()==null) {
					this.get(i).initialize(xmo);
					continue;
				}
				String entity = forms[i].getEntityName();
				// Here it is not entity but rather a unique child name
				child = xmo.getChildByPath(entity);
				if(child == null) {
					String message = "Cannot build child form '" + forms[i].getEntityName() + "' for form '" + formData.getEntityName() + "'."; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
					Exception exc = new FormRuntimeException(message);
					ModelUIPlugin.getPluginLog().logError(exc);
				} else {
					this.get(i).initialize(child);
				}
			}
		} else {
			super.initialize(model);
		}
	}
}