/*******************************************************************************
 *  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.jaxb.ui.internal.platform;

import org.eclipse.jpt.core.internal.XPointUtil;
import org.eclipse.jpt.jaxb.core.platform.JaxbPlatformDescription;
import org.eclipse.jpt.jaxb.ui.JptJaxbUiPlugin;
import org.eclipse.jpt.jaxb.ui.platform.JaxbPlatformUi;

public class JaxbPlatformUiConfig {
	
	private String id;
	private String pluginId;
	private JaxbPlatformDescription jaxbPlatform;
	private String className;
	private JaxbPlatformUi platformUi;
	
	
	JaxbPlatformUiConfig() {
		super();
	}
	
	
	public String getId() {
		return this.id;
	}
	
	void setId(String id) {
		this.id = id;
	}
	
	public String getPluginId() {
		return this.pluginId;
	}
	
	void setPluginId(String pluginId) {
		this.pluginId = pluginId;
	}
	
	public JaxbPlatformDescription getJaxbPlatform() {
		return this.jaxbPlatform;
	}
	
	void setJaxbPlatform(JaxbPlatformDescription jaxbPlatform) {
		this.jaxbPlatform = jaxbPlatform;
	}
	
	public String getClassName() {
		return this.className;
	}
	
	void setClassName(String className) {
		this.className = className;
	}
	
	public JaxbPlatformUi getPlatformUi() {
		if (this.platformUi == null) {
			this.platformUi = XPointUtil.instantiate(
					JptJaxbUiPlugin.PLUGIN_ID, JaxbPlatformUiManagerImpl.QUALIFIED_EXTENSION_POINT_ID,
					this.className, JaxbPlatformUi.class);
		}
		return this.platformUi;
	}
}
