// Path: centrepoint/modules/model/src/main/java/com/effectivemaven/centrepoint/model/plugin/PanelItem.java
// public class PanelItem
// {
//     /** The label to display for the text or link. */
//     private final String name;
// 
//     /** The optional URL to link to. */
//     private final String url;
// 
//     public PanelItem( String name )
//     {
//         this.name = name;
//         this.url = null;
//     }
// 
//     public PanelItem( String name, String url )
//     {
//         this.name = name;
//         this.url = url;
//     }
// 
//     public String getName()
//     {
//         return name;
//     }
// 
//     public String getUrl()
//     {
//         return url;
//     }
// }
// 
// Path: centrepoint/modules/model/src/main/java/com/effectivemaven/centrepoint/model/plugin/PluginManager.java
// public interface PluginManager
// {
//     /**
//      * Retrieve all plugins available (whether they are configurable or not).
//      * 
//      * @return the list of plugins
//      */
//     Collection<PanelPlugin> getPlugins();
// 
//     /**
//      * Retrieve all plugins available that take configuration options.
//      * 
//      * @return the list of configurable plugins
//      */
//     Collection<ConfigurablePanel<? extends ExtensionModel>> getConfigurablePlugins();
// 
//     /**
//      * Retrieve a specific configurable plugin, based on the ID of the configuration model.
//      * 
//      * @param id the ID of the plugin's configuration model, which should match the value of
//      *            {@link ConfigurablePanel#getId()}
//      * @return the plugin, or <tt>null</tt> if not found
//      */
//     ConfigurablePanel<? extends ExtensionModel> getConfigurablePlugin( String id );
// }
// 
// Path: centrepoint/modules/store-api/src/main/java/com/effectivemaven/centrepoint/store/ProjectStore.java
// public interface ProjectStore
// {
//     /**
//      * Retrieve all projects in their entirety.
//      * @return the project list
//      */
//     Collection<Project> getAllProjects();
// 
//     /**
//      * Retrieve a specific project.
//      * @param id the identifier of the project to retrieve
//      * @return the project, or <code>null</code> if not found
//      */
//     Project getProjectById( String id );
// 
//     /**
//      * Store the project. 
//      * @param project the project to store
//      */
//     void store( Project project );
// }


