Package edu.stanford.bmir.protege.web.client.project

Source Code of edu.stanford.bmir.protege.web.client.project.ProjectManager

package edu.stanford.bmir.protege.web.client.project;

import com.google.common.base.Optional;
import com.google.gwt.user.client.rpc.AsyncCallback;
import edu.stanford.bmir.protege.web.client.dispatch.DispatchServiceManager;
import edu.stanford.bmir.protege.web.client.dispatch.actions.LoadProjectAction;
import edu.stanford.bmir.protege.web.client.dispatch.actions.LoadProjectResult;
import edu.stanford.bmir.protege.web.shared.permissions.PermissionsSet;
import edu.stanford.bmir.protege.web.shared.project.ProjectDetails;
import edu.stanford.bmir.protege.web.shared.project.ProjectId;
import edu.stanford.bmir.protege.web.shared.user.UserId;

import java.util.HashMap;
import java.util.Map;

import static com.google.common.base.Preconditions.checkNotNull;

/**
* Author: Matthew Horridge<br>
* Stanford University<br>
* Bio-Medical Informatics Research Group<br>
* Date: 24/03/2013
*/
public class ProjectManager {

    private static final ProjectManager instance = new ProjectManager();

    private Map<ProjectId, Project> map = new HashMap<ProjectId, Project>();


    public ProjectManager() {

    }

    public static ProjectManager get() {
        return instance;
    }

    public void loadProject(ProjectId projectId, final AsyncCallback<Project> projectLoadedCallback) {
        checkNotNull(projectLoadedCallback);
        Project project = map.get(checkNotNull(projectId));
        if(project != null) {
            projectLoadedCallback.onSuccess(project);
            return;
        }

        final LoadProjectAction action = new LoadProjectAction(checkNotNull(projectId));
        DispatchServiceManager.get().execute(action, new AsyncCallback<LoadProjectResult>() {
            @Override
            public void onFailure(Throwable caught) {
                projectLoadedCallback.onFailure(caught);
            }

            @Override
            public void onSuccess(LoadProjectResult result) {
                Project project = registerProject(result.getUserId(), result.getRequestingUserProjectPermissionSet(), result.getProjectDetails());
                projectLoadedCallback.onSuccess(project);
            }
        });
    }


    public void unloadProject(ProjectId projectId) {
        unregisterProject(projectId);
    }


    private Project registerProject(final UserId userId, final PermissionsSet userPermissions, final ProjectDetails projectDetails) {
        final ProjectId projectId = projectDetails.getProjectId();
        if(map.containsKey(projectId)) {
            throw new RuntimeException("Double registration of project: " + projectId);
        }

        final Project project = new Project(projectDetails, userPermissions);
        map.put(projectId, project);
        return project;
    }

    private void unregisterProject(ProjectId projectId) {
        Project project = map.remove(projectId);
        if(project != null) {
            project.dispose();
        }
    }


    public Optional<Project> getProject(ProjectId projectId) {
        Project project = map.get(projectId);
        if(project == null) {
            return Optional.absent();
        }
        else {
            return Optional.of(project);
        }
    }




}
TOP

Related Classes of edu.stanford.bmir.protege.web.client.project.ProjectManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.