/* * HeadsUp Agile * Copyright 2009-2012 Heads Up Development Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.headsupdev.agile.app.admin; import org.headsupdev.agile.app.admin.configuration.*; import org.headsupdev.agile.app.admin.event.AccountAddEvent; import org.headsupdev.agile.app.admin.event.ProjectAddEvent; import org.headsupdev.agile.app.admin.event.UpdateProjectEvent; import org.headsupdev.agile.app.admin.project.AddProject; import org.headsupdev.agile.storage.HibernateStorage; import org.headsupdev.agile.web.WebApplication; import org.headsupdev.agile.api.*; import org.headsupdev.agile.security.DefaultSecurityManager; import org.headsupdev.agile.runtime.HeadsUpRuntime; import java.util.List; import java.util.LinkedList; import java.io.File; import org.headsupdev.agile.web.wicket.HeadsUpRequestCodingStrategy; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; /** * The admin application for HeadsUp manages the configuration and administration * * @author Andrew Williams * @version $Id$ * @since 1.0 */ public class AdminApplication extends WebApplication implements ProjectListener { public static final String ID = "admin"; private static BundleContext context; protected List<MenuLink> links; private List<String> eventTypes; public AdminApplication() { links = new LinkedList<MenuLink>(); links.add( new SimpleMenuLink( "add-project" ) ); links.add( new SimpleMenuLink( "add-account" ) ); links.add( new SimpleMenuLink( "permissions" ) ); links.add( new SimpleMenuLink( "membership" ) ); links.add( new SimpleMenuLink( "configuration" ) ); links.add( new SimpleMenuLink( "stats" ) ); // include system events here eventTypes = new LinkedList<String>(); eventTypes.add( "projectadd" ); eventTypes.add( "accountadd" ); eventTypes.add( "updateproject" ); // eventTypes.add( "system" ); Manager.getInstance().addProjectListener( this ); } @Override public void start( BundleContext bc ) { super.start( bc ); AdminApplication.context = bc; } public HeadsUpRuntime getHeadsUpRuntime() { ServiceReference sr = context.getServiceReference( HeadsUpRuntime.class.getName() ); return (HeadsUpRuntime) context.getService( sr ); } public String getName() { return "Admin"; } public String getApplicationId() { return ID; } public String getDescription() { return "The " + Manager.getStorageInstance().getGlobalConfiguration().getProductName() + " admin application"; } public List<MenuLink> getLinks( Project project ) { if ( Manager.getStorageInstance().getGlobalConfiguration().getLogErrors() ) { List<MenuLink> ret = new LinkedList<MenuLink>( links ); ret.add( new SimpleMenuLink( "errors" ) ); return ret; } return links; } public List<String> getEventTypes() { return eventTypes; } public Class[] getPersistantClasses() { return new Class[] { ProjectAddEvent.class, UpdateProjectEvent.class, AccountAddEvent.class }; } @Override public Class<? extends Page>[] getPages() { return new Class[]{ AddAccount.class, Admin.class, Errors.class, Permissions.class, Membership.class, Statistics.class, AddProject.class, AddRole.class, ApplicationsConfiguration.class, ProjectConfiguration.class, NotifiersConfiguration.class, SystemConfiguration.class, UpdatesConfiguration.class, Export.class }; } @Override public Class<? extends Page> getHomePage() { return Admin.class; } public SystemConfigurationSource getConfigurationSource() { return SystemConfigurationSource.getInstance(); } public void addProject( Project project, org.apache.wicket.Page page ) { Manager.getStorageInstance().addProject( project ); addProjectPermission( project ); HeadsUpRequestCodingStrategy.addProject( project ); } private void addProjectPermission( Project project ) { List<User> users = Manager.getSecurityInstance().getUsers(); HibernateStorage storage = (HibernateStorage) Manager.getStorageInstance(); project.getUsers().addAll( users ); for ( User user : users ) { user.getProjects().add( project ); project.getUsers().add( user ); storage.update( user ); } storage.update( project ); // recurse if ( project.getChildProjects() != null ) { for ( Project child : project.getChildProjects() ) { addProjectPermission( child ); } } } public void addUser( User user ) { ( (DefaultSecurityManager) Manager.getSecurityInstance() ).addUser( user ); addEvent( new AccountAddEvent( user ) ); } public void projectAdded( Project project ) { addEvent( new ProjectAddEvent( project ) ); } public void projectModified( Project project ) { addEvent( new UpdateProjectEvent( project ) ); } public void projectFileModified( Project project, String path, File file ) { project.fileModified( path, file ); } public void projectRemoved( Project project ) { } }