import com.effectivemaven.centrepoint.store.ProjectStore;
import com.google.inject.Inject;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.basic.MultiLineLabel;
import org.apache.wicket.markup.html.link.AbstractLink;
import org.apache.wicket.protocol.http.servlet.AbortWithHttpStatusException;
import com.effectivemaven.centrepoint.model.MavenCoordinates;
import com.effectivemaven.centrepoint.model.Project;
import com.effectivemaven.centrepoint.model.plugin.PanelItem;
import com.effectivemaven.centrepoint.model.plugin.PanelPlugin;
import com.effectivemaven.centrepoint.model.plugin.PluginManager;
        }

        final String id = parameters.getString( "id" );

        Project project = projectStore.getProjectById( id );
        if ( project == null )
        {
            throw new AbortWithHttpStatusException( 404, true );
        }

        setPageTitle( project.getName() );

        add( new Label( "name", project.getName() ) );
        add( new MultiLineLabel( "description", project.getDescription() ) );
        add( new Label( "version", project.getVersion() ) );
        add( new HideableExternalLink( "url", project.getUrl() ) );
        add( new HideableExternalLink( "scmUrl", project.getScmUrl() ) );
        add( new HideableExternalLink( "issueTrackerUrl", project.getIssueTrackerUrl() ) );

        MavenCoordinates coordinates = (MavenCoordinates) project.getExtensionModel( "maven" );
        if ( coordinates == null )
        {
            coordinates = new MavenCoordinates();
        }
        add( new Label( "maven|groupId", coordinates.getGroupId() ) );
        add( new Label( "maven|artifactId", coordinates.getArtifactId() ) );

        for ( PanelPlugin panel : pluginManager.getPlugins() )
        {
            List<AbstractLink> links = new ArrayList<AbstractLink>();
// Path: centrepoint/modules/model/src/main/java/com/effectivemaven/centrepoint/model/plugin/PanelItem.java
// public class PanelItem
// {
//     /** The label to display for the text or link. */
//     private final String name;
// 
//     /** The optional URL to link to. */
//     private final String url;
// 
//     public PanelItem( String name )
//     {
//         this.name = name;
//         this.url = null;
//     }
// 
//     public PanelItem( String name, String url )
//     {
//         this.name = name;
//         this.url = url;
//     }
// 
//     public String getName()
//     {
//         return name;
//     }
// 
//     public String getUrl()
//     {
//         return url;
//     }
// }
// 
// Path: centrepoint/modules/model/src/main/java/com/effectivemaven/centrepoint/model/plugin/PluginManager.java
// public interface PluginManager
// {
//     /**
//      * Retrieve all plugins available (whether they are configurable or not).
//      * 
//      * @return the list of plugins
//      */
//     Collection<PanelPlugin> getPlugins();
// 
//     /**
//      * Retrieve all plugins available that take configuration options.
//      * 
//      * @return the list of configurable plugins
//      */
//     Collection<ConfigurablePanel<? extends ExtensionModel>> getConfigurablePlugins();
// 
//     /**
//      * Retrieve a specific configurable plugin, based on the ID of the configuration model.
//      * 
//      * @param id the ID of the plugin's configuration model, which should match the value of
//      *            {@link ConfigurablePanel#getId()}
//      * @return the plugin, or <tt>null</tt> if not found
//      */
//     ConfigurablePanel<? extends ExtensionModel> getConfigurablePlugin( String id );
// }
// 
// Path: centrepoint/modules/store-api/src/main/java/com/effectivemaven/centrepoint/store/ProjectStore.java
// public interface ProjectStore
// {
//     /**
//      * Retrieve all projects in their entirety.
//      * @return the project list
//      */
//     Collection<Project> getAllProjects();
// 
//     /**
//      * Retrieve a specific project.
//      * @param id the identifier of the project to retrieve
//      * @return the project, or <code>null</code> if not found
//      */
//     Project getProjectById( String id );
// 
//     /**
//      * Store the project. 
//      * @param project the project to store
//      */
//     void store( Project project );
// }


// Path: centrepoint/modules/webapp/src/main/java/com/effectivemaven/centrepoint/web/ViewProjectPage.java
import com.effectivemaven.centrepoint.store.ProjectStore;
import com.google.inject.Inject;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.basic.MultiLineLabel;
import org.apache.wicket.markup.html.link.AbstractLink;
import org.apache.wicket.protocol.http.servlet.AbortWithHttpStatusException;
import com.effectivemaven.centrepoint.model.MavenCoordinates;
import com.effectivemaven.centrepoint.model.Project;
import com.effectivemaven.centrepoint.model.plugin.PanelItem;
import com.effectivemaven.centrepoint.model.plugin.PanelPlugin;
import com.effectivemaven.centrepoint.model.plugin.PluginManager;

        }

        final String id = parameters.getString( "id" );

        Project project = projectStore.getProjectById( id );
        if ( project == null )
        {
            throw new AbortWithHttpStatusException( 404, true );
        }

        setPageTitle( project.getName() );

        add( new Label( "name", project.getName() ) );
        add( new MultiLineLabel( "description", project.getDescription() ) );
        add( new Label( "version", project.getVersion() ) );
        add( new HideableExternalLink( "url", project.getUrl() ) );
        add( new HideableExternalLink( "scmUrl", project.getScmUrl() ) );
        add( new HideableExternalLink( "issueTrackerUrl", project.getIssueTrackerUrl() ) );

        MavenCoordinates coordinates = (MavenCoordinates) project.getExtensionModel( "maven" );
        if ( coordinates == null )
        {
            coordinates = new MavenCoordinates();
        }
        add( new Label( "maven|groupId", coordinates.getGroupId() ) );
        add( new Label( "maven|artifactId", coordinates.getArtifactId() ) );

        for ( PanelPlugin panel : pluginManager.getPlugins() )
        {
            List<AbstractLink> links = new ArrayList<AbstractLink>();
            for ( PanelItem item : panel.getItems( project ) )