/******************************************************************************* * Copyright 2014 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.kr2rml.planning; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class TriplesMapGraphMerger { protected List<TriplesMapGraph> graphs; public TriplesMapGraphMerger() { graphs = new LinkedList<>(); } public TriplesMapGraph getTriplesMapGraph(String triplesMapId) { for(TriplesMapGraph graph : graphs) { if(graph.getTriplesMapIds().contains(triplesMapId)) { return graph; } } return null; } public void addTriplesMap(TriplesMap triplesMap) { TriplesMapGraph graph = new TriplesMapGraph(); graph.addTriplesMap(triplesMap); graphs.add(graph); return; } public void addLink(TriplesMapLink link) { if(graphs.isEmpty()) { TriplesMapGraph graph = new TriplesMapGraph(); graph.addLink(link); graphs.add(graph); return; } List<TriplesMapGraph> graphsForMerging = new LinkedList<>(); Iterator<TriplesMapGraph> iter = graphs.iterator(); while(iter.hasNext()) { TriplesMapGraph graph = iter.next(); TriplesMap source = graph.getTriplesMap(link.getSourceMap().getId()); TriplesMap target = graph.getTriplesMap(link.getTargetMap().getId()); if(source != null || target != null) { graphsForMerging.add(graph); iter.remove(); } } iter = graphsForMerging.iterator(); TriplesMapGraph mergedGraph = iter.next(); TriplesMapGraph graphToMerge; while(iter.hasNext()) { graphToMerge = iter.next(); mergedGraph = TriplesMapGraph.mergeGraphs(mergedGraph, graphToMerge); } mergedGraph.addLink(link); graphs.add(mergedGraph); } public List<TriplesMapGraph> getGraphs() { return graphs; } }