Package edu.stanford.bmir.protege.web.client.ui.frame

Source Code of edu.stanford.bmir.protege.web.client.ui.frame.PropertyValueListEditor

package edu.stanford.bmir.protege.web.client.ui.frame;

import com.google.common.base.Optional;
import com.google.common.collect.Lists;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasEnabled;
import edu.stanford.bmir.protege.web.client.rpc.GetRendering;
import edu.stanford.bmir.protege.web.client.rpc.GetRenderingCallback;
import edu.stanford.bmir.protege.web.client.rpc.GetRenderingResponse;
import edu.stanford.bmir.protege.web.client.rpc.RenderingServiceManager;
import edu.stanford.bmir.protege.web.client.ui.editor.ValueEditor;
import edu.stanford.bmir.protege.web.client.ui.editor.ValueEditorFactory;
import edu.stanford.bmir.protege.web.client.ui.editor.ValueListEditor;
import edu.stanford.bmir.protege.web.client.ui.editor.ValueListEditorImpl;
import edu.stanford.bmir.protege.web.shared.DirtyChangedHandler;
import edu.stanford.bmir.protege.web.shared.HasEntityDataProvider;
import edu.stanford.bmir.protege.web.shared.entity.*;
import edu.stanford.bmir.protege.web.shared.frame.PropertyValue;
import edu.stanford.bmir.protege.web.shared.frame.PropertyValueDescriptor;
import edu.stanford.bmir.protege.web.shared.frame.PropertyValueList;
import edu.stanford.bmir.protege.web.shared.frame.PropertyValueState;
import edu.stanford.bmir.protege.web.shared.project.ProjectId;
import org.semanticweb.owlapi.model.IRI;
import org.semanticweb.owlapi.model.OWLAxiom;
import org.semanticweb.owlapi.model.OWLEntity;
import org.semanticweb.owlapi.model.OWLLiteral;

import java.util.Collections;
import java.util.List;

/**
* @author Matthew Horridge, Stanford University, Bio-Medical Informatics Research Group, Date: 27/02/2014
*/
public class PropertyValueListEditor extends Composite implements ValueEditor<PropertyValueList>, HasEnabled {

    private ValueListEditor<PropertyValueDescriptor> editor;

    private ProjectId projectId;

    private PropertyValueGridGrammar grammar = PropertyValueGridGrammar.getClassGrammar();

    public PropertyValueListEditor(ProjectId projectId) {
        this.projectId = projectId;
        this.editor = new ValueListEditorImpl<PropertyValueDescriptor>(
                new ValueEditorFactory<PropertyValueDescriptor>() {
                    @Override
                    public ValueEditor<PropertyValueDescriptor> createEditor() {
                        PropertyValueDescriptorEditorImpl propertyValueEditor = new PropertyValueDescriptorEditorImpl();
                        PropertyValueDescriptorEditorPresenter presenter = new PropertyValueDescriptorEditorPresenter(propertyValueEditor);
                        presenter.setGrammar(grammar);
                        return presenter;
                    }
                }
        );
        initWidget(editor.asWidget());
        editor.addValueChangeHandler(new ValueChangeHandler<Optional<List<PropertyValueDescriptor>>>() {
            @Override
            public void onValueChange(ValueChangeEvent<Optional<List<PropertyValueDescriptor>>> event) {
                GWT.log("Received ValueChangeEvent from The ValueListEditor.  Firing the event for the PropertyValueListEditor.");
                ValueChangeEvent.fire(PropertyValueListEditor.this, getValue());
            }
        });
    }


    public void setGrammar(PropertyValueGridGrammar grammar) {
        this.grammar = grammar;
    }

    @Override
    public void setValue(final PropertyValueList propertyValueList) {
        RenderingServiceManager.getManager().execute(new GetRendering(projectId, propertyValueList), new GetRenderingCallback() {
            @Override
            public void onSuccess(GetRenderingResponse result) {
                fillUp(propertyValueList, result);
            }
        });
    }

    private void fillUp(PropertyValueList propertyValueList, HasEntityDataProvider provider) {
        GWT.log("Filling the editor");
        List<PropertyValueDescriptor> vals = Lists.newArrayList();
        for (PropertyValue propertyValue : propertyValueList.getPropertyValues()) {
            if (propertyValue.getState() == PropertyValueState.ASSERTED) {
                Optional<PropertyValueDescriptor> val =    addRelationship(propertyValue, provider);
                if (val.isPresent()) {
                    vals.add(val.get());
                }
            }
        }
        editor.setValue(vals);
    }



    private Optional<PropertyValueDescriptor> addRelationship(final PropertyValue propertyValue, HasEntityDataProvider provider) {
        final Optional<OWLEntityData> propRendering = provider.getEntityData(propertyValue.getProperty());
        OWLPrimitiveData valueRendering = null;
        if (propertyValue.getValue() instanceof OWLEntity) {
            final Optional<OWLEntityData> propertyData = provider.getEntityData((OWLEntity) propertyValue.getValue());
            valueRendering = propertyData.get();
        }
        else if (propertyValue.getValue() instanceof OWLLiteral) {
            valueRendering = new OWLLiteralData((OWLLiteral) propertyValue.getValue());
        }
        else if (propertyValue.getValue() instanceof IRI) {
            valueRendering = new IRIData((IRI) propertyValue.getValue());
        }
        if(propRendering.isPresent()) {
            return Optional.of(new PropertyValueDescriptor((OWLPropertyData) propRendering.get(), valueRendering, propertyValue.getState(), propertyValue.isValueMostSpecific(), Collections.<OWLAxiom>emptySet()));
        }
        else {
            return Optional.absent();
        }
//        addRow(propRendering.isPresent() ? Optional.<OWLPrimitiveData>of(propRendering.get()) : Optional.<OWLPrimitiveData>absent(), Optional.of(valueRendering), propertyValue.getState(), propertyValue.isValueMostSpecific());
    }

    @Override
    public void clearValue() {
        editor.clearValue();
    }

    @Override
    public Optional<PropertyValueList> getValue() {
        Optional<List<PropertyValueDescriptor>> value =  editor.getValue();
        if(!value.isPresent()) {
            return Optional.absent();
        }
        List<PropertyValue> propertyValues = Lists.newArrayList();
        for(PropertyValueDescriptor val : value.get()) {
            Optional<PropertyValue> propertyValue = val.toPropertyValue();
            if (propertyValue.isPresent()) {
                propertyValues.add(propertyValue.get());
            }
        }
        return Optional.of(new PropertyValueList(propertyValues));
    }

    @Override
    public boolean isEnabled() {
        return editor.isEnabled();
    }

    @Override
    public void setEnabled(boolean enabled) {
        editor.setEnabled(enabled);
    }

    @Override
    public boolean isDirty() {
        return false;
    }

    @Override
    public HandlerRegistration addDirtyChangedHandler(DirtyChangedHandler handler) {
        return editor.addDirtyChangedHandler(handler);
    }

    @Override
    public HandlerRegistration addValueChangeHandler(ValueChangeHandler<Optional<PropertyValueList>> handler) {
        return addHandler(handler, ValueChangeEvent.getType());
    }

    @Override
    public boolean isWellFormed() {
        return editor.isWellFormed();
    }

}
TOP

Related Classes of edu.stanford.bmir.protege.web.client.ui.frame.PropertyValueListEditor

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.