/*
 * Copyright (c) OSGi Alliance (2009). All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.osgi.framework.launch;

import java.util.Map;

import org.osgi.framework.Bundle;

/**
 * A factory for creating {@link Framework} instances.
 * 
 * <p>
 * A FrameworkFactory implementation class must have a public, no-argument
 * constructor. A framework implementation jar must define the name of the
 * FrameworkFactory implementation class by placing the name of the
 * implementation class in the following resource:
 * 
 * <pre>
 * /META-INF/services/org.osgi.framework.launch.FrameworkFactory
 * </pre>
 * 
 * Launchers can then find the name of the FrameworkFactory implementation class
 * in the resource and can then load and construct a FrameworkFactory object for
 * the framework implementation. Java 6 also provides the
 * <code>ServiceLoader</code> mechanism which can create a FrameworkFactory
 * instance from the resource.
 * 
 * @ThreadSafe
 * @version $Revision$
 */
public interface FrameworkFactory {

	/**
	 * Create a new {@link Framework} instance.
	 * 
	 * @param configuration The framework properties to configure the new
	 *        framework instance. If framework properties are not provided by
	 *        the configuration argument, the created framework instance must
	 *        use some reasonable default configuration appropriate for the
	 *        current VM. For example, the system packages for the current
	 *        execution environment should be properly exported. The specified
	 *        configuration argument may be <code>null</code>. The created
	 *        framework instance must copy any information needed from the
	 *        specified configuration argument since the configuration argument
	 *        can be changed after the framework instance has been created.
	 * @return A new, configured {@link Framework} instance. The framework
	 *         instance must be in the {@link Bundle#INSTALLED} state.
	 * @throws java.lang.SecurityException If the caller does not have
	 *         <code>AllPermission</code>, and the Java Runtime Environment
	 *         supports permissions.
	 */
	Framework newFramework(Map configuration);
}

@@ -790,25 +790,25 @@
 p%3E%0A * A 
-F
+f
 ramework
 Factory 
@@ -791,39 +791,32 @@
 %3E%0A * A framework
-Factory
  implementation 
@@ -819,104 +819,184 @@
 ion 
-class
+jar
  must 
-have a public, no-argument%0A * constructor. A framework implementation jar
+contain the following resource:%0A * %0A * %3Cpre%3E%0A * /META-INF/services/org.osgi.framework.launch.FrameworkFactory%0A * %3C/pre%3E%0A * %0A * This UTF-8 encoded resource
  must 
-def
+conta
 in
-e
  the
@@ -1007,19 +1007,46 @@
 e of the
-%0A *
+ framework%0A * implementation's
  Framewo
@@ -1079,178 +1079,220 @@
 lass
- by placing the name of the%0A * implementation class in the following resource:%0A * %0A * %3Cpre%3E%0A * /META-INF/services/org.osgi.framework.launch.FrameworkFactory%0A * %3C/pre%3E
+. Space and tab%0A * characters, including blank lines, in the resource must be ignored. The%0A * number sign ('#' %5Cu0023) and all characters following it on each line are a%0A * comment and must be ignored.%0A * 
 %0A * 
+%3Cp%3E
 %0A * 
@@ -1305,21 +1305,16 @@
 ers can 
-then 
 find the
@@ -1363,22 +1363,22 @@
 on class
-%0A *
  in
+%0A *
  the res
@@ -1387,20 +1387,16 @@
 rce and 
-can 
 then loa
@@ -1444,25 +1444,55 @@
  for
-%0A * the f
+ the%0A * framework implementation. The F
 ramework
  imp
@@ -1479,32 +1479,39 @@
 n. The Framework
+Factory
  implementation.
@@ -1513,30 +1513,90 @@
 tion
-. Java 6 also provides
+ class must have%0A * a public, no-argument constructor. Java&trade; SE 6 introduced
  the
@@ -1630,17 +1630,13 @@
 de%3E 
-mechanism
+class
  whi
@@ -1667,19 +1667,16 @@
 kFactory
-%0A *
  instanc
@@ -1676,16 +1676,19 @@
 instance
+%0A *
  from th
@@ -2729,18 +2729,8 @@
 ows 
-java.lang.
 Secu

update the javadoc to describe the format of the resource