/*******************************************************************************
 *  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.ui.internal.wizards.orm;

import static org.eclipse.jpt.core.internal.operations.JpaFileCreationDataModelProperties.*;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;

public class MappingFileNewFileWizardPage
		extends WizardNewFileCreationPage {
	
	protected IDataModel dataModel;
	
	
	public MappingFileNewFileWizardPage(
			String pageName, IStructuredSelection selection, IDataModel dataModel,
			String title, String description) {
		
		super(pageName, selection);
		init(dataModel);
		setTitle(title);
		setDescription(description);
	}
	
	
	protected void init(IDataModel dataModel) {
		this.dataModel = dataModel;
		IPath containerPath = (IPath) this.dataModel.getProperty(CONTAINER_PATH);
		if (containerPath != null) {
			setContainerFullPath(containerPath);
		}
		String fileName = (String) this.dataModel.getProperty(FILE_NAME);
		if (fileName != null) {
			setFileName(fileName);
		}
	}
	
	@Override
	protected boolean validatePage() {
		this.dataModel.setProperty(CONTAINER_PATH, getContainerFullPath());
		this.dataModel.setProperty(FILE_NAME, getFileName());
		
		boolean valid = super.validatePage();
		if (! valid) {
			return valid;
		}
		
		IStatus validationStatus = this.dataModel.validateProperty(CONTAINER_PATH);
		if (validationStatus.isOK()) {
			validationStatus = this.dataModel.validateProperty(FILE_NAME);
		}
		if (validationStatus.isOK()) {
			setErrorMessage(null);
			return true;
		}
		else if (validationStatus.getSeverity() == IStatus.WARNING) {
			setErrorMessage(null);
			setMessage(validationStatus.getMessage(), IStatus.WARNING);
			return true;
		}
		else {
			setErrorMessage(validationStatus.getMessage());
			return false;
		}
	}
}
