/* * Copyright 2013 Red Hat, Inc. and/or its affiliates. * * 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.guvnor.common.services.project.context; import java.util.HashMap; import java.util.Map; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.event.Event; import javax.enterprise.event.Observes; import javax.inject.Inject; import org.guvnor.common.services.project.model.Package; import org.guvnor.common.services.project.model.Project; import org.guvnor.structure.organizationalunit.OrganizationalUnit; import org.guvnor.structure.organizationalunit.UpdatedOrganizationalUnitEvent; import org.guvnor.structure.repositories.Repository; import org.guvnor.structure.repositories.RepositoryRemovedEvent; import org.uberfire.backend.vfs.Path; /** * A specialized implementation that also has Project and Package scope */ @ApplicationScoped public class ProjectContext { private OrganizationalUnit activeOrganizationalUnit; private Repository activeRepository; private String activeBranch; private Project activeProject; private Package activePackage; private Map<ProjectContextChangeHandle, ProjectContextChangeHandler> changeHandlers = new HashMap<ProjectContextChangeHandle, ProjectContextChangeHandler>(); private Event<ProjectContextChangeEvent> contextChangeEvent; public ProjectContext() { } @Inject public ProjectContext(final Event<ProjectContextChangeEvent> contextChangeEvent) { this.contextChangeEvent = contextChangeEvent; } public void onRepositoryRemoved(final @Observes RepositoryRemovedEvent event) { if (event.getRepository().equals(activeRepository)) { contextChangeEvent.fire(new ProjectContextChangeEvent(activeOrganizationalUnit)); } } public void onOrganizationalUnitUpdated(@Observes final UpdatedOrganizationalUnitEvent event) { this.setActiveOrganizationalUnit(event.getOrganizationalUnit()); } public void onProjectContextChanged(@Observes final ProjectContextChangeEvent event) { this.setActiveOrganizationalUnit(event.getOrganizationalUnit()); this.setActiveRepository(event.getRepository()); this.setActiveBranch(event.getBranch()); this.setActiveProject(event.getProject()); this.setActivePackage(event.getPackage()); for (ProjectContextChangeHandler handler : changeHandlers.values()) { handler.onChange(); } } public Path getActiveRepositoryRoot(){ return getActiveRepository().getBranchRoot( getActiveBranch() ); } public void setActiveOrganizationalUnit(final OrganizationalUnit activeOrganizationalUnit) { this.activeOrganizationalUnit = activeOrganizationalUnit; } public OrganizationalUnit getActiveOrganizationalUnit() { return this.activeOrganizationalUnit; } public void setActiveRepository(final Repository activeRepository) { this.activeRepository = activeRepository; } public String getActiveBranch() { return activeBranch; } public void setActiveBranch( final String activeBranch ) { this.activeBranch = activeBranch; } public Repository getActiveRepository() { return this.activeRepository; } public Project getActiveProject() { return this.activeProject; } public void setActiveProject(final Project activeProject) { this.activeProject = activeProject; } public Package getActivePackage() { return this.activePackage; } public void setActivePackage( final Package activePackage ) { this.activePackage = activePackage; } public ProjectContextChangeHandle addChangeHandler(final ProjectContextChangeHandler changeHandler) { ProjectContextChangeHandle handle = new ProjectContextChangeHandle(); changeHandlers.put(handle, changeHandler); return handle; } public void removeChangeHandler(final ProjectContextChangeHandle projectContextChangeHandle) { changeHandlers.remove(projectContextChangeHandle); } }