/*******************************************************************************
* 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.io.File;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.TreeMap;
import org.jgrapht.graph.DirectedWeightedMultigraph;
import com.google.common.base.Function;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
import edu.isi.karma.modeling.alignment.GraphUtil;
import edu.isi.karma.rep.alignment.Link;
import edu.isi.karma.rep.alignment.Node;
public class ComputeGED {
public static void main(String[] args) throws Exception {
computeGEDApp1();
computeGEDApp2();
}
private static void computeGEDApp1() throws Exception {
File ff = new File(Params.JGRAPHT_DIR);
File[] files = ff.listFiles();
DirectedWeightedMultigraph<Node, Link> gMain,
gKarmaInitial, gKarmaFinal,
gApp1Rank1, gApp1Rank2, gApp1Rank3;
HashSet<File> fileSet = new HashSet<File>(Arrays.asList(files));
Function<File, String> sameService = new Function<File, String>() {
@Override public String apply(final File s) {
return s.getName().substring(0, s.getName().indexOf('.'));
}
};
Multimap<String, File> index =
Multimaps.index(fileSet, sameService);
for (String s : index.keySet()) {
System.out.println(s);
Collection<File> serviceFiles = index.get(s);
gMain = null;
gKarmaInitial = null; gKarmaFinal = null;
gApp1Rank1 = null; gApp1Rank2 = null; gApp1Rank3 = null;
for (File f : serviceFiles) {
if (f.getName().endsWith(".main.jgraph")) {
gMain = GraphUtil.deserialize(f.getPath());
} else if (f.getName().endsWith(".karma.initial.jgraph")) {
gKarmaInitial = GraphUtil.deserialize(f.getPath());
} else if (f.getName().endsWith(".karma.final.jgraph")) {
gKarmaFinal = GraphUtil.deserialize(f.getPath());
} else if (f.getName().endsWith(".app1.rank1.jgraph")) {
gApp1Rank1 = GraphUtil.deserialize(f.getPath());
} else if (f.getName().endsWith(".app1.rank2.jgraph")) {
gApp1Rank2 = GraphUtil.deserialize(f.getPath());
} else if (f.getName().endsWith(".app1.rank3.jgraph")) {
gApp1Rank3 = GraphUtil.deserialize(f.getPath());
}
}
if (gMain == null) continue;
String label; double distance;
Map<String, DirectedWeightedMultigraph<Node, Link>> graphs =
new TreeMap<String, DirectedWeightedMultigraph<Node,Link>>();
label = "0- Main";
graphs.put(label, gMain);
if (gKarmaInitial != null) {
distance = Util.getDistance(gMain, gKarmaInitial);
label = "1-Karma Initial" + "-distance:" + distance;
graphs.put(label, gKarmaInitial);
}
if (gKarmaFinal != null) {
distance = Util.getDistance(gMain, gKarmaFinal);
label = "3-Karma Final" + "-distance:" + distance;
graphs.put(label, gKarmaFinal);
}
if (gApp1Rank1 != null) {
distance = Util.getDistance(gMain, gApp1Rank1);
label = "4-Rank1" + "-distance:" + distance;
graphs.put(label, gApp1Rank1);
}
if (gApp1Rank2 != null) {
distance = Util.getDistance(gMain, gApp1Rank2);
label = "5-Rank2" + "-distance:" + distance;
graphs.put(label, gApp1Rank2);
}
if (gApp1Rank3 != null) {
distance = Util.getDistance(gMain, gApp1Rank3);
label = "6-Rank3" + "-distance:" + distance;
graphs.put(label, gApp1Rank3);
}
GraphVizUtil.exportJGraphToGraphvizFile(graphs, s, Params.OUTPUT_DIR + s + ".app1.out.dot");
}
}
private static void computeGEDApp2() throws Exception {
File ff = new File(Params.JGRAPHT_DIR);
File[] files = ff.listFiles();
DirectedWeightedMultigraph<Node, Link> gMain,
gKarmaInitial, gKarmaFinal, gApp2;
HashSet<File> fileSet = new HashSet<File>(Arrays.asList(files));
Function<File, String> sameService = new Function<File, String>() {
@Override public String apply(final File s) {
return s.getName().substring(0, s.getName().indexOf('.'));
}
};
Multimap<String, File> index =
Multimaps.index(fileSet, sameService);
for (String s : index.keySet()) {
System.out.println(s);
Collection<File> serviceFiles = index.get(s);
gMain = null;
gKarmaInitial = null; gKarmaFinal = null; gApp2 = null;
for (File f : serviceFiles) {
if (f.getName().endsWith(".main.jgraph")) {
gMain = GraphUtil.deserialize(f.getPath());
} else if (f.getName().endsWith(".karma.initial.jgraph")) {
gKarmaInitial = GraphUtil.deserialize(f.getPath());
} else if (f.getName().endsWith(".karma.final.jgraph")) {
gKarmaFinal = GraphUtil.deserialize(f.getPath());
} else if (f.getName().endsWith(".app2.jgraph")) {
gApp2 = GraphUtil.deserialize(f.getPath());
}
}
if (gMain == null) continue;
String label; double distance;
Map<String, DirectedWeightedMultigraph<Node, Link>> graphs =
new TreeMap<String, DirectedWeightedMultigraph<Node,Link>>();
label = "0- Main";
graphs.put(label, gMain);
if (gKarmaInitial != null) {
distance = Util.getDistance(gMain, gKarmaInitial);
label = "1-Karma Initial" + "-distance:" + distance;
graphs.put(label, gKarmaInitial);
}
if (gKarmaFinal != null) {
distance = Util.getDistance(gMain, gKarmaFinal);
label = "3-Karma Final" + "-distance:" + distance;
graphs.put(label, gKarmaFinal);
}
if (gApp2 != null) {
distance = Util.getDistance(gMain, gApp2);
label = "2-Output" + "-distance:" + distance;
graphs.put(label, gApp2);
}
GraphVizUtil.exportJGraphToGraphvizFile(graphs, s, Params.OUTPUT_DIR + s + ".app2.out.dot");
}
}
}