/*******************************************************************************
 * Copyright (c) 2006, 2010 Soyatec (http://www.soyatec.com) 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:
 *     Soyatec - initial API and implementation
 *******************************************************************************/
package org.eclipse.xwt.internal.utils;

import org.eclipse.xwt.IConstants;
import org.eclipse.xwt.ILoadingContext;

public class NamespaceHelper {
	static public Class<?> loadCLRClass(ILoadingContext loadingContext, String name, String namespace) throws ClassNotFoundException {
		// xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary"
		if (namespace.startsWith(IConstants.XAML_CLR_NAMESPACE_PROTO)) {
			String contentSegment = namespace.substring(IConstants.XAML_CLR_NAMESPACE_PROTO.length());
			String packageName = contentSegment;
			String assembly = null;
			int index = contentSegment.indexOf(";");
			if (index != -1) {
				packageName = contentSegment.substring(0, index);
				contentSegment = contentSegment.substring(index + 1);
				if (contentSegment.startsWith(IConstants.XAML_CLR_ASSEMBLY)) {
					assembly = contentSegment.substring(IConstants.XAML_CLR_ASSEMBLY.length());
				} else {
					throw new IllegalStateException(IConstants.XAML_CLR_ASSEMBLY);
				}
			}
			if (assembly != null) {
				// TODO Load jar using URLClassLoader
			}
			if (packageName != null && packageName.length() > 0) {
				name = packageName + "." + name;
			}
			return ClassLoaderUtil.loadClass(loadingContext, name);
		}
		return null;
	}
}
