edu.isi.karma.modeling.research.PatternContainment.java Source code

Java tutorial

Introduction

Here is the source code for edu.isi.karma.modeling.research.PatternContainment.java

Source

/*******************************************************************************
 * Copyright 2012 University of Southern California
 * 
 * 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.
 * 
 * This code was developed by the Information Integration Group as part 
 * of the Karma project at the Information Sciences Institute of the 
 * University of Southern California.  For more information, publications, 
 * and related projects, please see: http://www.isi.edu/integration
 ******************************************************************************/

package edu.isi.karma.modeling.research;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;

import org.jgrapht.graph.DirectedWeightedMultigraph;

import com.google.common.collect.Sets;

import edu.isi.karma.rep.alignment.InternalNode;
import edu.isi.karma.rep.alignment.Link;
import edu.isi.karma.rep.alignment.Node;

public class PatternContainment {

    private DirectedWeightedMultigraph<Node, Link> mainGraph;
    private DirectedWeightedMultigraph<Node, Link> newGraph;

    public PatternContainment(DirectedWeightedMultigraph<Node, Link> mainGraph,
            DirectedWeightedMultigraph<Node, Link> newGraph) {
        this.mainGraph = mainGraph;
        this.newGraph = newGraph;
    }

    public boolean containedIn(Set<String> mappedNodes, Set<String> mappedLinks) {

        HashMap<String, List<Link>> mainLinks = new HashMap<String, List<Link>>();
        HashMap<String, List<Link>> newLinks = new HashMap<String, List<Link>>();

        for (Link e : mainGraph.edgeSet()) {
            String target = (e.getTarget() instanceof InternalNode) ? e.getTarget().getLabel().getUri() : "";
            String key = e.getSource().getLabel().getUri() + target + e.getLabel().getUri();
            List<Link> links = mainLinks.get(key);
            if (links == null) {
                links = new ArrayList<Link>();
                mainLinks.put(key, links);
            }
            links.add(e);
        }

        for (Link e : newGraph.edgeSet()) {
            String target = (e.getTarget() instanceof InternalNode) ? e.getTarget().getLabel().getUri() : "";
            String key = e.getSource().getLabel().getUri() + target + e.getLabel().getUri();
            List<Link> links = newLinks.get(key);
            if (links == null) {
                links = new ArrayList<Link>();
                newLinks.put(key, links);
            }
            links.add(e);
        }

        Set<String> sharedLinks = Sets.intersection(mainLinks.keySet(), newLinks.keySet());
        for (String key : sharedLinks) {
            if (mainLinks.get(key).size() != newLinks.get(key).size())
                return false;
        }

        if (sharedLinks.size() == newLinks.keySet().size()) {
            for (String key : sharedLinks) {
                List<Link> links = mainLinks.get(key);
                for (Link l : links) {
                    mappedNodes.add(l.getSource().getId());
                    mappedNodes.add(l.getTarget().getId());
                    mappedLinks.add(l.getId());
                }
            }
            return true;
        }

        return false;

    }
}