All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bridgedb.uri.lens.Lens Maven / Gradle / Ivy

The newest version!
// BridgeDb,
// An abstraction layer for identifier mapping services, both local and online.
//
// Copyright 2006-2009  BridgeDb developers
// Copyright 2012-2013  Christian Y. A. Brenninkmeijer
// Copyright 2012-2013  OpenPhacts
//
// 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.bridgedb.uri.lens;

import java.util.ArrayList;
import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import org.apache.log4j.Logger;
import org.bridgedb.DataSource;
import org.bridgedb.utils.BridgeDBException;
import org.bridgedb.utils.Reporter;

/**
 *
 * @author Alasdair and Christian
 */
public class Lens {

    private final String id;
    private String name;
    private String createdBy;
    private XMLGregorianCalendar createdOn;
    private String description;
    private final List justifications;
    private final Set allowedMiddleSources;
    private final Set allowedMiddleSysCodes;
        
    public static final String DEFAULT_LENS_NAME = "Default";
    public static final String TEST_LENS_NAME = "Test";
    public static final String ALL_LENS_NAME = "All";      
    public static final String METHOD_NAME = "Lens";
    public static final String URI_PREFIX = "/" + METHOD_NAME + "/";
    
    private static String defaultBaseUri = "";

    static final Logger logger = Logger.getLogger(Lens.class);

    /**
     * This methods should only be called by WS Clients as it Does not register the Lens 
     * 
     * Use factory method instead.
     * 
     * @param id - id 
     * @param name - name
     * @param createdOn - date created
     * @param createdBy - creator
     * @param allowedMiddleSources - allowed middle sources
     * @param description - description
     * @param justifications - comments
     */
    public Lens(String id, String name, String createdOn, String createdBy, String description,
            Collection justifications, Collection allowedMiddleSources) {
        this.id = id;
        this.name = name;
        this.createdBy = createdBy;
        this.setCreatedOn(createdOn);
        this.description = description;
        this.justifications = new ArrayList(justifications);
        this.allowedMiddleSources = new HashSet();
        allowedMiddleSysCodes = new HashSet();
        this.addAllowedMiddleSources(allowedMiddleSources);
    }

    protected Lens(String id, String name) throws BridgeDBException {
        this.name = name;
        this.id = id;
        this.justifications = new  ArrayList();
        this.allowedMiddleSources = new HashSet();
        allowedMiddleSysCodes = new HashSet();
        this.description = name + " lens";
        this.setCreatedOnNow();
        createdBy = "constructor";
    }
 
    @Override
    public String toString(){
           return  "Lens Id: " + this.getId() + 
        		   " Name: " + this.getName() +
        		   " Created By: " + this.getCreatedBy() +
        		   " Created On: " + this.getCreatedOn() +
                   " Description: " + this.getDescription() + 
        		   " Justifications: " + this.getJustifications();
    }
    
     /**
     * @return the Id
     */
    public String getId() {
        return id;
    }
        
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @return the createdBy
     */
    public String getCreatedBy() {
        return createdBy;
    }

    /**
      * @return the createdOn
      */
    public XMLGregorianCalendar getCreatedOn() {
        return createdOn;
    }

    /**
      * @return the justification
      */
    public List getJustifications() {
        return justifications;
    }

    /**
      * @return the Allowed Middle Sources
      */
    public Set getAllowedMiddleSources() {
        return this.allowedMiddleSources;
    }

    /**
      * @return the Allowed Middle Sources
      */
    public Set getAllowedMiddleSysCodes() {
        return this.allowedMiddleSysCodes;
    }

    public static String getDefaultJustifictaionString() {
       return "http://semanticscience.org/resource/CHEMINF_000059"; 
    }

    public static String getTestJustifictaion() {
        return "http://www.bridgedb.org/test#testJustification";
    }

    final void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }

    private void setCreatedOn(XMLGregorianCalendar createdOn) {
        this.createdOn = createdOn;
    }

    protected final void setCreatedOn(String createdOnString) {
        try { 
            this.createdOn = DatatypeFactory.newInstance().newXMLGregorianCalendar(createdOnString);
        } catch (DatatypeConfigurationException ex) {
            Reporter.error("Unable to convert " + createdOnString,ex);
            setCreatedOnNow();
        }
    }

    protected final void setDescription(String description) {
        this.description = description;
    }

    public final void addJustification(String justification) {
        if (!this.justifications.contains(justification)){
            this.justifications.add(justification);
        }
    }

    protected final void addJustifications(Collection justifications) {
        for (String justification:justifications){
            addJustification(justification);
        }
    }

    public final void addAllowedMiddleSource(DataSource dataSource) {
        allowedMiddleSources.add(dataSource);
        allowedMiddleSysCodes.add(dataSource.getSystemCode());
    }

    public final void addAllowedMiddleSource(String allowedMiddleSource) {
        DataSource dataSource = DataSource.getExistingByFullName(allowedMiddleSource);
        addAllowedMiddleSource(dataSource);
    }

    protected final void addAllowedMiddleSources(Collection dataSources) {
        for (DataSource dataSource:dataSources){
            addAllowedMiddleSource(dataSource);
        }
    }

    protected final void setName(String newName) {
        name = newName;
    }

   /**
     * @return the description
     */
    public String getDescription() {
        return description;
    }

    private void setCreatedOnNow() {
        GregorianCalendar gregorianCalendar = new GregorianCalendar();
        DatatypeFactory datatypeFactory;
        try {
            datatypeFactory = DatatypeFactory.newInstance();
            XMLGregorianCalendar now = datatypeFactory.newXMLGregorianCalendar(gregorianCalendar);
            setCreatedOn(now);
        } catch (DatatypeConfigurationException ex) {
            Reporter.error("Unable to set createdBy now! ", ex);
        }
   }
    
    public String toUri(String baseUri){
        if (baseUri == null){
            return defaultBaseUri + URI_PREFIX + getId();
        }
        return baseUri + URI_PREFIX + getId();
    }
    
    static void setDefaultBaseUri(String baseUri) {
        defaultBaseUri = baseUri;
    }


  
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy