/*************************************************************************************
 * Copyright (c) 2012 Red Hat, Inc. 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:
 *     Fred Bricon (Red Hat, Inc.) - initial API and implementation
 ************************************************************************************/
package org.eclipse.m2e.wtp.jpa;

import org.eclipse.jpt.jpa.core.resource.persistence.XmlPersistenceUnit;
import org.eclipse.jpt.jpa.core.resource.persistence.XmlProperties;
import org.eclipse.jpt.jpa.core.resource.persistence.XmlProperty;

/**
 * Base class for identifying platform ids from a {@link XmlPersistenceUnit}
 *  
 * @author Fred Bricon
 *
 */
public abstract class AbstractPlatformIdentifier implements IPlatformIdentifier {

	
	public String getPlatformId(XmlPersistenceUnit xmlPersistenceUnit) {
		if (xmlPersistenceUnit == null) {
			return null;
		}
		
		String platformId = identifyProvider(xmlPersistenceUnit.getProvider());
		if (platformId != null) {
			return platformId;
		}
		
		XmlProperties properties = xmlPersistenceUnit.getProperties();
		if (properties != null && properties.getProperties() != null) {
			for (XmlProperty property : properties.getProperties()){
				platformId = identifyProperty(property);
				if (platformId != null) {
					return platformId;
				}
			}
		}
		
		return null;
	}
	
	/**
	 * Returns the platformId associated with a given provider 
	 * or <code>null</code> if the provider doesn't match. 
	 */
	protected abstract String identifyProvider(String provider); 

	/**
	 * Returns the platformId from a given {@link XmlProperty} 
	 * or <code>null</code> if the property doesn't match  
	 */
	protected abstract String identifyProperty(XmlProperty property);

}
