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

Source Code of edu.stanford.bmir.protege.web.client.individualslist.IndividualsListViewPresenter

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

import com.google.common.base.Optional;
import com.google.gwt.user.client.rpc.AsyncCallback;
import edu.stanford.bmir.protege.web.client.action.CreateHandler;
import edu.stanford.bmir.protege.web.client.action.DeleteHandler;
import edu.stanford.bmir.protege.web.client.dispatch.DispatchServiceManager;
import edu.stanford.bmir.protege.web.client.dispatch.actions.CreateNamedIndividualsAction;
import edu.stanford.bmir.protege.web.client.dispatch.actions.CreateNamedIndividualsResult;
import edu.stanford.bmir.protege.web.client.dispatch.actions.DeleteEntityAction;
import edu.stanford.bmir.protege.web.client.dispatch.actions.DeleteEntityResult;
import edu.stanford.bmir.protege.web.client.rpc.AbstractWebProtegeAsyncCallback;
import edu.stanford.bmir.protege.web.client.ui.library.dlg.WebProtegeDialog;
import edu.stanford.bmir.protege.web.client.ui.library.msgbox.MessageBox;
import edu.stanford.bmir.protege.web.client.ui.library.msgbox.YesNoHandler;
import edu.stanford.bmir.protege.web.client.ui.ontology.entity.CreateEntityDialogController;
import edu.stanford.bmir.protege.web.client.ui.ontology.entity.CreateEntityInfo;
import edu.stanford.bmir.protege.web.shared.DataFactory;
import edu.stanford.bmir.protege.web.shared.entity.OWLNamedIndividualData;
import edu.stanford.bmir.protege.web.shared.individualslist.GetIndividualsAction;
import edu.stanford.bmir.protege.web.shared.individualslist.GetIndividualsResult;
import edu.stanford.bmir.protege.web.shared.pagination.PageRequest;
import edu.stanford.bmir.protege.web.shared.project.ProjectId;
import org.semanticweb.owlapi.model.EntityType;
import org.semanticweb.owlapi.model.OWLClass;

import java.util.Collection;
import java.util.Collections;
import java.util.Set;

/**
* Author: Matthew Horridge<br>
* Stanford University<br>
* Bio-Medical Informatics Research Group<br>
* Date: 12/09/2013
*/
public class IndividualsListViewPresenter {

    private IndividualsListView view;

    private ProjectId projectId;

    private Optional<OWLClass> currentType = Optional.absent();

    public IndividualsListViewPresenter(ProjectId projectId, IndividualsListView view) {
        this.projectId = projectId;
        this.view = view;
        this.view.setCreateHandler(new CreateHandler() {
            @Override
            public void handleCreate() {
                handleCreateIndividuals();
            }
        });
        this.view.setDeleteHandler(new DeleteHandler() {
            @Override
            public void handleDelete() {
                handleDeleteIndividuals();
            }
        });
    }

    public void clearType() {
        currentType = Optional.absent();
    }

    public void setType(OWLClass type) {
        currentType = Optional.of(type);
        updateList();
    }

    private void updateList() {
        GetIndividualsAction action = new GetIndividualsAction(projectId, currentType.or(DataFactory.getOWLThing()), Optional.<PageRequest>absent());
        DispatchServiceManager.get().execute(action, new AbstractWebProtegeAsyncCallback<GetIndividualsResult>() {
            @Override
            public void onSuccess(GetIndividualsResult result) {
                view.setListData(result.getIndividuals());
            }
        });
    }

    private void handleCreateIndividuals() {
        WebProtegeDialog.showDialog(new CreateEntityDialogController(EntityType.NAMED_INDIVIDUAL, new CreateEntityDialogController.CreateEntityHandler() {
            @Override
            public void handleCreateEntity(CreateEntityInfo createEntityInfo) {
                final Set<String> browserTexts = createEntityInfo.getBrowserTexts();
                DispatchServiceManager.get().execute(new CreateNamedIndividualsAction(projectId, currentType, browserTexts), new AbstractWebProtegeAsyncCallback<CreateNamedIndividualsResult>() {
                    @Override
                    public void onSuccess(CreateNamedIndividualsResult result) {
                        Set<OWLNamedIndividualData> individuals = result.getIndividuals();
                        view.addListData(individuals);
                        if(!individuals.isEmpty()) {
                            view.setSelectedIndividual(individuals.iterator().next());
                        }
                    }
                });
            }
        }));
    }

    private void handleDeleteIndividuals() {
        Optional<OWLNamedIndividualData> sel = view.getSelectedIndividual();
        if(!sel.isPresent()) {
            return;
        }
        MessageBox.showYesNoConfirmBox("Delete individual?", "Are you sure you want to delete " + sel.get().getBrowserText() + "?", new YesNoHandler() {
            @Override
            public void handleYes() {
                deleteSelectedIndividuals();
            }

            @Override
            public void handleNo() {
            }
        });
    }


    private void deleteSelectedIndividuals() {
        Collection<OWLNamedIndividualData> selection = view.getSelectedIndividuals();
        if(selection.size() != 1) {
            return;
        }
        deleteIndividual(selection.iterator().next());
    }

    protected void deleteIndividual(final OWLNamedIndividualData entity) {
        DispatchServiceManager.get().execute(new DeleteEntityAction(entity.getEntity(), projectId), new AsyncCallback<DeleteEntityResult>() {
            @Override
            public void onFailure(Throwable caught) {
            }

            @Override
            public void onSuccess(DeleteEntityResult result) {
                view.removeListData(Collections.singleton(entity));
            }
        });
    }
}
TOP

Related Classes of edu.stanford.bmir.protege.web.client.individualslist.IndividualsListViewPresenter

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.