Package edu.stanford.bmir.protege.web.server.crud.supplied

Source Code of edu.stanford.bmir.protege.web.server.crud.supplied.SuppliedNameSuffixEntityCrudKitHandler

package edu.stanford.bmir.protege.web.server.crud.supplied;

import com.google.common.base.Optional;
import edu.stanford.bmir.protege.web.server.change.OntologyChangeList;
import edu.stanford.bmir.protege.web.server.crud.*;
import edu.stanford.bmir.protege.web.shared.crud.EntityCrudKitId;
import edu.stanford.bmir.protege.web.shared.crud.EntityCrudKitPrefixSettings;
import edu.stanford.bmir.protege.web.shared.crud.EntityCrudKitSettings;
import edu.stanford.bmir.protege.web.shared.crud.EntityShortForm;
import edu.stanford.bmir.protege.web.shared.crud.supplied.SuppliedNameSuffixKit;
import edu.stanford.bmir.protege.web.shared.crud.supplied.SuppliedNameSuffixSettings;
import edu.stanford.bmir.protege.web.shared.crud.supplied.WhiteSpaceTreatment;
import org.semanticweb.owlapi.io.XMLUtils;
import org.semanticweb.owlapi.model.*;
import org.semanticweb.owlapi.util.OWLEntityRenamer;
import org.semanticweb.owlapi.vocab.Namespaces;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.List;

/**
* Author: Matthew Horridge<br>
* Stanford University<br>
* Bio-Medical Informatics Research Group<br>
* Date: 14/08/2013
*/
public class SuppliedNameSuffixEntityCrudKitHandler implements EntityCrudKitHandler<SuppliedNameSuffixSettings,
        ChangeSetEntityCrudSession> {

    private SuppliedNameSuffixSettings suffixSettings;

    private EntityCrudKitPrefixSettings prefixSettings;

    public SuppliedNameSuffixEntityCrudKitHandler() {
        this(new EntityCrudKitPrefixSettings(), new SuppliedNameSuffixSettings());
    }

    public SuppliedNameSuffixEntityCrudKitHandler(
            EntityCrudKitPrefixSettings prefixSettings,
            SuppliedNameSuffixSettings settings) {
        this.prefixSettings = prefixSettings;
        this.suffixSettings = settings;
    }

    @Override
    public EntityCrudKitPrefixSettings getPrefixSettings() {
        return prefixSettings;
    }

    @Override
    public EntityCrudKitId getKitId() {
        return SuppliedNameSuffixKit.get().getKitId();
    }

    @Override
    public SuppliedNameSuffixSettings getSuffixSettings() {
        return suffixSettings;
    }

    @Override
    public EntityCrudKitSettings<SuppliedNameSuffixSettings> getSettings() {
        return new EntityCrudKitSettings<SuppliedNameSuffixSettings>(prefixSettings, suffixSettings);
    }

    @Override
    public ChangeSetEntityCrudSession createChangeSetSession() {
        return EmptyChangeSetEntityCrudSession.get();
    }

    @Override
    public <E extends OWLEntity> E create(
            ChangeSetEntityCrudSession session,
            EntityType<E> entityType,
            EntityShortForm shortForm,
            EntityCrudContext context,
            OntologyChangeList.Builder<E> changeListBuilder) {
        final OWLDataFactory dataFactory = context.getDataFactory();
        final IRI iri;
        String suppliedName = shortForm.getShortForm();
        String label;
        Optional<IRI> parsedIRI = new IRIParser().parseIRI(suppliedName);
        if (parsedIRI.isPresent()) {
            iri = parsedIRI.get();
            label = suppliedName.substring(1, suppliedName.length() - 1);
        }
        else {
            iri = createEntityIRI(shortForm, context.getPrefixedNameExpander());
            label = suppliedName;
        }
        E entity = dataFactory.getOWLEntity(entityType, iri);
        OWLDeclarationAxiom ax = dataFactory.getOWLDeclarationAxiom(entity);
        changeListBuilder.addAxiom(context.getTargetOntology(), ax);
        changeListBuilder.addAxiom(context.getTargetOntology(),
                                   dataFactory.getOWLAnnotationAssertionAxiom(dataFactory.getRDFSLabel(),
                                                                              iri,
                                                                              dataFactory.getOWLLiteral(label, "")));
        return entity;
    }

    private IRI createEntityIRI(EntityShortForm shortForm, PrefixedNameExpander prefixedNameExpander) {
        try {
            WhiteSpaceTreatment whiteSpaceTreatment = suffixSettings.getWhiteSpaceTreatment();
            String transformedShortForm = whiteSpaceTreatment.transform(shortForm.getShortForm());
            Optional<IRI> expandedPrefixName = prefixedNameExpander.getExpandedPrefixName(transformedShortForm);
            if (expandedPrefixName.isPresent()) {
                return expandedPrefixName.get();
            }
            String escapedShortForm = URLEncoder.encode(transformedShortForm, "UTF-8");
            return IRI.create(prefixSettings.getIRIPrefix() + escapedShortForm);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("UTF-8 is not supported!");
        }
    }

    @Override
    public <E extends OWLEntity> void update(
            ChangeSetEntityCrudSession session,
            E entity,
            EntityShortForm shortForm,
            EntityCrudContext context,
            OntologyChangeList.Builder<E> changeListBuilder) {
        OWLEntityRenamer renamer = new OWLEntityRenamer(context.getTargetOntology().getOWLOntologyManager(),
                                                        context.getTargetOntology().getImportsClosure());
        List<OWLOntologyChange> changeList = renamer.changeIRI(entity,
                                                               createEntityIRI(shortForm,
                                                                               context.getPrefixedNameExpander()));
        changeListBuilder.addAll(changeList);
    }

    @Override
    public <E extends OWLEntity> String getShortForm(E entity, EntityCrudContext context) {
        try {
            String iriString = entity.getIRI().toString();
            final String iriPrefix = prefixSettings.getIRIPrefix();
            String name = XMLUtils.getNCNameSuffix(iriPrefix);
            if (name == null) {
                return iriString;
            }
            return URLDecoder.decode(name, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("UTF-8 is not supported!");
        }
    }
}
TOP

Related Classes of edu.stanford.bmir.protege.web.server.crud.supplied.SuppliedNameSuffixEntityCrudKitHandler

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.