You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ds...@apache.org on 2009/07/21 20:51:41 UTC

svn commit: r796467 [5/25] - in /felix/trunk/sigil: common/core.tests/src/org/apache/felix/sigil/core/ common/core/src/org/apache/felix/sigil/bnd/ common/core/src/org/apache/felix/sigil/config/ common/core/src/org/apache/felix/sigil/core/ common/core/s...

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/core/repository/ProgressWrapper.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/core/repository/ProgressWrapper.java?rev=796467&r1=796466&r2=796467&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/core/repository/ProgressWrapper.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/core/repository/ProgressWrapper.java Tue Jul 21 18:51:33 2009
@@ -19,53 +19,74 @@
 
 package org.apache.felix.sigil.core.repository;
 
+
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.apache.felix.sigil.repository.IResolutionMonitor;
 
-public class ProgressWrapper implements IProgressMonitor {
 
-	private IResolutionMonitor monitor;
-	
-	public ProgressWrapper(IResolutionMonitor monitor) {
-		this.monitor = monitor;
-	}
+public class ProgressWrapper implements IProgressMonitor
+{
+
+    private IResolutionMonitor monitor;
+
+
+    public ProgressWrapper( IResolutionMonitor monitor )
+    {
+        this.monitor = monitor;
+    }
+
+
+    public boolean isCanceled()
+    {
+        return monitor.isCanceled();
+    }
+
+
+    public void beginTask( String name, int totalWork )
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+
+    public void done()
+    {
+        // TODO Auto-generated method stub
+
+    }
 
-	public boolean isCanceled() {
-		return monitor.isCanceled();
-	}
 
-	public void beginTask(String name, int totalWork) {
-		// TODO Auto-generated method stub
+    public void internalWorked( double work )
+    {
+        // TODO Auto-generated method stub
 
-	}
+    }
 
-	public void done() {
-		// TODO Auto-generated method stub
 
-	}
+    public void setCanceled( boolean value )
+    {
+        // TODO Auto-generated method stub
 
-	public void internalWorked(double work) {
-		// TODO Auto-generated method stub
+    }
 
-	}
 
-	public void setCanceled(boolean value) {
-		// TODO Auto-generated method stub
+    public void setTaskName( String name )
+    {
+        // TODO Auto-generated method stub
 
-	}
+    }
 
-	public void setTaskName(String name) {
-		// TODO Auto-generated method stub
 
-	}
+    public void subTask( String name )
+    {
+        // TODO Auto-generated method stub
 
-	public void subTask(String name) {
-		// TODO Auto-generated method stub
+    }
 
-	}
 
-	public void worked(int work) {
-		// TODO Auto-generated method stub
+    public void worked( int work )
+    {
+        // TODO Auto-generated method stub
 
-	}
+    }
 }

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/core/repository/SystemRepository.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/core/repository/SystemRepository.java?rev=796467&r1=796466&r2=796467&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/core/repository/SystemRepository.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/core/repository/SystemRepository.java Tue Jul 21 18:51:33 2009
@@ -19,6 +19,7 @@
 
 package org.apache.felix.sigil.core.repository;
 
+
 import java.io.IOException;
 import java.util.jar.JarFile;
 
@@ -32,79 +33,110 @@
 import org.apache.felix.sigil.repository.IRepositoryVisitor;
 import org.eclipse.core.runtime.IPath;
 
-public class SystemRepository extends AbstractBundleRepository {
 
-	private final String packages;
-	private final IPath frameworkPath;
+public class SystemRepository extends AbstractBundleRepository
+{
+
+    private final String packages;
+    private final IPath frameworkPath;
+
 
-	public SystemRepository(String id, IPath frameworkPath, String packages) {
-		super(id);
-		this.frameworkPath = frameworkPath;
-		this.packages = packages;
-	}
-
-	private static ISigilBundle systemBundle;
-	
-	@Override
-	public void accept(IRepositoryVisitor visitor, int options) {
-		ISigilBundle bundle = loadSystemBundle();
-		
-		if ( bundle != null ) {
-			visitor.visit(bundle);
-		}
-	}
-
-	private synchronized ISigilBundle loadSystemBundle() {
-		if (systemBundle == null) {
-			systemBundle = ModelElementFactory.getInstance().newModelElement(ISigilBundle.class);
-			
-			JarFile jar = null;
-			
-			try {
-    			final IBundleModelElement info;
-				if (frameworkPath != null) {
-        			systemBundle.setLocation(frameworkPath);
-    				jar = new JarFile(frameworkPath.toFile());
-    				info = buildBundleModelElement(jar.getManifest());
-				} else {
-				    info = ModelElementFactory.getInstance().newModelElement(IBundleModelElement.class);
-				}
-				
-    			applyProfile(info);
-    			systemBundle.addChild(info);
-			} catch (IOException e) {
-				BldCore.error( "Failed to read jar file " + frameworkPath, e );
-			} catch (ModelElementFactoryException e) {
-				BldCore.error( "Failed to build bundle " + frameworkPath , e );
-			} catch (RuntimeException e) {
-				BldCore.error( "Failed to build bundle " + frameworkPath , e );
-			}
-			finally {
-				if (jar != null) {
-					try {
-						jar.close();
-					} catch (IOException e) {
-						BldCore.error( "Failed to close jar file", e );
-					}
-				}
-			}
-		}
-		
-		return systemBundle;
-	}
-
-	private void applyProfile(IBundleModelElement info) {
-		if (packages != null) {
-			for (String name : packages.split(",\\s*")) {
-				IPackageExport pe = ModelElementFactory.getInstance().newModelElement(IPackageExport.class);
-				pe.setPackageName(name);
-				info.addExport(pe);
-			}
-		}
-	}
-
-	public synchronized void refresh() {
-		systemBundle = null;
-		notifyChange();
-	}
+    public SystemRepository( String id, IPath frameworkPath, String packages )
+    {
+        super( id );
+        this.frameworkPath = frameworkPath;
+        this.packages = packages;
+    }
+
+    private static ISigilBundle systemBundle;
+
+
+    @Override
+    public void accept( IRepositoryVisitor visitor, int options )
+    {
+        ISigilBundle bundle = loadSystemBundle();
+
+        if ( bundle != null )
+        {
+            visitor.visit( bundle );
+        }
+    }
+
+
+    private synchronized ISigilBundle loadSystemBundle()
+    {
+        if ( systemBundle == null )
+        {
+            systemBundle = ModelElementFactory.getInstance().newModelElement( ISigilBundle.class );
+
+            JarFile jar = null;
+
+            try
+            {
+                final IBundleModelElement info;
+                if ( frameworkPath != null )
+                {
+                    systemBundle.setLocation( frameworkPath );
+                    jar = new JarFile( frameworkPath.toFile() );
+                    info = buildBundleModelElement( jar.getManifest() );
+                }
+                else
+                {
+                    info = ModelElementFactory.getInstance().newModelElement( IBundleModelElement.class );
+                }
+
+                applyProfile( info );
+                systemBundle.addChild( info );
+            }
+            catch ( IOException e )
+            {
+                BldCore.error( "Failed to read jar file " + frameworkPath, e );
+            }
+            catch ( ModelElementFactoryException e )
+            {
+                BldCore.error( "Failed to build bundle " + frameworkPath, e );
+            }
+            catch ( RuntimeException e )
+            {
+                BldCore.error( "Failed to build bundle " + frameworkPath, e );
+            }
+            finally
+            {
+                if ( jar != null )
+                {
+                    try
+                    {
+                        jar.close();
+                    }
+                    catch ( IOException e )
+                    {
+                        BldCore.error( "Failed to close jar file", e );
+                    }
+                }
+            }
+        }
+
+        return systemBundle;
+    }
+
+
+    private void applyProfile( IBundleModelElement info )
+    {
+        if ( packages != null )
+        {
+            for ( String name : packages.split( ",\\s*" ) )
+            {
+                IPackageExport pe = ModelElementFactory.getInstance().newModelElement( IPackageExport.class );
+                pe.setPackageName( name );
+                info.addExport( pe );
+            }
+        }
+    }
+
+
+    public synchronized void refresh()
+    {
+        systemBundle = null;
+        notifyChange();
+    }
 }

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/core/repository/SystemRepositoryProvider.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/core/repository/SystemRepositoryProvider.java?rev=796467&r1=796466&r2=796467&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/core/repository/SystemRepositoryProvider.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/core/repository/SystemRepositoryProvider.java Tue Jul 21 18:51:33 2009
@@ -19,6 +19,7 @@
 
 package org.apache.felix.sigil.core.repository;
 
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Properties;
@@ -28,42 +29,50 @@
 import org.apache.felix.sigil.repository.RepositoryException;
 import org.eclipse.core.runtime.Path;
 
-public class SystemRepositoryProvider implements IRepositoryProvider {
 
-	public IBundleRepository createRepository(String id, Properties properties)
-			throws RepositoryException {
-		String fw = properties.getProperty("framework");
-		Path frameworkPath = fw == null ? null : new Path(fw);
-		String extraPkgs = properties.getProperty("packages");
-		String profile = properties.getProperty("profile");
-		
-		try {
-			Properties p = readProfile(profile);
-    		String pkgs = p.getProperty("org.osgi.framework.system.packages") + "," + extraPkgs;
-			return new SystemRepository(id, frameworkPath, pkgs);
-		} catch (IOException e) {
-			throw new RepositoryException("Failed to load profile", e);
-		}
-	}
-	
-	public static Properties readProfile(String name) throws IOException {
-		if (name == null) {
-			String version = System.getProperty("java.specification.version");
-			String[] split = version.split("\\.");
-			String prefix = ("6".compareTo(split[1]) <= 0) ? "JavaSE-" : "J2SE-";
-			name = prefix + version;
-		}
-		
-		String profilePath = "profiles/" + name + ".profile";
-		InputStream in = SystemRepositoryProvider.class.getClassLoader().getResourceAsStream(profilePath);
-		
-		if (in == null)
-			throw new IOException("No such profile: " + profilePath);
-		
-		Properties p = new Properties();
-		p.load(in);
-		
-		return p;
-	}
-	
+public class SystemRepositoryProvider implements IRepositoryProvider
+{
+
+    public IBundleRepository createRepository( String id, Properties properties ) throws RepositoryException
+    {
+        String fw = properties.getProperty( "framework" );
+        Path frameworkPath = fw == null ? null : new Path( fw );
+        String extraPkgs = properties.getProperty( "packages" );
+        String profile = properties.getProperty( "profile" );
+
+        try
+        {
+            Properties p = readProfile( profile );
+            String pkgs = p.getProperty( "org.osgi.framework.system.packages" ) + "," + extraPkgs;
+            return new SystemRepository( id, frameworkPath, pkgs );
+        }
+        catch ( IOException e )
+        {
+            throw new RepositoryException( "Failed to load profile", e );
+        }
+    }
+
+
+    public static Properties readProfile( String name ) throws IOException
+    {
+        if ( name == null )
+        {
+            String version = System.getProperty( "java.specification.version" );
+            String[] split = version.split( "\\." );
+            String prefix = ( "6".compareTo( split[1] ) <= 0 ) ? "JavaSE-" : "J2SE-";
+            name = prefix + version;
+        }
+
+        String profilePath = "profiles/" + name + ".profile";
+        InputStream in = SystemRepositoryProvider.class.getClassLoader().getResourceAsStream( profilePath );
+
+        if ( in == null )
+            throw new IOException( "No such profile: " + profilePath );
+
+        Properties p = new Properties();
+        p.load( in );
+
+        return p;
+    }
+
 }

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/core/util/QuoteUtil.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/core/util/QuoteUtil.java?rev=796467&r1=796466&r2=796467&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/core/util/QuoteUtil.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/core/util/QuoteUtil.java Tue Jul 21 18:51:33 2009
@@ -19,35 +19,43 @@
 
 package org.apache.felix.sigil.core.util;
 
+
 import java.util.ArrayList;
 
-public class QuoteUtil {
-	public static String[] split(String str) {
-		ArrayList<String> split = new ArrayList<String>();
-		boolean quote = false;
-		StringBuffer buf = new StringBuffer(str.length());
-		
-		for ( int i = 0; i < str.length(); i++ ) {
-			char c = str.charAt(i);
-			switch ( c ) {
-			case '"':
-				quote = !quote;
-				break;
-			case ',':
-				if ( !quote ) {
-					split.add( buf.toString().trim() );
-					buf.setLength(0);
-					break;
-				}
-				// else fall through on purpose
-			default:
-				buf.append( c );
-			}
-		}
-		
-		if ( buf.length() > 0 ) {
-			split.add( buf.toString().trim() );
-		}
-		return split.toArray( new String[split.size()] );
-	}	
+
+public class QuoteUtil
+{
+    public static String[] split( String str )
+    {
+        ArrayList<String> split = new ArrayList<String>();
+        boolean quote = false;
+        StringBuffer buf = new StringBuffer( str.length() );
+
+        for ( int i = 0; i < str.length(); i++ )
+        {
+            char c = str.charAt( i );
+            switch ( c )
+            {
+                case '"':
+                    quote = !quote;
+                    break;
+                case ',':
+                    if ( !quote )
+                    {
+                        split.add( buf.toString().trim() );
+                        buf.setLength( 0 );
+                        break;
+                    }
+                    // else fall through on purpose
+                default:
+                    buf.append( c );
+            }
+        }
+
+        if ( buf.length() > 0 )
+        {
+            split.add( buf.toString().trim() );
+        }
+        return split.toArray( new String[split.size()] );
+    }
 }

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/AbstractCompoundModelElement.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/AbstractCompoundModelElement.java?rev=796467&r1=796466&r2=796467&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/AbstractCompoundModelElement.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/AbstractCompoundModelElement.java Tue Jul 21 18:51:33 2009
@@ -19,95 +19,125 @@
 
 package org.apache.felix.sigil.model;
 
+
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
 
-public abstract class AbstractCompoundModelElement extends AbstractModelElement implements ICompoundModelElement {
+public abstract class AbstractCompoundModelElement extends AbstractModelElement implements ICompoundModelElement
+{
+
+    private static final long serialVersionUID = 1L;
+
 
-	private static final long serialVersionUID = 1L;
-	
-	public AbstractCompoundModelElement(String description) {
-		super(description);
-	}
-
-	public boolean addChild(IModelElement child) throws InvalidModelException {
-		return support.addChild(child);
-	}
-
-	public boolean removeChild(IModelElement child) {
-		return support.removeChild(child);
-	}
-
-	public IModelElement[] children() {
-		return support.children();
-	}
-	
-	private static final ThreadLocal<Map<IModelWalker,Set<IModelElement>>> walkedLocal = new ThreadLocal<Map<IModelWalker,Set<IModelElement>>>();
-	
-	public void visit(IModelWalker walker) {
-		if ( walker.visit( this ) ) {
-			Map<IModelWalker,Set<IModelElement>> walked = walkedLocal.get();
-			boolean delete = false;
-			
-			if ( walked == null ) {
-				walked = new HashMap<IModelWalker, Set<IModelElement>>();
-				walkedLocal.set(walked);
-			}
-
-			Set<IModelElement> check = walked.get(walker);
-			
-			if ( check == null ) {
-				delete = true;
-				check = new HashSet<IModelElement>(); 
-			}
-			
-			check.add( this );
-			
-			try {
-				for ( IModelElement e : children() ) {
-					if ( !check.contains( e ) && walker.visit( e ) ) {
-						check.add( e );
-						if ( e instanceof ICompoundModelElement ) {
-							ICompoundModelElement c = (ICompoundModelElement) e;
-							c.visit(walker);
-						}
-					}
-				}
-			}
-			finally {
-				if ( delete ) {
-					walked.remove(walker);
-					
-					if ( walked.isEmpty() ) {
-						walkedLocal.set( null );
-					}
-				}
-			}
-		}
-	}
-
-	public Set<Class<? extends IModelElement>> getOptionalChildren() {
-		return support.getChildrenTypes(false);
-	}
-
-	public Set<Class<? extends IModelElement>> getRequiredChildren() {
-		return support.getChildrenTypes(true);
-	}
-
-	public <T extends IModelElement> T[] childrenOfType(Class<T> type) {
-		return support.childrenOfType( type );
-	}
-
-
-	@Override
-	public void checkValid() throws InvalidModelException {
-		super.checkValid();
-		
-		for ( IModelElement e : support.children() ) {
-			e.checkValid();
-		}
-	}	
+    public AbstractCompoundModelElement( String description )
+    {
+        super( description );
+    }
+
+
+    public boolean addChild( IModelElement child ) throws InvalidModelException
+    {
+        return support.addChild( child );
+    }
+
+
+    public boolean removeChild( IModelElement child )
+    {
+        return support.removeChild( child );
+    }
+
+
+    public IModelElement[] children()
+    {
+        return support.children();
+    }
+
+    private static final ThreadLocal<Map<IModelWalker, Set<IModelElement>>> walkedLocal = new ThreadLocal<Map<IModelWalker, Set<IModelElement>>>();
+
+
+    public void visit( IModelWalker walker )
+    {
+        if ( walker.visit( this ) )
+        {
+            Map<IModelWalker, Set<IModelElement>> walked = walkedLocal.get();
+            boolean delete = false;
+
+            if ( walked == null )
+            {
+                walked = new HashMap<IModelWalker, Set<IModelElement>>();
+                walkedLocal.set( walked );
+            }
+
+            Set<IModelElement> check = walked.get( walker );
+
+            if ( check == null )
+            {
+                delete = true;
+                check = new HashSet<IModelElement>();
+            }
+
+            check.add( this );
+
+            try
+            {
+                for ( IModelElement e : children() )
+                {
+                    if ( !check.contains( e ) && walker.visit( e ) )
+                    {
+                        check.add( e );
+                        if ( e instanceof ICompoundModelElement )
+                        {
+                            ICompoundModelElement c = ( ICompoundModelElement ) e;
+                            c.visit( walker );
+                        }
+                    }
+                }
+            }
+            finally
+            {
+                if ( delete )
+                {
+                    walked.remove( walker );
+
+                    if ( walked.isEmpty() )
+                    {
+                        walkedLocal.set( null );
+                    }
+                }
+            }
+        }
+    }
+
+
+    public Set<Class<? extends IModelElement>> getOptionalChildren()
+    {
+        return support.getChildrenTypes( false );
+    }
+
+
+    public Set<Class<? extends IModelElement>> getRequiredChildren()
+    {
+        return support.getChildrenTypes( true );
+    }
+
+
+    public <T extends IModelElement> T[] childrenOfType( Class<T> type )
+    {
+        return support.childrenOfType( type );
+    }
+
+
+    @Override
+    public void checkValid() throws InvalidModelException
+    {
+        super.checkValid();
+
+        for ( IModelElement e : support.children() )
+        {
+            e.checkValid();
+        }
+    }
 }

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/AbstractModelElement.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/AbstractModelElement.java?rev=796467&r1=796466&r2=796467&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/AbstractModelElement.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/AbstractModelElement.java Tue Jul 21 18:51:33 2009
@@ -19,6 +19,7 @@
 
 package org.apache.felix.sigil.model;
 
+
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.HashMap;
@@ -26,129 +27,175 @@
 import java.util.Set;
 
 
-public abstract class AbstractModelElement implements IModelElement {
-	
-	private static final long serialVersionUID = 1L;
+public abstract class AbstractModelElement implements IModelElement
+{
+
+    private static final long serialVersionUID = 1L;
+
+    private IModelElement parent;
 
-	private IModelElement parent;
-	
     private String description;
     private transient Map<Object, Object> meta;
     private Map<Serializable, Serializable> serializedMeta;
     private OverrideOptions override;
-    
+
     protected final ModelElementSupport support;
 
-    public AbstractModelElement(String description) {
-    	support = new ModelElementSupport(this);
-    	this.description = description.intern();
+
+    public AbstractModelElement( String description )
+    {
+        support = new ModelElementSupport( this );
+        this.description = description.intern();
         this.meta = new HashMap<Object, Object>();
         this.serializedMeta = new HashMap<Serializable, Serializable>();
     }
 
-    public String getElementDescription() {
+
+    public String getElementDescription()
+    {
         return description;
     }
 
-    public Map<Object, Object> getMeta() {
+
+    public Map<Object, Object> getMeta()
+    {
         return meta;
     }
 
-    public void setMeta(Map<Object, Object> meta) {
+
+    public void setMeta( Map<Object, Object> meta )
+    {
         this.meta = meta;
     }
 
+
     @Override
-    public AbstractModelElement clone() {
-		try {
-	        AbstractModelElement clone = (AbstractModelElement) super.clone();
-	   
-	        clone.meta = new HashMap<Object, Object>(meta);
-
-	        return clone;
-		} catch (CloneNotSupportedException e) {
-			// can't happen but make compiler happy
-			throw new IllegalStateException(e);
-		}
+    public AbstractModelElement clone()
+    {
+        try
+        {
+            AbstractModelElement clone = ( AbstractModelElement ) super.clone();
+
+            clone.meta = new HashMap<Object, Object>( meta );
+
+            return clone;
+        }
+        catch ( CloneNotSupportedException e )
+        {
+            // can't happen but make compiler happy
+            throw new IllegalStateException( e );
+        }
     }
 
+
     @SuppressWarnings("unchecked")
-	public <T extends IModelElement> T getAncestor(Class<T> type) {
-    	IModelElement parent = this.parent;
-    	
-    	while ( parent != null ) {
-    		if ( type.isInstance( parent ) ) {
-    			return (T) parent;
-    		}
-    		parent = parent.getParent();
-    	}
-    	
-		return null;
-	}
-
-	public IModelElement getParent() {
-		return parent;
-	}
-	
-	public void setParent( IModelElement parent ) {
-		if ( parent != null ) {
-			if ( this.parent != null && this.parent != parent ) {
-				throw new IllegalStateException( "Parent already installed");
-			}
-		}
-		
-		this.parent = parent;
-	}
-	
-    public void checkValid() throws InvalidModelException {
-    	for ( String req : getRequiredProperties() ) {
-    		try {
-				if ( getProperty( req ) == null ) {
-					throw new InvalidModelException(this, "Missing property " + req );
-				}
-			} catch (NoSuchMethodException e) {
-				throw new InvalidModelException( this, "No such property " + req );
-			}
-    	}
-	}
-
-	public Object getProperty(String name) throws NoSuchMethodException {
-		return support.getProperty(name);
-	}
-
-	public void setProperty(String name, Object value)
-			throws NoSuchMethodException {
-		support.setProperty(name, value);
-	}
-
-	public void addProperty(String name, Object value)
-			throws NoSuchMethodException {
-		support.addProperty(name, value);
-	}
-
-	public void removeProperty(String name, Object value)
-			throws NoSuchMethodException {
-		support.removeProperty(name, value);
-	}
-
-	public Object getDefaultPropertyValue(String name) {
-		return support.getDefaultPropertyValue( name );
-	}
-
-	public Set<String> getPropertyNames() {
-		return support.getPropertyNames();
-	}
-
-	public Set<String> getRequiredProperties() {
-		return Collections.emptySet();
-	}
+    public <T extends IModelElement> T getAncestor( Class<T> type )
+    {
+        IModelElement parent = this.parent;
+
+        while ( parent != null )
+        {
+            if ( type.isInstance( parent ) )
+            {
+                return ( T ) parent;
+            }
+            parent = parent.getParent();
+        }
 
-	protected Object writeReplace() {
+        return null;
+    }
+
+
+    public IModelElement getParent()
+    {
+        return parent;
+    }
+
+
+    public void setParent( IModelElement parent )
+    {
+        if ( parent != null )
+        {
+            if ( this.parent != null && this.parent != parent )
+            {
+                throw new IllegalStateException( "Parent already installed" );
+            }
+        }
+
+        this.parent = parent;
+    }
+
+
+    public void checkValid() throws InvalidModelException
+    {
+        for ( String req : getRequiredProperties() )
+        {
+            try
+            {
+                if ( getProperty( req ) == null )
+                {
+                    throw new InvalidModelException( this, "Missing property " + req );
+                }
+            }
+            catch ( NoSuchMethodException e )
+            {
+                throw new InvalidModelException( this, "No such property " + req );
+            }
+        }
+    }
+
+
+    public Object getProperty( String name ) throws NoSuchMethodException
+    {
+        return support.getProperty( name );
+    }
+
+
+    public void setProperty( String name, Object value ) throws NoSuchMethodException
+    {
+        support.setProperty( name, value );
+    }
+
+
+    public void addProperty( String name, Object value ) throws NoSuchMethodException
+    {
+        support.addProperty( name, value );
+    }
+
+
+    public void removeProperty( String name, Object value ) throws NoSuchMethodException
+    {
+        support.removeProperty( name, value );
+    }
+
+
+    public Object getDefaultPropertyValue( String name )
+    {
+        return support.getDefaultPropertyValue( name );
+    }
+
+
+    public Set<String> getPropertyNames()
+    {
+        return support.getPropertyNames();
+    }
+
+
+    public Set<String> getRequiredProperties()
+    {
+        return Collections.emptySet();
+    }
+
+
+    protected Object writeReplace()
+    {
         AbstractModelElement clone = clone();
 
-        for (Map.Entry<Object, Object> e : clone.meta.entrySet()) {
-            if (e.getKey() instanceof Serializable && e.getValue() instanceof Serializable) {
-                serializedMeta.put((Serializable) e.getKey(), (Serializable) e.getValue());
+        for ( Map.Entry<Object, Object> e : clone.meta.entrySet() )
+        {
+            if ( e.getKey() instanceof Serializable && e.getValue() instanceof Serializable )
+            {
+                serializedMeta.put( ( Serializable ) e.getKey(), ( Serializable ) e.getValue() );
             }
         }
 
@@ -157,21 +204,29 @@
         return clone;
     }
 
-    public Class<?> getPropertyType(String name) throws NoSuchMethodException {
-		return support.getPropertyType(name);
-	}
 
-	protected Object readResolve() {
-        this.meta = new HashMap<Object, Object>(serializedMeta);
+    public Class<?> getPropertyType( String name ) throws NoSuchMethodException
+    {
+        return support.getPropertyType( name );
+    }
+
+
+    protected Object readResolve()
+    {
+        this.meta = new HashMap<Object, Object>( serializedMeta );
         serializedMeta.clear();
         return this;
     }
 
-	public OverrideOptions getOverride() {
-		return override;
-	}
-
-	public void setOverride(OverrideOptions override) {
-		this.override = override;
-	}
+
+    public OverrideOptions getOverride()
+    {
+        return override;
+    }
+
+
+    public void setOverride( OverrideOptions override )
+    {
+        this.override = override;
+    }
 }

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/ICompoundModelElement.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/ICompoundModelElement.java?rev=796467&r1=796466&r2=796467&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/ICompoundModelElement.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/ICompoundModelElement.java Tue Jul 21 18:51:33 2009
@@ -19,20 +19,29 @@
 
 package org.apache.felix.sigil.model;
 
+
 import java.util.Set;
 
-public interface ICompoundModelElement extends IModelElement {
-    boolean addChild(IModelElement children) throws InvalidModelException;
-    
-    boolean removeChild(IModelElement children);
-    
+
+public interface ICompoundModelElement extends IModelElement
+{
+    boolean addChild( IModelElement children ) throws InvalidModelException;
+
+
+    boolean removeChild( IModelElement children );
+
+
     IModelElement[] children();
-    
-    void visit(IModelWalker walker);
-    
+
+
+    void visit( IModelWalker walker );
+
+
     <T extends IModelElement> T[] childrenOfType( Class<T> type );
-    
+
+
     Set<Class<? extends IModelElement>> getRequiredChildren();
-    
-    Set<Class<? extends IModelElement>> getOptionalChildren();    
+
+
+    Set<Class<? extends IModelElement>> getOptionalChildren();
 }
\ No newline at end of file

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IDependency.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IDependency.java?rev=796467&r1=796466&r2=796467&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IDependency.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IDependency.java Tue Jul 21 18:51:33 2009
@@ -19,6 +19,8 @@
 
 package org.apache.felix.sigil.model;
 
-public interface IDependency extends IModelElement {
-	IDependent getDependent();
+
+public interface IDependency extends IModelElement
+{
+    IDependent getDependent();
 }

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IDependent.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IDependent.java?rev=796467&r1=796466&r2=796467&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IDependent.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IDependent.java Tue Jul 21 18:51:33 2009
@@ -19,6 +19,8 @@
 
 package org.apache.felix.sigil.model;
 
-public interface IDependent extends IModelElement {
-	IDependency getDepender();
+
+public interface IDependent extends IModelElement
+{
+    IDependency getDepender();
 }

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IDependentModelElement.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IDependentModelElement.java?rev=796467&r1=796466&r2=796467&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IDependentModelElement.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IDependentModelElement.java Tue Jul 21 18:51:33 2009
@@ -19,19 +19,23 @@
 
 package org.apache.felix.sigil.model;
 
-public interface IDependentModelElement extends IModelElement {
+
+public interface IDependentModelElement extends IModelElement
+{
     /**
      * @return
      */
     IDependency[] getDependencies();
-    
+
+
     /**
      * @param dependency
      */
-    void addDependency(IModelElement dependency);
-    
+    void addDependency( IModelElement dependency );
+
+
     /**
      * @param dependency
      */
-    void removeDependency(IModelElement dependency);
+    void removeDependency( IModelElement dependency );
 }

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IModelElement.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IModelElement.java?rev=796467&r1=796466&r2=796467&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IModelElement.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IModelElement.java Tue Jul 21 18:51:33 2009
@@ -19,9 +19,11 @@
 
 package org.apache.felix.sigil.model;
 
+
 import java.util.Map;
 import java.util.Set;
 
+
 /**
  * Descriptors represent static information about component, composite or system. They allow other services to decide
  * how to deal with the given entity without the need to directly interact with the entity.
@@ -29,14 +31,16 @@
  * @author dave
  * 
  */
-public interface IModelElement extends Cloneable {
+public interface IModelElement extends Cloneable
+{
     /**
      * A brief human readable description of the component, composite or system.
      * 
      * @return
      */
     String getElementDescription();
-    
+
+
     /**
      * A set of key value pairs designed for use by a machine to classify a particular component, composite or system.
      * 
@@ -44,13 +48,15 @@
      */
     Map<Object, Object> getMeta();
 
+
     /**
      * Set meta data on this descriptor. Meta data is designed for use by a machine to classify or further enhance a
      * particular component, composite or system.
      * 
      * @param meta
      */
-    void setMeta(Map<Object, Object> meta);
+    void setMeta( Map<Object, Object> meta );
+
 
     /**
      * Check to see if this descriptor defines a complete set of properties. The definition of what constitutes a
@@ -59,15 +65,18 @@
      * @throws InvalidModelException
      */
     void checkValid() throws InvalidModelException;
-    
+
+
     /**
      * Find the parent element of this model element or null if no parent exists.
      * @return
      */
     IModelElement getParent();
-    
+
+
     void setParent( IModelElement parent );
-        
+
+
     /**
      * Finds the first ancestor up the hierarch of parents which is an instance of the specified
      * type.
@@ -75,24 +84,33 @@
      * @param type
      * @return
      */
-    <T extends IModelElement> T getAncestor(Class<T> type);
-    
+    <T extends IModelElement> T getAncestor( Class<T> type );
+
+
     IModelElement clone();
-    
+
+
     Set<String> getPropertyNames();
-    
-    void setProperty(String name, Object value) throws NoSuchMethodException;
-    
-	void addProperty(String name, Object value) throws NoSuchMethodException;
-	
-	void removeProperty(String name, Object value) throws NoSuchMethodException;
-	
-    Object getProperty(String name) throws NoSuchMethodException;
-    
-    Object getDefaultPropertyValue(String name);
-    
+
+
+    void setProperty( String name, Object value ) throws NoSuchMethodException;
+
+
+    void addProperty( String name, Object value ) throws NoSuchMethodException;
+
+
+    void removeProperty( String name, Object value ) throws NoSuchMethodException;
+
+
+    Object getProperty( String name ) throws NoSuchMethodException;
+
+
+    Object getDefaultPropertyValue( String name );
+
+
     Set<String> getRequiredProperties();
 
-	Class<?> getPropertyType(String name) throws NoSuchMethodException;
+
+    Class<?> getPropertyType( String name ) throws NoSuchMethodException;
 
 }

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IModelInfo.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IModelInfo.java?rev=796467&r1=796466&r2=796467&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IModelInfo.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IModelInfo.java Tue Jul 21 18:51:33 2009
@@ -19,8 +19,14 @@
 
 package org.apache.felix.sigil.model;
 
-public interface IModelInfo {
-	String getGroupName();
-	String getGroupURI();
-	String getName();
+
+public interface IModelInfo
+{
+    String getGroupName();
+
+
+    String getGroupURI();
+
+
+    String getName();
 }

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IModelWalker.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IModelWalker.java?rev=796467&r1=796466&r2=796467&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IModelWalker.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IModelWalker.java Tue Jul 21 18:51:33 2009
@@ -20,6 +20,7 @@
 package org.apache.felix.sigil.model;
 
 
-public interface IModelWalker {
-	boolean visit( IModelElement element );
+public interface IModelWalker
+{
+    boolean visit( IModelElement element );
 }

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/INamedModelElement.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/INamedModelElement.java?rev=796467&r1=796466&r2=796467&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/INamedModelElement.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/INamedModelElement.java Tue Jul 21 18:51:33 2009
@@ -19,9 +19,17 @@
 
 package org.apache.felix.sigil.model;
 
-public interface INamedModelElement extends IModelElement {
-	void setName(String name);
-	String getName();
+
+public interface INamedModelElement extends IModelElement
+{
+    void setName( String name );
+
+
+    String getName();
+
+
     OverrideOptions getOverride();
-    void setOverride(OverrideOptions override);	
+
+
+    void setOverride( OverrideOptions override );
 }

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IRequirementModelElement.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IRequirementModelElement.java?rev=796467&r1=796466&r2=796467&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IRequirementModelElement.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/IRequirementModelElement.java Tue Jul 21 18:51:33 2009
@@ -19,6 +19,8 @@
 
 package org.apache.felix.sigil.model;
 
-public interface IRequirementModelElement {
-	boolean accepts(IModelElement provider);
+
+public interface IRequirementModelElement
+{
+    boolean accepts( IModelElement provider );
 }

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/InvalidModelException.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/InvalidModelException.java?rev=796467&r1=796466&r2=796467&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/InvalidModelException.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/InvalidModelException.java Tue Jul 21 18:51:33 2009
@@ -19,27 +19,35 @@
 
 package org.apache.felix.sigil.model;
 
+
 /**
  * @author dave
  * 
  */
-public class InvalidModelException extends RuntimeException {
-	
-	private static final long serialVersionUID = 1L;
-	
-	private IModelElement target;
-	
-    public InvalidModelException(IModelElement target, String msg) {
-        super(msg);
+public class InvalidModelException extends RuntimeException
+{
+
+    private static final long serialVersionUID = 1L;
+
+    private IModelElement target;
+
+
+    public InvalidModelException( IModelElement target, String msg )
+    {
+        super( msg );
         this.target = target;
     }
 
-    public InvalidModelException(IModelElement target, String msg, Throwable t) {
-        super(msg, t);
+
+    public InvalidModelException( IModelElement target, String msg, Throwable t )
+    {
+        super( msg, t );
         this.target = target;
     }
-    
-    public IModelElement getTarget() {
-    	return target;
+
+
+    public IModelElement getTarget()
+    {
+        return target;
     }
 }

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/ModelElementFactory.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/ModelElementFactory.java?rev=796467&r1=796466&r2=796467&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/ModelElementFactory.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/ModelElementFactory.java Tue Jul 21 18:51:33 2009
@@ -19,150 +19,213 @@
 
 package org.apache.felix.sigil.model;
 
+
 import java.util.HashMap;
 import java.util.Map;
 
-public abstract class ModelElementFactory {
-	static class ElementInfo {
-		Class<? extends IModelElement> implType;
-		String name;
-		String groupName;
-		String groupURI;
-		
-		public ElementInfo(Class<? extends IModelElement> implType, String name, String groupName, String groupURI) {
-			this.implType = implType;
-			this.name = name;
-			this.groupName = groupName;
-			this.groupURI = groupURI;
-		}
-		
-		public Class<? extends IModelElement> getImplType() {
-			return implType;
-		}
-		public String getName() {
-			return name;
-		}
-		
-		public String getGroupName() {
-			return groupName;
-		}
-
-		public String getGroupURI() {
-			return groupURI;
-		}
-		
-		public String toString() {
-			return "ElementInfo[" + name + ":" + groupName + ":" + groupURI + ":" + implType.getCanonicalName() + "]";
-		}
-	}
-
-	static class ModelInfo implements IModelInfo {
-
-		private ElementInfo e;
-		
-		public ModelInfo(ElementInfo e) {
-			this.e = e;
-		}
-
-		public String getGroupName() {
-			return e.getGroupName();
-		}
-
-		public String getGroupURI() {
-			return e.getGroupURI();
-		}
-
-		public String getName() {
-			return e.getName();
-		}
-
-	}
-
-	static class DefaultModelElementFactory extends ModelElementFactory {
-		private HashMap<Class<? extends IModelElement>, ElementInfo> elementInfo = new HashMap<Class<? extends IModelElement>, ElementInfo>();
-		
-		@SuppressWarnings("unchecked")
-		@Override
-		public <T extends IModelElement> T newModelElement( Class<T> type ) throws ModelElementFactoryException {
-			ElementInfo info = elementInfo.get( type );
-			if ( info == null ) {
-				throw new ModelElementFactoryException( "No implementation registered for " + type );
-			}
-			try {
-				return (T) info.getImplType().newInstance();
-			} catch (InstantiationException e) {
-				throw new ModelElementFactoryException(e);
-			} catch (IllegalAccessException e) {
-				throw new ModelElementFactoryException(e);
-			}
-		}
-
-		@Override
-		public <T extends IModelElement> void register(Class<T> type, Class<? extends T> impl, String name, String groupName, String groupURI ) {
-			elementInfo.put( type, new ElementInfo( impl, name, groupName, groupURI ) );
-		}
-
-		@Override
-		public <T extends IModelElement> void unregister(Class<T> type,
-				Class<? extends T> impl) {
-			ElementInfo info = elementInfo.get( type );
-			if ( info != null && info.getImplType() == impl ) {
-				elementInfo.remove(type);
-			}
-		}
-
-		@Override
-		public IModelInfo getModelInfo(Class<? extends IModelElement> type) {
-			ElementInfo e = findElementInfo( type );
-			
-			if ( e == null ) {
-				return null;
-			}
-			
-			return new ModelInfo( e );
-		}
-
-		@Override
-		public IModelElement newModelElement(String namespaceURI, String localPart) throws ModelElementFactoryException {
-			for ( Map.Entry<Class<? extends IModelElement>, ElementInfo> e : elementInfo.entrySet() ) {
-				ElementInfo i = e.getValue();
-				if ( equal( namespaceURI, i.getGroupURI() ) && equal( i.getName(), localPart ) ) {
-					return newModelElement(e.getKey());
-				}
-			}
-			
-			return null;
-		}
-
-		private boolean equal(String val1, String val2) {
-			return val1 == null ? val2 == null : val1.equals( val2 );
-		}
-
-		private ElementInfo findElementInfo( Class<? extends IModelElement> type ) {
-			for ( ElementInfo e : elementInfo.values() ) {
-				if ( e.getImplType() == type ) {
-					return e;
-				}
-			}
-			
-			return null;
-		}
-
-	}
-
-	public abstract <T extends IModelElement> T newModelElement( Class<T> type ) throws ModelElementFactoryException;
-	
-	public abstract IModelElement newModelElement(String namespaceURI, String localPart) throws ModelElementFactoryException;	
-	
-	public abstract <T extends IModelElement> void register( Class<T> type, Class<? extends T> impl, String name, String groupName, String groupURI );
-	
-	public abstract <T extends IModelElement> void unregister( Class<T> type, Class<? extends T> impl );
-
-	public abstract IModelInfo getModelInfo( Class<? extends IModelElement> type );
-	
-	private static ModelElementFactory instance = new DefaultModelElementFactory();
-
-	public static ModelElementFactory getInstance() {
-		return instance;
-	}
+
+public abstract class ModelElementFactory
+{
+    static class ElementInfo
+    {
+        Class<? extends IModelElement> implType;
+        String name;
+        String groupName;
+        String groupURI;
+
+
+        public ElementInfo( Class<? extends IModelElement> implType, String name, String groupName, String groupURI )
+        {
+            this.implType = implType;
+            this.name = name;
+            this.groupName = groupName;
+            this.groupURI = groupURI;
+        }
+
+
+        public Class<? extends IModelElement> getImplType()
+        {
+            return implType;
+        }
+
+
+        public String getName()
+        {
+            return name;
+        }
+
+
+        public String getGroupName()
+        {
+            return groupName;
+        }
+
+
+        public String getGroupURI()
+        {
+            return groupURI;
+        }
+
+
+        public String toString()
+        {
+            return "ElementInfo[" + name + ":" + groupName + ":" + groupURI + ":" + implType.getCanonicalName() + "]";
+        }
+    }
+
+    static class ModelInfo implements IModelInfo
+    {
+
+        private ElementInfo e;
+
+
+        public ModelInfo( ElementInfo e )
+        {
+            this.e = e;
+        }
+
+
+        public String getGroupName()
+        {
+            return e.getGroupName();
+        }
+
+
+        public String getGroupURI()
+        {
+            return e.getGroupURI();
+        }
+
+
+        public String getName()
+        {
+            return e.getName();
+        }
+
+    }
+
+    static class DefaultModelElementFactory extends ModelElementFactory
+    {
+        private HashMap<Class<? extends IModelElement>, ElementInfo> elementInfo = new HashMap<Class<? extends IModelElement>, ElementInfo>();
+
+
+        @SuppressWarnings("unchecked")
+        @Override
+        public <T extends IModelElement> T newModelElement( Class<T> type ) throws ModelElementFactoryException
+        {
+            ElementInfo info = elementInfo.get( type );
+            if ( info == null )
+            {
+                throw new ModelElementFactoryException( "No implementation registered for " + type );
+            }
+            try
+            {
+                return ( T ) info.getImplType().newInstance();
+            }
+            catch ( InstantiationException e )
+            {
+                throw new ModelElementFactoryException( e );
+            }
+            catch ( IllegalAccessException e )
+            {
+                throw new ModelElementFactoryException( e );
+            }
+        }
+
+
+        @Override
+        public <T extends IModelElement> void register( Class<T> type, Class<? extends T> impl, String name,
+            String groupName, String groupURI )
+        {
+            elementInfo.put( type, new ElementInfo( impl, name, groupName, groupURI ) );
+        }
+
+
+        @Override
+        public <T extends IModelElement> void unregister( Class<T> type, Class<? extends T> impl )
+        {
+            ElementInfo info = elementInfo.get( type );
+            if ( info != null && info.getImplType() == impl )
+            {
+                elementInfo.remove( type );
+            }
+        }
+
+
+        @Override
+        public IModelInfo getModelInfo( Class<? extends IModelElement> type )
+        {
+            ElementInfo e = findElementInfo( type );
+
+            if ( e == null )
+            {
+                return null;
+            }
+
+            return new ModelInfo( e );
+        }
+
+
+        @Override
+        public IModelElement newModelElement( String namespaceURI, String localPart )
+            throws ModelElementFactoryException
+        {
+            for ( Map.Entry<Class<? extends IModelElement>, ElementInfo> e : elementInfo.entrySet() )
+            {
+                ElementInfo i = e.getValue();
+                if ( equal( namespaceURI, i.getGroupURI() ) && equal( i.getName(), localPart ) )
+                {
+                    return newModelElement( e.getKey() );
+                }
+            }
+
+            return null;
+        }
+
+
+        private boolean equal( String val1, String val2 )
+        {
+            return val1 == null ? val2 == null : val1.equals( val2 );
+        }
+
+
+        private ElementInfo findElementInfo( Class<? extends IModelElement> type )
+        {
+            for ( ElementInfo e : elementInfo.values() )
+            {
+                if ( e.getImplType() == type )
+                {
+                    return e;
+                }
+            }
+
+            return null;
+        }
+
+    }
+
+
+    public abstract <T extends IModelElement> T newModelElement( Class<T> type ) throws ModelElementFactoryException;
+
+
+    public abstract IModelElement newModelElement( String namespaceURI, String localPart )
+        throws ModelElementFactoryException;
+
+
+    public abstract <T extends IModelElement> void register( Class<T> type, Class<? extends T> impl, String name,
+        String groupName, String groupURI );
+
+
+    public abstract <T extends IModelElement> void unregister( Class<T> type, Class<? extends T> impl );
+
+
+    public abstract IModelInfo getModelInfo( Class<? extends IModelElement> type );
+
+    private static ModelElementFactory instance = new DefaultModelElementFactory();
+
+
+    public static ModelElementFactory getInstance()
+    {
+        return instance;
+    }
 }

Modified: felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/ModelElementFactoryException.java
URL: http://svn.apache.org/viewvc/felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/ModelElementFactoryException.java?rev=796467&r1=796466&r2=796467&view=diff
==============================================================================
--- felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/ModelElementFactoryException.java (original)
+++ felix/trunk/sigil/common/core/src/org/apache/felix/sigil/model/ModelElementFactoryException.java Tue Jul 21 18:51:33 2009
@@ -19,16 +19,22 @@
 
 package org.apache.felix.sigil.model;
 
-public class ModelElementFactoryException extends RuntimeException {
 
-	private static final long serialVersionUID = 1L;
+public class ModelElementFactoryException extends RuntimeException
+{
 
-	public ModelElementFactoryException(Throwable t) {
-		super(t);
-	}
+    private static final long serialVersionUID = 1L;
 
-	public ModelElementFactoryException(String msg) {
-		super(msg);
-	}
+
+    public ModelElementFactoryException( Throwable t )
+    {
+        super( t );
+    }
+
+
+    public ModelElementFactoryException( String msg )
+    {
+        super( msg );
+    }
 
 }