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

Java tutorial

Introduction

Here is the source code for edu.isi.karma.modeling.research.ComputeGED.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.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");
        }
    }

}