• Tidak ada hasil yang ditemukan

G. Exporting Graph as Image

VI. Discussions 30

The Biological Net Extranalysis is a tool that helps the user visualize a graph, extract a subnetwork containing the relationships that are significant in the network, and perform network analysis on the graph.

The user loads the graph into the program and is presented with a visual repre- sentation of the graph. A Java library, jGrapht, is being used to contain the graph object in the program and provide different algorithms that will be used for various computations. The library jGraph is used to create the visual representation that is presented to the user.

The loaded graph can have two things done on it: have a subgraph of selected nodes extracted or show the graph with its nodes colored based on the computed centrality values.

Figure 21: The image of the graph containing the relations found in Alzheimer’s Disease

The tool was used to run a test on the incomplete modified KEGG relations of

the Alzheimer’s Disease that contains various weights. The weights in the graph

represent the number of times a certain edge is cited in literature. The weights in

this test graph are based on 12 manually annotated and validated articles. The data hasn’t been normalized. Using the tool to extract edges with the heaviest weights, it can be shown that there is an indirect relation between glycitein and Na+/K+ATPase with amyloid being a node in this relation.

Figure 22: The subgraph generated from getting the heaviest weighted edge from the graph

Given this result, the relationship between amyloid and glycitein may be a subject of interest since the low weight that the edge has shows that there isn’t too much reference regarding this node, thus making a point of interest for further research.

Additionally, the amyloid and Na+/K+ATPase may also be worth looking into since the heavier weight shows that the relationship is studied more and therefore may have an significant part in the network.

When the different centralities of the network are performed on the graph, it is

consistently shown that the central node, AD (Alzheimer’s Disease), is colored with

the highest values. There are other nodes that are also colored such that they have

relatively higher centrality values than the other nodes and may be worth looking

into.

Figure 23: The graph’s nodes colored based on the Eigenvector centrality values

VII. Conclusions

The tool created, Biological Net Extranalysis, lets the user load a graph from a file and shows a visual representation of the graph to the user. The user is able to create a subnetwork from selected edges that surpass a certain threshold, and examine any indirect relations these nodes have. The program makes use of the concept of transitivity in order to find the different indirect relationships that the nodes may have. The user may export the generated subgraph for further analysis and study.

The tool also computes for the different centrality measures of the graph, including (i) In-degree, (ii) Out-degree, (iii) Betweenness, (iv) Closeness, and (v) Eigenvector.

It colors the nodes of the graph according to the calculated value. Being able to find these centralities may help the user find nodes that are important to a network depending on the mechanism present.

In conclusion, this tool is a handy way to be able to extract nodes of interest from a network and examine the indirect relationships they may have with each other.

With researchers looking for ways to minimize the scope of things to experiment on,

being able to extract the subgraph is certainly one way to minimize the size of what

to should be studied.

VIII. Recommendations

The tool can be improved by increasing the limit for the number of hops that the user can set. Looking for more efficient algorithms to extract the subgraph will certainly aid in cutting the increased computation time that comes when increasing the limit for the number of hops. There are various transitive algorithms for graphs proposed that may be used.

The tool can also benefit from generating a subgraph based on the centrality measures that were computed. Extracting certain nodes based on their centrality values may show interesting pathways and relationships that are worth looking into.

Another thing that can be improved is looking for a way to present the graph in a much more visually pleasing way. As of the current version, the nodes and edges are randomly placed, making things look a bit messy. It might be worth looking up planar graph theory for this.

As of now, the tool can only load a specific graph format that it was originally

created for, which are weighted KEGG pathways. Increasing its capabilities such that

it can read other Biological networks, like microarrays, could make the tool useful in

more applications in the field.

IX. Bibliography

[1] T. Aittokallio and B. Schwikowski, “Graph-based methods for analysing networks in cell biology,” Briefings in bioinformatics, vol. 7, no. 3, pp. 243–255, 2006.

[2] M. T. Dittrich, G. W. Klau, A. Rosenwald, T. Dandekar, and T. M¨ uller, “Identi- fying functional modules in protein–protein interaction networks: an integrated exact approach,” Bioinformatics, vol. 24, no. 13, pp. i223–i231, 2008.

[3] T. Aittokallio and B. Schwikowski, “Graph-based methods for analysing networks in cell biology,” Briefings in bioinformatics, vol. 7, no. 3, pp. 243–255, 2006.

[4] X. Zhu, M. Gerstein, and M. Snyder, “Getting connected: analysis and principles of biological networks,” Genes & development, vol. 21, no. 9, pp. 1010–1024, 2007.

[5] G. A. Pavlopoulos, M. Secrier, C. N. Moschopoulos, T. G. Soldatos, S. Kossida, J. Aerts, R. Schneider, and P. G. Bagos, “Using graph theory to analyze biological networks,” BioData mining, vol. 4, no. 1, p. 1, 2011.

[6] L. Yang, K. Tang, Y. Qi, H. Ye, W. Chen, Y. Zhang, and Z. Cao, “Potential metabolic mechanism of girls’ central precocious puberty: a network analysis on urine metabonomics data,” BMC systems biology, vol. 6, no. 3, p. 1, 2012.

[7] J. Zhao, C. Geng, L. Tao, D. Zhang, Y. Jiang, K. Tang, R. Zhu, H. Yu, W. Zhang, F. He, et al., “Reconstruction and analysis of human liver-specific metabolic network based on cnhlpp data,” Journal of proteome research, vol. 9, no. 4, pp. 1648–1658, 2010.

[8] A. Mazza, I. Gat-Viks, H. Farhan, and R. Sharan, “A minimum-labeling ap-

proach for reconstructing protein networks across multiple conditions,” Algo-

rithms for Molecular Biology, vol. 9, no. 1, p. 1, 2014.

[9] G. A. Pavlopoulos, A.-L. Wegener, and R. Schneider, “A survey of visualization tools for biological network analysis,” Biodata mining, vol. 1, no. 1, p. 1, 2008.

[10] J. L. Gersting, Mathematical structures for computer science. Macmillan, 2007.

[11] G. L. Ciampaglia, P. Shiralkar, L. M. Rocha, J. Bollen, F. Menczer, and A. Flam- mini, “Computational fact checking from knowledge networks,” PloS one, vol. 10, no. 6, p. e0128193, 2015.

[12] O. Richters and T. P. Peixoto, “Trust transitivity in social networks,” PloS one, vol. 6, no. 4, p. e18384, 2011.

[13] J. A. Blake, “Ten quick tips for using the gene ontology,” PLoS Comput Biol, vol. 9, no. 11, p. e1003343, 2013.

[14] N. H. Shah, T. Cole, and M. A. Musen, “Analyses using disease ontologies,”

PLoS Comput Biol, vol. 8, no. 12, p. e1002827, 2012.

[15] A. Oellrich, N. Collier, D. Smedley, and T. Groza, “Generation of silver standard concept annotations from biomedical texts with special relevance to phenotypes,”

PloS one, vol. 10, no. 1, p. e0116040, 2015.

[16] S. Warshall, “A theorem on boolean matrices,” Journal of the ACM (JACM), vol. 9, no. 1, pp. 11–12, 1962.

[17] I. Munro, “Efficient determination of the transitive closure of a directed graph,”

Information Processing Letters, vol. 1, no. 2, pp. 56–58, 1971.

[18] M. J. Fischer and A. R. Meyer, “Boolean matrix multiplication and transitive closure,” in Switching and Automata Theory, 1971., 12th Annual Symposium on, pp. 129–131, IEEE, 1971.

[19] V. Hirvisalo, E. Nuutila, and E. Soisalon-Soininen, “Transitive closure algorithm

disk tc and its performance analysis,” 1996.

[20] Y. Ioannidis, R. Ramakrishnan, and L. Winger, “Transitive closure algorithms based on graph traversal,” ACM Transactions on Database Systems (TODS), vol. 18, no. 3, pp. 512–576, 1993.

[21] T.-P. Nguyen, M. Scotti, M. J. Morine, and C. Priami, “Model-based clustering reveals vitamin d dependent multi-centrality hubs in a network of vitamin-related proteins,” BMC systems biology, vol. 5, no. 1, p. 1, 2011.

[22] K. Ning, H. K. Ng, S. Srihari, H. W. Leong, and A. I. Nesvizhskii, “Examination of the relationship between essential genes in ppi network and hub proteins in reverse nearest neighbor topology,” BMC bioinformatics, vol. 11, no. 1, p. 1, 2010.

[23] M. Sajitz-Hermstein and Z. Nikoloski, “Functional centrality as a predictor of shifts in metabolic flux states,” BMC research notes, vol. 9, no. 1, p. 317, 2016.

[24] G. del Rio, D. Kosch¨ utzki, and G. Coello, “How to identify essential genes from molecular networks?,” BMC Systems Biology, vol. 3, no. 1, p. 1, 2009.

[25] A. Mora and I. M. Donaldson, “Effects of protein interaction data integration, representation and reliability on the use of network properties for drug target prediction,” BMC bioinformatics, vol. 13, no. 1, p. 1, 2012.

[26] C. Soderlund, W. Nelson, M. Willer, and D. R. Gang, “Tcw: Transcriptome computational workbench,” PLoS One, vol. 8, no. 7, p. e69401, 2013.

[27] F. Iragne, M. Nikolski, B. Mathieu, D. Auber, and D. Sherman, “Proviz: pro- tein interaction visualization and exploration,” Bioinformatics, vol. 21, no. 2, pp. 272–274, 2005.

[28] P. Shannon, A. Markiel, O. Ozier, N. S. Baliga, J. T. Wang, D. Ramage, N. Amin,

grated models of biomolecular interaction networks,” Genome research, vol. 13, no. 11, pp. 2498–2504, 2003.

[29] Y. Assenov, F. Ram´ırez, S.-E. Schelhorn, T. Lengauer, and M. Albrecht, “Com- puting topological parameters of biological networks,” Bioinformatics, vol. 24, no. 2, pp. 282–284, 2008.

[30] E. Demir, O. Babur, U. Dogrusoz, A. Gursoy, G. Nisanci, R. Cetin-Atalay, and M. Ozturk, “Patika: an integrated visual environment for collaborative construc- tion and analysis of cellular pathways,” Bioinformatics, vol. 18, no. 7, pp. 996–

1003, 2002.

[31] E. Antezana, W. Blond´ e, M. Ega˜ na, A. Rutherford, R. Stevens, B. De Baets, V. Mironov, and M. Kuiper, “Biogateway: a semantic systems biology tool for the life sciences,” BMC bioinformatics, vol. 10, no. 10, p. 1, 2009.

[32] D. R. White and S. P. Borgatti, “Betweenness centrality measures for directed graphs,” Social Networks, vol. 16, no. 4, pp. 335–346, 1994.

[33] U. Brandes and D. Fleischer, “Centrality measures based on current flow,” in Annual Symposium on Theoretical Aspects of Computer Science, pp. 533–544, Springer, 2005.

[34] A. Bavelas, “Communication patterns in task-oriented groups.,” Journal of the acoustical society of America, 1950.

[35] A. Dekker, “Conceptual distance in social network analysis,” Journal of Social

Structure, vol. 6, no. 3, 2005.

X. Appendix

A. Source Code

WeightedVertex.java

p a c k a g e g r a p h ;

i m p o r t j a v a . i o . S e r i a l i z a b l e ; /∗∗

∗ The W e i g h t e d V e r t e x c l a s s w h i c h s t a n d s a s t h e r e p r e s e n t a t i o n o f o n e e n t i t y i n t h e g r a p h .

∗ @author D a n i e l l e R o d r i g u e z

∗/

@ S u p p r e s s W a r n i n g s ( ” s e r i a l ” )

p u b l i c c l a s s W e i g h t e d V e r t e x i m p l e m e n t s Comparable<W e i g h t e d V e r t e x>, S e r i a l i z a b l e { p r i v a t e S t r i n g name ;

p r i v a t e S t r i n g t y p e ; p r i v a t e d o u b l e w e i g h t ; /∗∗

∗ C o n s t r u c t o r f o r W e i g h t e d V e r t e x . Type i s l e f t empty .

∗ @param name −Name o f t h e V e r t e x

∗ @param w e i g h t − Weight o f t h e V e r t e x

∗/

p u b l i c W e i g h t e d V e r t e x ( S t r i n g name , d o u b l e w e i g h t ){

i n i t i a l i z e ( name , ” ” , w e i g h t ) ; }

/∗∗

∗ C o n s t r u c t o r f o r W e i g h t e d V e r t e x . Weight i s a u t o m a t i c a l l y s e t t o 1 .

∗ @param name −Name o f t h e V e r t e x

∗ @param t y p e − Type o f t h e V e r t e x

∗/

p u b l i c W e i g h t e d V e r t e x ( S t r i n g name , S t r i n g t y p e ){

i n i t i a l i z e ( name , t y p e , 1 . 0 ) ; }

/∗∗

∗ C o n s t r u c t o r f o r W e i g h t e d V e r t e x .

∗ @param name −Name o f t h e V e r t e x

∗ @param t y p e − Type o f t h e V e r t e x

∗ @param w e i g h t − Weight o f t h e V e r t e x

∗/

p u b l i c W e i g h t e d V e r t e x ( S t r i n g name , S t r i n g t y p e , d o u b l e w e i g h t ){

i n i t i a l i z e ( name , t y p e , w e i g h t ) ; }

/∗∗

∗ S e t t h e name o f t h e V e r t e x .

∗ @param name −Name o f t h e V e r t e x

∗/

p u b l i c v o i d setName ( S t r i n g name ){

t h i s . name = name ; }

/∗∗

∗ S e t t h e t y p e o f t h e V e r t e x .

∗ @param t y p e − Type o f t h e V e r t e x

∗/

p u b l i c v o i d s e t T y p e ( S t r i n g t y p e ){

t h i s . t y p e = t y p e ; }

/∗∗

∗ S e t t h e Weight o f t h e V e r t e x .

∗ @param w e i g h t − Weight o f t h e V e r t e x

∗/

p u b l i c v o i d s e t W e i g h t ( d o u b l e w e i g h t ){

t h i s . w e i g h t = w e i g h t ; }

/∗∗

∗ Get t h e Name o f t h e V e r t e x .

∗ @ r e t u r n S t r i n g c o n t a i n i n g t h e Name o f t h e V e r t e x

∗/

p u b l i c S t r i n g getName ( ){

r e t u r n name ; }

∗/

p u b l i c S t r i n g g e t T y p e ( ){ r e t u r n t y p e ;

} /∗∗

∗ Get t h e Weight o f t h e V e r t e x .

∗ @ r e t u r n d o u b l e c o n t a i n i n g t h e w e i g h t o f t h e v e r t e x

∗/

p u b l i c d o u b l e g e t W e i g h t ( ){

r e t u r n w e i g h t ; }

@ O v e r r i d e

p u b l i c i n t hashCode ( ){ r e t u r n name . l e n g t h ( ) ; }

@ O v e r r i d e

p u b l i c S t r i n g t o S t r i n g ( ){

r e t u r n name ; }

@ O v e r r i d e

p u b l i c b o o l e a n e q u a l s ( O b j e c t o t h e r ){

i f ( o t h e r == n u l l ) r e t u r n f a l s e ; i f ( o t h e r == t h i s ) r e t u r n t r u e ;

i f ( ! ( o t h e r i n s t a n c e o f W e i g h t e d V e r t e x ) ) r e t u r n f a l s e ; W e i g h t e d V e r t e x o t h e r V e r t e x = ( W e i g h t e d V e r t e x ) o t h e r ; i f ( name . e q u a l s ( o t h e r V e r t e x . getName ( ) ) ) r e t u r n t r u e ; e l s e r e t u r n f a l s e ;

}

@ O v e r r i d e

p u b l i c i n t compareTo ( W e i g h t e d V e r t e x o ) { r e t u r n name . compareTo ( o . getName ( ) ) ; }

p u b l i c i n t compare ( W e i g h t e d V e r t e x v ){ i f ( v . g e t W e i g h t ( ) < w e i g h t )

r e t u r n 1 ;

e l s e i f ( v . g e t W e i g h t ( ) == w e i g h t ) r e t u r n 0 ;

e l s e r e t u r n −1;

}

p r i v a t e v o i d i n i t i a l i z e ( S t r i n g name , S t r i n g t y p e , d o u b l e w e i g h t ){

t h i s . name = name ; t h i s . t y p e = t y p e ; t h i s . w e i g h t = w e i g h t ; }

}

WeightedEdgeWithType.java

p a c k a g e g r a p h ;

i m p o r t o r g . j g r a p h t . g r a p h . D e f a u l t W e i g h t e d E d g e ; /∗∗

∗ The Edge t h a t i s u s e d i n t h e g r a p h . I t i s a Weighted Edge w i t h a t y p e added t o i t .

∗ @author D a n i e l l e R o d r i g u e z

∗/

@ S u p p r e s s W a r n i n g s ( ” s e r i a l ” )

p u b l i c c l a s s WeightedEdgeWithType e x t e n d s D e f a u l t W e i g h t e d E d g e { p r i v a t e S t r i n g t y p e ;

/∗ ∗’

∗ S e t t h e t y p e o f t h e e d g e .

∗ @param t y p e − S t r i n g t h a t i s t h e t y p e o f t h e e d g e .

∗/

p u b l i c v o i d s e t T y p e ( S t r i n g t y p e ){

t h i s . t y p e = t y p e ; }

/∗∗

∗ Get t h e t y p e o f t h e e d g e .

∗ @ r e t u r n S t r i n g t h a t i s t h e t y p e o f t h e e d g e .

∗/

p u b l i c S t r i n g g e t T y p e ( ){ r e t u r n t y p e ;

}

@ O v e r r i d e

p u b l i c S t r i n g t o S t r i n g ( ){

r e t u r n D o u b l e . t o S t r i n g ( s u p e r . g e t W e i g h t ( ) ) ; }

}

VertexPicker.java

p a c k a g e e x t r a c t o r ;

i m p o r t g r a p h . WeightedEdgeWithType ; i m p o r t g r a p h . W e i g h t e d V e r t e x ; i m p o r t j a v a . u t i l . A r r a y L i s t ; i m p o r t j a v a . u t i l . H a s h S e t ; i m p o r t j a v a . u t i l . I t e r a t o r ; i m p o r t j a v a . u t i l . L i s t ; i m p o r t j a v a . u t i l . S e t ;

i m p o r t o r g . j g r a p h t . g r a p h . D i r e c t e d W e i g h t e d M u l t i g r a p h ; i m p o r t o r g . j g r a p h t . t r a v e r s e . D e p t h F i r s t I t e r a t o r ; /∗∗

∗ C l a s s f o r c h o o s i n g t h e V e r t i c e s t h a t go o v e r t h e s e t t h r e s h o l d s

∗ @author D a n i e l l e R o d r i g u e z

∗/

p u b l i c c l a s s V e r t e x P i c k e r {

p r i v a t e D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ;

p u b l i c V e r t e x P i c k e r ( D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ){

t h i s . g r a p h = g r a p h ; }

p u b l i c S e t<W e i g h t e d V e r t e x> g e t C h o s e n V e r t i c e s ( d o u b l e v e r t e x W e i g h t , d o u b l e e d g e W e i g h t ){

S e t<W e i g h t e d V e r t e x> l i s t O f V e r t i c e s = g e t V e r t i c e s O v e r W e i g h t B o u n d a r y ( v e r t e x W e i g h t ) ; L i s t<WeightedEdgeWithType> l i s t O f E d g e s = g e t E d g e s O v e r W e i g h t B o u n d a r y ( e d g e W e i g h t ) ; S e t<W e i g h t e d V e r t e x> v e r t e x F r o m E d g e s = g e t V e r t e x S e t F r o m E d g e s ( l i s t O f E d g e s ) ; l i s t O f V e r t i c e s . a d d A l l ( v e r t e x F r o m E d g e s ) ;

r e t u r n l i s t O f V e r t i c e s ; }

p u b l i c S e t<W e i g h t e d V e r t e x> g e t C h o s e n V e r t i c e s ( d o u b l e w e i g h t ){

r e t u r n g e t C h o s e n V e r t i c e s ( w e i g h t , w e i g h t ) ; }

p r i v a t e S e t<W e i g h t e d V e r t e x> g e t V e r t i c e s O v e r W e i g h t B o u n d a r y ( d o u b l e w e i g h t B o u n d a r y ){

S e t<W e i g h t e d V e r t e x> v e r t i c e s O v e r = new HashSet<W e i g h t e d V e r t e x>( ) ; I t e r a t o r<W e i g h t e d V e r t e x> v e r t e x I t e r = new D e p t h F i r s t I t e r a t o r<>(g r a p h ) ; w h i l e ( v e r t e x I t e r . h a s N e x t ( ) ){

W e i g h t e d V e r t e x c u r V e r t e x = v e r t e x I t e r . n e x t ( ) ; i f ( c u r V e r t e x . g e t W e i g h t ( ) >= w e i g h t B o u n d a r y ) v e r t i c e s O v e r . add ( c u r V e r t e x ) ;

}

r e t u r n v e r t i c e s O v e r ; }

p r i v a t e L i s t<WeightedEdgeWithType> g e t E d g e s O v e r W e i g h t B o u n d a r y ( d o u b l e w e i g h t B o u n d a r y ){

L i s t<WeightedEdgeWithType> e d g e s O v e r = new A r r a y L i s t<WeightedEdgeWithType>( ) ; f o r ( WeightedEdgeWithType dwe : g r a p h . e d g e S e t ( ) ){

i f ( g r a p h . g e t E d g e W e i g h t ( dwe ) >= w e i g h t B o u n d a r y ) e d g e s O v e r . add ( dwe ) ;

}

r e t u r n e d g e s O v e r ; }

p r i v a t e S e t<W e i g h t e d V e r t e x> g e t V e r t e x S e t F r o m E d g e s ( L i s t<WeightedEdgeWithType> e d g e L i s t ){

S e t<W e i g h t e d V e r t e x> v e r t e x S e t = new HashSet<W e i g h t e d V e r t e x>( ) ; f o r ( WeightedEdgeWithType dwe : e d g e L i s t ){

v e r t e x S e t . add ( g r a p h . g e t E d g e S o u r c e ( dwe ) ) ; v e r t e x S e t . add ( g r a p h . g e t E d g e T a r g e t ( dwe ) ) ; }

r e t u r n v e r t e x S e t ; }

}

SubgraphExtractor.java

p a c k a g e e x t r a c t o r ;

i m p o r t g r a p h . WeightedEdgeWithType ; i m p o r t g r a p h . W e i g h t e d V e r t e x ; i m p o r t j a v a . u t i l . A r r a y L i s t ; i m p o r t j a v a . u t i l . H a s h S e t ;

i m p o r t o r g . j g r a p h t . g r a p h . D i r e c t e d W e i g h t e d M u l t i g r a p h ; i m p o r t o r g . j g r a p h t . g r a p h . D i r e c t e d W e i g h t e d S u b g r a p h ; /∗∗

∗ C l a s s u s e d t o g e n e r a t e t h e s u b g r a p h b a s e d on t h e t h r e s h o l d and h o p s s e t by t h e u s e r .

∗ @author D a n i e l l e R o d r i g u e z

∗/

p u b l i c c l a s s S u b g r a p h E x t r a c t o r {

p r i v a t e D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ; p r i v a t e S e t<W e i g h t e d V e r t e x> c h o s e n V e r t e x L i s t ;

p r i v a t e S e t<W e i g h t e d V e r t e x> t r a n s i t i v e V e r t e x L i s t ;

p r i v a t e L i s t<GraphPath<W e i g h t e d V e r t e x , WeightedEdgeWithType>> c o n n e c t i n g P a t h s ; p r i v a t e d o u b l e v e r t e x T h r e s h o l d , e d g e T h r e s h o l d ;

p r i v a t e i n t h o p s ; /∗∗

∗ C o n s t r u c t t h e Subgraph E x t r a c t o r c l a s s w i t h t h e b a s e s u b g r a p h .

∗ @param g r a p h − The main g r a p h u s e d a s b a s i s f o r t h e s u b g r a p h e x t r a c t o r .

∗/

p u b l i c S u b g r a p h E x t r a c t o r ( D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ){ t h i s . g r a p h = g r a p h ;

c h o s e n V e r t e x L i s t = new HashSet< >();

t r a n s i t i v e V e r t e x L i s t = new HashSet< >();

c o n n e c t i n g P a t h s = new A r r a y L i s t< >();

v e r t e x T h r e s h o l d = D o u b l e . MAX VALUE ; e d g e T h r e s h o l d = D o u b l e . MAX VALUE ; h o p s = 1 ;

} /∗∗

∗ Get t h e V e r t i c e s t h a t h a v e b e e n i n c l u d e d i n t h e r e q u i r e d s e t o f v e r t i c e s i n t h e l a t e s t g e n e r a t e d s u b g r a p h .

∗ @ r e t u r n The l i s t o f R e q u i r e d v e r t i c e s

∗/

p u b l i c S e t<W e i g h t e d V e r t e x> g e t C h o s e n V e r t i c e s ( ){

r e t u r n c h o s e n V e r t e x L i s t ; }

/∗∗

∗ Get t h e v e r t i c e s i n c l u d e d i n t h e g r a p h t h a t a r e n ’ t p a r t o f t h e r e q u i r e d s e t o f v e r t i c e s

∗ @ r e t u r n The l i s t o f T r a n s i t i v e V e r t i c e s

∗/

p u b l i c S e t<W e i g h t e d V e r t e x> g e t T r a n s i t i v e V e r t i c e s ( ){

r e t u r n t r a n s i t i v e V e r t e x L i s t ; }

/∗∗

∗ Get a l l p a t h s i n t h e g e n e r a t e d s u b g r a p h

∗ @ r e t u r n The l i s t o f a l l p a t h s i n t h e s u b g r a p h

∗/

p u b l i c L i s t<GraphPath<W e i g h t e d V e r t e x , WeightedEdgeWithType>> g e t P a t h L i s t ( ){ r e t u r n c o n n e c t i n g P a t h s ;

} /∗∗

∗ @param i s S k e l e t o n

∗ @param a d d t n l V e r t i c e s

∗ @ r e t u r n

∗/

p u b l i c D i r e c t e d W e i g h t e d S u b g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g e n e r a t e S u b g r a p h ( b o o l e a n i s S k e l e t o n ,

S e t<W e i g h t e d V e r t e x> a d d t n l V e r t i c e s ){

c h o s e n V e r t e x L i s t . c l e a r ( ) ; t r a n s i t i v e V e r t e x L i s t . c l e a r ( ) ;

V e r t e x P i c k e r vp = new V e r t e x P i c k e r ( g r a p h ) ;

c h o s e n V e r t e x L i s t = vp . g e t C h o s e n V e r t i c e s ( v e r t e x T h r e s h o l d , e d g e T h r e s h o l d ) ; i f ( a d d t n l V e r t i c e s != n u l l )

c h o s e n V e r t e x L i s t . a d d A l l ( a d d t n l V e r t i c e s ) ; t r a n s i t i v e V e r t e x L i s t . a d d A l l ( c h o s e n V e r t e x L i s t ) ;

A l l D i r e c t e d P a t h s<W e i g h t e d V e r t e x , WeightedEdgeWithType> adp = new A l l D i r e c t e d P a t h s<>(g r a p h ) ; c o n n e c t i n g P a t h s = adp . g e t A l l P a t h s ( c h o s e n V e r t e x L i s t , c h o s e n V e r t e x L i s t , t r u e , h o p s ) ;

S e t<WeightedEdgeWithType> e d g e L i s t = new HashSet<WeightedEdgeWithType>( ) ; f o r ( GraphPath<W e i g h t e d V e r t e x , WeightedEdgeWithType> c u r P a t h : c o n n e c t i n g P a t h s ){

i f ( c u r P a t h . g e t L e n g t h ( ) == 0 ) c o n t i n u e ; i f ( c u r P a t h . g e t L e n g t h ( ) == 1 ){

WeightedEdgeWithType c u r E d g e = c u r P a t h . g e t E d g e L i s t ( ) . g e t ( 0 ) ; e d g e L i s t . add ( c u r E d g e ) ;

} e l s e i f ( ! i s S k e l e t o n ){

t r a n s i t i v e V e r t e x L i s t . a d d A l l ( c u r P a t h . g e t V e r t e x L i s t ( ) ) ; e d g e L i s t . a d d A l l ( c u r P a t h . g e t E d g e L i s t ( ) ) ;

} }

D i r e c t e d W e i g h t e d S u b g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> b a s e S u b g r a p h = new D i r e c t e d W e i g h t e d S u b g r a p h<>(graph , t r a n s i t i v e V e r t e x L i s t , e d g e L i s t ) ;

t r a n s i t i v e V e r t e x L i s t . r e m o v e A l l ( c h o s e n V e r t e x L i s t ) ; r e t u r n b a s e S u b g r a p h ;

} /∗∗

∗ G e n e r a t e t h e s u b g r a p h w i t h o n l y t h e e d g e t h r e s h o l d , v e r t e x t h r e s h o l d s , and number o f h o p s

∗ @param v e r t e x W e i g h t − T h r e s h o l d f o r t h e minimum w e i g h t o f t h e r e q u i r e d v e r t i c e s

∗ @param e d g e W e i g h t − T h r e s h o l d f o r t h e minimum w e i g h t o f t h e e d g e s t o be i n c l u d e d

∗ @param h o p s −Number o f i n t r a n s i t i v e v e r t i c e s i n b e t w e e n r e q u i r e d v e r t i c e s

∗ @ r e t u r n The s u b g r a p h f u l f i l l i n g t h e r e q u i r e m e n t s p a s s e d

∗/

p u b l i c D i r e c t e d W e i g h t e d S u b g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g e n e r a t e S u b g r a p h ( d o u b l e v e r t e x T h r e s h o l d , d o u b l e e d g e T h r e s h o l d , i n t h o p s ){

t h i s . v e r t e x T h r e s h o l d = v e r t e x T h r e s h o l d ; t h i s . e d g e T h r e s h o l d = e d g e T h r e s h o l d ; t h i s . h o p s = h o p s ;

r e t u r n g e n e r a t e S u b g r a p h ( f a l s e , n u l l ) ; }

/∗∗

∗ G e n e r a t e t h e s u b g r a p h w i t h o n l y t h e e d g e t h r e s h o l d , v e r t e x t h r e s h o l d s , number o f hops , and w h e t h e r o r n o t t h e g r a p h s h o u l d o n l y i n c l u d e show t h e r e q u i r e d v e r t i c e s

∗ @param v e r t e x W e i g h t − T h r e s h o l d f o r t h e minimum w e i g h t o f t h e r e q u i r e d v e r t i c e s

∗ @param e d g e W e i g h t − T h r e s h o l d f o r t h e minimum w e i g h t o f t h e e d g e s t o be i n c l u d e d

∗ @param h o p s −Number o f i n t r a n s i t i v e v e r t i c e s i n b e t w e e n r e q u i r e d v e r t i c e s

∗ @param i s S k e l e t o n − T o g g l e i f t h e r e t u r n e d s u b g r a p h s h o u l d be o n l y t h e r e q u i r e d v e r t i c e s

∗ @ r e t u r n The s u b g r a p h f u l f i l l i n g t h e r e q u i r e m e n t s p a s s e d

∗/

p u b l i c D i r e c t e d W e i g h t e d S u b g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g e n e r a t e S u b g r a p h ( d o u b l e v e r t e x W e i g h t , d o u b l e e d g e W e i gh t , i n t hops , b o o l e a n i s S k e l e t o n ){

t h i s . v e r t e x T h r e s h o l d = v e r t e x W e i g h t ; t h i s . e d g e T h r e s h o l d = e d g e W e i g h t ; t h i s . h o p s = h o p s ;

r e t u r n g e n e r a t e S u b g r a p h ( i s S k e l e t o n , n u l l ) ; }

/∗∗

∗ @param v e r t e x W e i g h t

∗ @param e d g e W e i g h t

∗ @param h o p s

∗ @param i s S k e l e t o n

∗ @param a d d t n l V e r t i c e s

∗ @ r e t u r n

∗/

p u b l i c D i r e c t e d W e i g h t e d S u b g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g e n e r a t e S u b g r a p h ( d o u b l e v e r t e x W e i g h t ,

d o u b l e e d g e We i g h t , i n t hops ,

b o o l e a n i s S k e l e t o n ,

S e t<W e i g h t e d V e r t e x> a d d t n l V e r t i c e s ){

t h i s . v e r t e x T h r e s h o l d = v e r t e x W e i g h t ; t h i s . e d g e T h r e s h o l d = e d g e W e i g h t ; t h i s . h o p s = h o p s ;

r e t u r n g e n e r a t e S u b g r a p h ( i s S k e l e t o n , a d d t n l V e r t i c e s ) ; }

p u b l i c v o i d s e t T h r e s h o l d ( d o u b l e t h r e s h o l d ){

v e r t e x T h r e s h o l d = t h r e s h o l d ; e d g e T h r e s h o l d = t h r e s h o l d ; }

p u b l i c d o u b l e g e t E d g e T h r e s h o l d ( ){ r e t u r n e d g e T h r e s h o l d ;

}

p u b l i c v o i d c l e a r S e t t i n g s ( ){

v e r t e x T h r e s h o l d = D o u b l e . MAX VALUE ; e d g e T h r e s h o l d = D o u b l e . MAX VALUE ; h o p s = 1 ;

c o n n e c t i n g P a t h s . c l e a r ( ) ; }

p u b l i c i n t g e t H o p s ( ) { r e t u r n h o p s ;

}

p u b l i c v o i d s e t H o p s ( i n t h o p s ) { t h i s . h o p s = h o p s ;

} }

DegreeCentralityComputer.java

i m p o r t j a v a . u t i l . HashMap ; i m p o r t j a v a . u t i l . Map ; i m p o r t j a v a . u t i l . S e t ;

i m p o r t o r g . j g r a p h t . g r a p h . D i r e c t e d W e i g h t e d M u l t i g r a p h ; /∗∗

∗ Computes f o r t h e I n d e g r e e and O u t d e g r e e C e n t r a l i t y o f a p a s s e d D i r e c t e d Weighted g r a p h .

∗ @author D a n i e l l e R o d r i g u e z

∗/

p u b l i c c l a s s D e g r e e C e n t r a l i t y C o m p u t e r {

p r i v a t e D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ; p r i v a t e Map<W e i g h t e d V e r t e x , Double> i n D e g r e e L i s t ;

p r i v a t e Map<W e i g h t e d V e r t e x , Double> o u t D e g r e e L i s t ; /∗∗

∗ C o n s t r u c t an i n s t a n c e o f t h e D e g r e e C e n t r a l i t y Computer f o r t h e p a s s e d g r a p h .

∗ @param g r a p h − t h e i n p u t g r a p h

∗/

p u b l i c D e g r e e C e n t r a l i t y C o m p u t e r ( D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ){ t h i s . g r a p h = g r a p h ;

s e t u p D e g r e e D i c t i o n a r i e s ( ) ; c o m p u t e D e g r e e C e n t r a l i t y ( ) ; }

/∗∗

∗ C a l c u l a t e and r e t u r n t h e In−d e g r e e C e n t r a l i t y v a l u e s o f t h e v e r t i c e s i n t h e g r a p h .

∗ @ r e t u r n A map c o n t a i n i n g t h e v e r t i c e s a s t h e k e y and t h e i r c o r r e s p o n d i n g i n−d e g r e e c e n t r a l i t y a s t h e v a l u e

∗/

p u b l i c Map<W e i g h t e d V e r t e x , Double> g e t I n D e g r e e L i s t ( ){

r e t u r n i n D e g r e e L i s t ; }

/∗∗

∗ C a l c u l a t e and r e t u r n t h e Out−d e g r e e C e n t r a l i t y v a l u e s o f t h e v e r t i c e s i n t h e g r a p h .

∗ @ r e t u r n A map c o n t a i n i n g t h e v e r t i c e s a s t h e k e y and t h e i r c o r r e s p o n d i n g out−d e g r e e c e n t r a l i t y a s t h e v a l u e s

∗/

p u b l i c Map<W e i g h t e d V e r t e x , Double> g e t O u t D e g r e e L i s t ( ){ r e t u r n o u t D e g r e e L i s t ;

}

p r i v a t e v o i d s e t u p D e g r e e D i c t i o n a r i e s ( ){

i n D e g r e e L i s t = new HashMap< >();

o u t D e g r e e L i s t = new HashMap< >();

S e t<W e i g h t e d V e r t e x> v e r t e x L i s t = g r a p h . v e r t e x S e t ( ) ; f o r ( W e i g h t e d V e r t e x v e r t e x : v e r t e x L i s t ){

i n D e g r e e L i s t . p u t ( v e r t e x , 0 . 0 ) ; o u t D e g r e e L i s t . p u t ( v e r t e x , 0 . 0 ) ; }

}

p r i v a t e v o i d c o m p u t e D e g r e e C e n t r a l i t y ( ){

S e t<W e i g h t e d V e r t e x> v e r t e x L i s t = g r a p h . v e r t e x S e t ( ) ; f o r ( W e i g h t e d V e r t e x v e r t e x : v e r t e x L i s t ){

i n D e g r e e L i s t . p u t ( v e r t e x , ( d o u b l e ) g r a p h . i n D e g r e e O f ( v e r t e x ) ) ; o u t D e g r e e L i s t . p u t ( v e r t e x , ( d o u b l e ) g r a p h . o u t D e g r e e O f ( v e r t e x ) ) ; }

i n D e g r e e L i s t = MapUtil . s o r t B y V a l u e ( i n D e g r e e L i s t ) ; o u t D e g r e e L i s t = MapUtil . s o r t B y V a l u e ( o u t D e g r e e L i s t ) ; }

}

ClosenessCentralityComputer.java

p a c k a g e c e n t r a l i t y ;

i m p o r t g r a p h . WeightedEdgeWithType ; i m p o r t g r a p h . W e i g h t e d V e r t e x ; i m p o r t j a v a . u t i l . HashMap ; i m p o r t j a v a . u t i l . Map ;

i m p o r t o r g . j g r a p h t . a l g . i n t e r f a c e s . S h o r t e s t P a t h A l g o r i t h m . S i n g l e S o u r c e P a t h s ; i m p o r t o r g . j g r a p h t . a l g . s h o r t e s t p a t h . F l o y d W a r s h a l l S h o r t e s t P a t h s ;

i m p o r t o r g . j g r a p h t . g r a p h . D i r e c t e d W e i g h t e d M u l t i g r a p h ; /∗∗

∗ Computes f o r t h e C l o s e n e s s C e n t r a l i t y o f a p a s s e d D i r e c t e d Weighted g r a p h .

∗ @author D a n i e l l e R o d r i g u e z

∗/

p u b l i c c l a s s C l o s e n e s s C e n t r a l i t y C o m p u t e r {

p r i v a t e D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ; p r i v a t e Map<W e i g h t e d V e r t e x , Double> c l o s e n e s s L i s t ;

/∗∗

∗ C o n s t r u c t an i n s t a n c e o f t h e C l o s e n e s s C e n t r a l i t y Computer f o r t h e p a s s e d g r a p h .

∗ @param g r a p h − t h e i n p u t g r a p h

∗/

p u b l i c C l o s e n e s s C e n t r a l i t y C o m p u t e r ( D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ){ t h i s . g r a p h = g r a p h ;

i n i t i a l i z e C l o s e n e s s L i s t ( ) ; }

/∗∗

∗ C a l c u l a t e and r e t u r n t h e C l o s e n e s s C e n t r a l i t y v a l u e s o f t h e v e r t i c e s i n t h e g r a p h .

∗ @ r e t u r n A map c o n t a i n i n g t h e v e r t i c e s a s t h e k e y and t h e i r c o r r e s p o n d i n g c l o s e n e s s c e n t r a l i t y a s t h e v a l u e

∗/

p u b l i c Map<W e i g h t e d V e r t e x , Double> g e t C l o s e n e s s L i s t ( ){

c o m p u t e C l o s e n e s s ( ) ;

r e t u r n MapUtil . s o r t B y V a l u e ( c l o s e n e s s L i s t ) ; }

p r i v a t e v o i d i n i t i a l i z e C l o s e n e s s L i s t ( ) { c l o s e n e s s L i s t = new HashMap< >();

f o r ( W e i g h t e d V e r t e x wv : g r a p h . v e r t e x S e t ( ) ){

c l o s e n e s s L i s t . p u t ( wv , 0 . 0 ) ; }

} /∗

∗ Compute t h e c l o s e n e s s v a l u e o f e a c h v e r t e x by g e t t i n g t h e t o t a l

∗ l e n g t h o f t h e s h o r t e s t p a t h s t o t h e v e r t e x and u s i n g i t t o d i v i d e t h e number o f n o d e s p r e s e n t

∗/

p r i v a t e v o i d c o m p u t e C l o s e n e s s ( ){

F l o y d W a r s h a l l S h o r t e s t P a t h s<W e i g h t e d V e r t e x , WeightedEdgeWithType> fwSP = new F l o y d W a r s h a l l S h o r t e s t P a t h s<>(g r a p h ) ; f o r ( W e i g h t e d V e r t e x v e r t e x : g r a p h . v e r t e x S e t ( ) ){

S i n g l e S o u r c e P a t h s<W e i g h t e d V e r t e x , WeightedEdgeWithType> a l l S h o r t e s t P a t h s = fwSP . g e t P a t h s ( v e r t e x ) ; d o u b l e c l o s e n e s s V a l = c o u n t P a t h s ( a l l S h o r t e s t P a t h s ) ;

c l o s e n e s s L i s t . p u t ( v e r t e x , c l o s e n e s s V a l ) ; }

}

p r i v a t e d o u b l e c o u n t P a t h s ( S i n g l e S o u r c e P a t h s<W e i g h t e d V e r t e x , WeightedEdgeWithType> a s p ){

d o u b l e a c c u m u l a t e d P a t h s = 0 ;

f o r ( W e i g h t e d V e r t e x wv : g r a p h . v e r t e x S e t ( ) ){

i f ( a s p . g e t P a t h ( wv ) != n u l l ){

d o u b l e p a t h W e i g h t = a s p . g e t P a t h ( wv ) . g e t W e i g h t ( ) ; i f ( p a t h W e i g h t != 0 )

a c c u m u l a t e d P a t h s += 1 / a s p . g e t P a t h ( wv ) . g e t W e i g h t ( ) ; }

}

r e t u r n a c c u m u l a t e d P a t h s ; }

}

BetweenessCentralityComputer.java

p a c k a g e c e n t r a l i t y ;

i m p o r t g r a p h . WeightedEdgeWithType ; i m p o r t g r a p h . W e i g h t e d V e r t e x ; i m p o r t j a v a . u t i l . A r r a y L i s t ; i m p o r t j a v a . u t i l . Deque ; i m p o r t j a v a . u t i l . HashMap ; i m p o r t j a v a . u t i l . L i n k e d L i s t ; i m p o r t j a v a . u t i l . L i s t ; i m p o r t j a v a . u t i l . Map ;

i m p o r t o r g . j g r a p h t . a l g . D i r e c t e d N e i g h b o r I n d e x ; i m p o r t o r g . j g r a p h t . g r a p h . D i r e c t e d W e i g h t e d M u l t i g r a p h ; /∗∗

∗ Computes f o r t h e B e t w e e n n e s s C e n t r a l i t y o f a p a s s e d D i r e c t e d Weighted g r a p h .

∗ The c l a s s makes u s e o f t h e a l g o r i t h m p r o p o s e d by B r a n d e s (A F a s t e r A l g o r i t h m f o r B e t w e e n n e s s C e n t r a l i t y , 2 0 0 1 ) .

∗ @author D a n i e l l e R o d r i g u e z

∗/

p u b l i c c l a s s B e t w e e n e s s C e n t r a l i t y C o m p u t e r {

p r i v a t e D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ; p r i v a t e Map<W e i g h t e d V e r t e x , Double> b e t w e e n e s s L i s t ;

/∗∗

∗ C o n s t r u c t an i n s t a n c e o f t h e B e t w e e n n e s s C e n t r a l i t y Computer f o r t h e p a s s e d g r a p h .

∗ @param g r a p h − t h e i n p u t g r a p h

∗/

p u b l i c B e t w e e n e s s C e n t r a l i t y C o m p u t e r ( D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ){

t h i s . g r a p h = g r a p h ;

i n i t i a l i z e B e t w e e n e s s L i s t ( ) ; }

∗/

p u b l i c Map<W e i g h t e d V e r t e x , Double> g e t B e t w e e n e s s L i s t ( ){ c o m p u t e B e t w e e n e s s ( ) ;

r e t u r n MapUtil . s o r t B y V a l u e ( b e t w e e n e s s L i s t ) ; }

/∗∗

∗ I n i t i a l i z e s t h e B e t w e e n n e s s by p o p u l a t i n g i t w i t h t h e v e r t i c e s and t h e i r c e n t r a l i t i e s a s z e r o .

∗/

p r i v a t e v o i d i n i t i a l i z e B e t w e e n e s s L i s t ( ) { b e t w e e n e s s L i s t = new HashMap< >();

f o r ( W e i g h t e d V e r t e x wv : g r a p h . v e r t e x S e t ( ) ){

b e t w e e n e s s L i s t . p u t ( wv , 0 . 0 ) ; }

} /∗∗

∗ I n i t i a l i z e t h e d a t a f o r e a c h i t e r a t i o n o f t h e a l g o r i t h m .

∗ @param d a t a L i s t

∗/

p r i v a t e v o i d i n i t i a l i z e B e t w e e n e s s D a t a ( Map<W e i g h t e d V e r t e x , B e t w e e n e s s D a t a> d a t a L i s t ){

f o r ( W e i g h t e d V e r t e x wv : g r a p h . v e r t e x S e t ( ) ){

d a t a L i s t . p u t ( wv , new B e t w e e n e s s D a t a ( ) ) ; }

} /∗∗

∗ Compute f o r t h e B e t w e e n e s s o f e a c h v e r t e x i n t h e g r a p h .

∗/

p r i v a t e v o i d c o m p u t e B e t w e e n e s s ( ){

Map<W e i g h t e d V e r t e x , B e t w e e n e s s D a t a> d e c o r = new HashMap< >();

D i r e c t e d N e i g h b o r I n d e x<W e i g h t e d V e r t e x , WeightedEdgeWithType> d n i = new D i r e c t e d N e i g h b o r I n d e x<>(g r a p h ) ; f o r ( W e i g h t e d V e r t e x s : g r a p h . v e r t e x S e t ( ) ){

i n i t i a l i z e B e t w e e n e s s D a t a ( d e c o r ) ; d e c o r . g e t ( s ) . s h o r t e s t P a t h N u m = 1 ; d e c o r . g e t ( s ) . d i s t a n c e = 0 ;

Deque<W e i g h t e d V e r t e x> S = new L i n k e d L i s t< >();

Deque<W e i g h t e d V e r t e x>Q = new L i n k e d L i s t< >();

Q . a d d L a s t ( s ) ; w h i l e ( ! Q . isEmpty ( ) ){

W e i g h t e d V e r t e x v = Q . r e m o v e F i r s t ( ) ; S . a d d F i r s t ( v ) ;

f o r ( W e i g h t e d V e r t e x w : d n i . s u c c e s s o r s O f ( v ) ){

i f ( d e c o r . g e t (w ) . d i s t a n c e < 0 ){

Q . a d d L a s t (w ) ;

d e c o r . g e t (w ) . d i s t a n c e = d e c o r . g e t ( v ) . d i s t a n c e + 1 ; }

i f ( d e c o r . g e t (w ) . d i s t a n c e == d e c o r . g e t ( v ) . d i s t a n c e + 1 ){

d e c o r . g e t (w ) . s h o r t e s t P a t h N u m += d e c o r . g e t ( v ) . s h o r t e s t P a t h N u m ; d e c o r . g e t (w ) . p r e d e c e s s o r s . add ( v ) ;

} } }

w h i l e ( ! S . isEmpty ( ) ){

W e i g h t e d V e r t e x w = S . r e m o v e F i r s t ( ) ;

f o r ( W e i g h t e d V e r t e x v : d e c o r . g e t (w ) . p r e d e c e s s o r s ){

d o u b l e p a i r D e p F r a c t i o n = d e c o r . g e t ( v ) . s h o r t e s t P a t h N u m / d e c o r . g e t (w ) . s h o r t e s t P a t h N u m ; d o u b l e neighborAddDep = d e c o r . g e t (w ) . d e p e n d e n c y + 1 ;

d e c o r . g e t ( v ) . d e p e n d e n c y += p a i r D e p F r a c t i o n ∗ neighborAddDep ; }

i f (w != s )

b e t w e e n e s s L i s t . p u t (w , b e t w e e n e s s L i s t . g e t (w) + d e c o r . g e t (w ) . d e p e n d e n c y ) ; }

} }

c l a s s B e t w e e n e s s D a t a{

L i s t<W e i g h t e d V e r t e x> p r e d e c e s s o r s ; d o u b l e s h o r t e s t P a t h N u m ;

d o u b l e d i s t a n c e ; d o u b l e d e p e n d e n c y ; B e t w e e n e s s D a t a ( ){

p r e d e c e s s o r s = new A r r a y L i s t< >();

s h o r t e s t P a t h N u m = 0 ; d i s t a n c e = −1;

d e p e n d e n c y = 0 ; }

} }

EigenvectorCentraliltyComputer.java

p a c k a g e c e n t r a l i t y ;

i m p o r t g r a p h . WeightedEdgeWithType ; i m p o r t g r a p h . W e i g h t e d V e r t e x ;

i m p o r t j a v a . u t i l . A r r a y L i s t ; i m p o r t j a v a . u t i l . A r r a y s ; i m p o r t j a v a . u t i l . HashMap ; i m p o r t j a v a . u t i l . L i s t ; i m p o r t j a v a . u t i l . Map ; i m p o r t j a v a . u t i l . T r e e S e t ;

i m p o r t no . u i b . c i p r . m a t r i x . D e n s e M a t r i x ; i m p o r t no . u i b . c i p r . m a t r i x .EVD;

i m p o r t no . u i b . c i p r . m a t r i x . N o t C o n v e r g e d E x c e p t i o n ; i m p o r t o r g . j g r a p h t . g r a p h . D i r e c t e d W e i g h t e d M u l t i g r a p h ; /∗∗

∗ Computes f o r t h e E i g e n v e c t o r C e n t r a l i t y o f a p a s s e d D i r e c t e d Weighted g r a p h .

∗ @author D a n i e l l e R o d r i g u e z

∗/

p u b l i c c l a s s E i g e n v e c t o r C e n t r a l i t y C o m p u t e r {

p r i v a t e D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ; p r i v a t e Map<W e i g h t e d V e r t e x , Double> e i g e n v e c t o r L i s t ;

/∗∗

∗ C o n s t r u c t an i n s t a n c e o f t h e E i g e n v e c t o r C e n t r a l i t y Computer f o r t h e p a s s e d g r a p h .

∗ @param g r a p h − t h e i n p u t g r a p h

∗/

p u b l i c E i g e n v e c t o r C e n t r a l i t y C o m p u t e r ( D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ){

t h i s . g r a p h = g r a p h ;

i n i t i a l i z e E i g e n v e c t o r L i s t ( ) ; }

/∗∗

∗ C a l c u l a t e and r e t u r n t h e E i g e n v e c t o r C e n t r a l i t y v a l u e s o f t h e v e r t i c e s i n t h e g r a p h .

∗ @ r e t u r n A map c o n t a i n i n g t h e v e r t i c e s a s t h e k e y and t h e i r c o r r e s p o n d i n g e i g e n v e c t o r c e n t r a l i t y a s t h e v a l u e

∗ @throws N o t C o n v e r g e d E x c e p t i o n I t i s be p o s s i b l e t h a t t h e g r a p h d o e s n ’ t c o n v e r g e t o an e i g e n v a l u e

∗/

p u b l i c Map<W e i g h t e d V e r t e x , Double> g e t E i g e n v e c t o r L i s t ( ) t h r o w s N o t C o n v e r g e d E x c e p t i o n{ c o m p u t e E i g e n v e c t o r ( ) ;

r e t u r n MapUtil . s o r t B y V a l u e ( e i g e n v e c t o r L i s t ) ; }

p r i v a t e v o i d i n i t i a l i z e E i g e n v e c t o r L i s t ( ) { e i g e n v e c t o r L i s t = new HashMap< >();

f o r ( W e i g h t e d V e r t e x wv : g r a p h . v e r t e x S e t ( ) ){

e i g e n v e c t o r L i s t . p u t ( wv , 0 . 0 ) ; }

}

p r i v a t e v o i d c o m p u t e E i g e n v e c t o r ( ) t h r o w s N o t C o n v e r g e d E x c e p t i o n{

D e n s e M a t r i x a d j M a t r i x = new D e n s e M a t r i x ( g e n e r a t e A d j a c e n c y M a t r i x ( ) ) ; d o u b l e [ ] m a x E i g e n v e c t = g e t M a x E i g e n v e c t o r ( a d j M a t r i x ) ;

L i s t<W e i g h t e d V e r t e x> v L i s t = new A r r a y L i s t<W e i g h t e d V e r t e x>(new T r e e S e t<W e i g h t e d V e r t e x>( g r a p h . v e r t e x S e t ( ) ) ) ; i n t e i g e n C n t = 0 ;

f o r ( W e i g h t e d V e r t e x v : v L i s t ){

e i g e n v e c t o r L i s t . p u t ( v , m a x E i g e n v e c t [ e i g e n C n t + + ] ) ; }

}

p r i v a t e d o u b l e [ ] g e t M a x E i g e n v e c t o r ( D e n s e M a t r i x a d j M a t r i x ) t h r o w s N o t C o n v e r g e d E x c e p t i o n { EVD evd = new EVD( g r a p h . v e r t e x S e t ( ) . s i z e ( ) ) . f a c t o r ( a d j M a t r i x ) ;

d o u b l e [ ] e i g e n V a l s = evd . g e t R e a l E i g e n v a l u e s ( ) ; i n t maxIndex = 0 ;

f o r ( i n t i = 0 ; i < e i g e n V a l s . l e n g t h ; i ++){

i f ( Math . a b s ( e i g e n V a l s [ i ] ) >Math . a b s ( e i g e n V a l s [ maxIndex ] ) ) maxIndex = i ;

}

D e n s e M a t r i x e i g e n V e c t o r s R = evd . g e t R i g h t E i g e n v e c t o r s ( ) ;

d o u b l e [ ] p r i n c i p a l E i g e n V e c t o r = g e t E i g e n V e c t o r ( e i g e n V e c t o r s R , maxIndex ) ; r e t u r n p r i n c i p a l E i g e n V e c t o r ;

}

p r i v a t e d o u b l e [ ] g e t E i g e n V e c t o r ( D e n s e M a t r i x e i g e n V e c t o r s , i n t maxIndex ) { i n t s i z e = e i g e n V e c t o r s . numRows ( ) ;

d o u b l e [ ] e i g e n V e c t = new d o u b l e [ s i z e ] ; f o r ( i n t i = 0 ; i < s i z e ; i ++){

e i g e n V e c t [ i ] = Math . a b s ( e i g e n V e c t o r s . g e t ( i , maxIndex ) ) ; }

r e t u r n e i g e n V e c t ; }

p r i v a t e d o u b l e [ ] [ ] g e n e r a t e A d j a c e n c y M a t r i x ( ){

L i s t<W e i g h t e d V e r t e x> v L i s t = new A r r a y L i s t<W e i g h t e d V e r t e x>(new T r e e S e t<W e i g h t e d V e r t e x>( g r a p h . v e r t e x S e t ( ) ) ) ; d o u b l e [ ] [ ] adjMat = g e n e r a t e E m p t y M a t r i x ( v L i s t . s i z e ( ) ) ;

i n t row = 0 , c o l = 0 ;

f o r ( W e i g h t e d V e r t e x s o u r c e : v L i s t ){

row++;

}

r e t u r n adjMat ; }

p r i v a t e d o u b l e [ ] [ ] g e n e r a t e E m p t y M a t r i x ( i n t s i z e ){

d o u b l e [ ] [ ] a r r a y = new d o u b l e [ s i z e ] [ s i z e ] ; f o r ( d o u b l e [ ] a : a r r a y ) {

A r r a y s . f i l l ( a , 0 ) ; }

f o r ( i n t i =0; i<s i z e ; i ++) a r r a y [ i ] [ i ] = 1 ; r e t u r n a r r a y ;

} }

MapUtil.java

p a c k a g e c e n t r a l i t y ;

i m p o r t j a v a . u t i l . C o l l e c t i o n s ; i m p o r t j a v a . u t i l . Comparator ; i m p o r t j a v a . u t i l . LinkedHashMap ; i m p o r t j a v a . u t i l . L i n k e d L i s t ; i m p o r t j a v a . u t i l . L i s t ; i m p o r t j a v a . u t i l . Map ; c l a s s MapUtil {

p u b l i c s t a t i c <K, V e x t e n d s Comparable<? s u p e r V>>Map<K, V>

s o r t B y V a l u e ( Map<K, V>map ) {

L i s t<Map . Entry<K, V>> l i s t =

new L i n k e d L i s t<Map . Entry<K, V>>( map . e n t r y S e t ( ) ) ; C o l l e c t i o n s . s o r t ( l i s t , new Comparator<Map . Entry<K, V>>() {

p u b l i c i n t compare ( Map . Entry<K, V>o1 , Map . Entry<K, V> o2 ) {

r e t u r n ( o1 . g e t V a l u e ( ) ) . compareTo ( o2 . g e t V a l u e ( ) ) ; }

} ) ;

Map<K, V> r e s u l t = new LinkedHashMap<K, V>( ) ; f o r (Map . Entry<K, V> e n t r y : l i s t )

{

r e s u l t . p u t ( e n t r y . g e t K e y ( ) , e n t r y . g e t V a l u e ( ) ) ; }

r e t u r n r e s u l t ; }

}

GraphFileReader.java

p a c k a g e f i l e s ;

i m p o r t g r a p h . WeightedEdgeWithType ; i m p o r t g r a p h . W e i g h t e d V e r t e x ; i m p o r t j a v a . i o . F i l e R e a d e r ; i m p o r t j a v a . i o . I O E x c e p t i o n ;

i m p o r t o r g . j g r a p h t . g r a p h . D i r e c t e d W e i g h t e d M u l t i g r a p h ; i m p o r t com . o p e n c s v . CSVReader ;

/∗∗

∗ C l a s s f o r r e a d i n g t h e . c s v f i l e c o n t a i n i n g t h e g r a p h .

∗ R e t u r n s a Graph O b j e c t o f t h e f i l e a f t e r r e a d i n g i t .

∗ @author D a n i e l l e R o d r i g u e z

∗/

p u b l i c c l a s s G r a p h F i l e R e a d e r { p r i v a t e F i l e R e a d e r f i l e ;

D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ; /∗∗

∗ C o n s t r u c t o r a c c e p t i n g t h e f i l e c o n t a i n i n g t h e g r a p h

∗ @param f i l e − F i l e t o be r e a d .

∗/

p u b l i c G r a p h F i l e R e a d e r ( F i l e R e a d e r f i l e ){

t h i s . f i l e = f i l e ; }

/∗∗

∗ Reads t h e c o n t e n t s o f t h e f i l e and r e t u r n s t h e O b j e c t c o n t a i n i n g t h e g r a p h

∗ @ r e t u r n O b j e c t t h a t i s t h e g r a p h i c a l r e p r e s e n t a t i o n o f t h e c o n t e n t s o f t h e f i l e

∗ @throws I O E x c e p t i o n

∗/

p u b l i c D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g e n e r a t e G r a p h F r o m F i l e ( ) t h r o w s I O E x c e p t i o n{ g r a p h = new D i r e c t e d W e i g h t e d M u l t i g r a p h<>(WeightedEdgeWithType . c l a s s ) ;

CSVReader r e a d e r = new CSVReader ( f i l e ) ; S t r i n g [ ] n e x t L i n e ;

w h i l e ( ( n e x t L i n e = r e a d e r . r e a d N e x t ( ) ) != n u l l ) {

addToGraph ( n e x t L i n e ) ; }

r e a d e r . c l o s e ( ) ; r e t u r n g r a p h ; }

/∗

∗ Adds a new e d g e t o t h e g r a p h s i n c e e a c h e d g e i s f o r m a t t e d a s :

∗ n o d e 1 , n o d e 2 , n o d e 1 t y p e , n o d e 2 t y p e , e d g e t y p e , e d g e w e i g h t

∗/

p r i v a t e v o i d addToGraph ( S t r i n g [ ] l i n e V a l s ){

W e i g h t e d V e r t e x s o u r c e = new W e i g h t e d V e r t e x ( l i n e V a l s [ 0 ] . r e p l a c e A l l ( ”\ \s + ” , ” ” ) , l i n e V a l s [ 2 ] . r e p l a c e A l l ( ”\ \s + ” , ” ” ) ) ; g r a p h . a d d V e r t e x ( s o u r c e ) ;

W e i g h t e d V e r t e x d e s t = new W e i g h t e d V e r t e x ( l i n e V a l s [ 1 ] . r e p l a c e A l l ( ”\ \s + ” , ” ” ) , l i n e V a l s [ 3 ] . r e p l a c e A l l ( ”\ \s + ” , ” ” ) ) ; g r a p h . a d d V e r t e x ( d e s t ) ;

WeightedEdgeWithType e d g e = g r a p h . addEdge ( s o u r c e , d e s t ) ; e d g e . s e t T y p e ( l i n e V a l s [ 4 ] . r e p l a c e A l l ( ”\ \s + ” , ” ” ) ) ;

g r a p h . s e t E d g e W e i g h t ( e d g e , D o u b l e . p a r s e D o u b l e ( l i n e V a l s [ 5 ] ) ) ; }

}

GraphFileWriter.java

p a c k a g e f i l e s ;

i m p o r t g r a p h . WeightedEdgeWithType ; i m p o r t g r a p h . W e i g h t e d V e r t e x ; i m p o r t j a v a . i o . F i l e W r i t e r ; i m p o r t j a v a . i o . I O E x c e p t i o n ;

i m p o r t o r g . j g r a p h t . g r a p h . D i r e c t e d W e i g h t e d S u b g r a p h ; i m p o r t com . o p e n c s v . CSVWriter ;

/∗∗

∗ C l a s s f o r w r i t i n g t h e . c s v f i l e t h a t w i l l c o n t a i n t h e s u b g r a p h g e n e r a t e d i n t h e program

∗ @author D a n i e l l e R o d r i g u e z

∗/

p u b l i c c l a s s G r a p h F i l e W r i t e r { p r i v a t e F i l e W r i t e r f i l e ;

p u b l i c G r a p h F i l e W r i t e r ( F i l e W r i t e r f i l e ){

t h i s . f i l e = f i l e ; }

p u b l i c v o i d w r i t e S u b g r a p h T o F i l e ( D i r e c t e d W e i g h t e d S u b g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> s u b g r a p h ) t h r o w s I O E x c e p t i o n{ CSVWriter w r i t e r = new CSVWriter ( f i l e ) ;

f o r ( WeightedEdgeWithType e d g e : s u b g r a p h . e d g e S e t ( ) ){ S t r i n g [ ] d e t a i l s = g e t E d g e D e t a i l s ( s u b g r a p h , e d g e ) ; w r i t e r . w r i t e N e x t ( d e t a i l s ) ;

}

w r i t e r . c l o s e ( ) ; }

p r i v a t e S t r i n g [ ] g e t E d g e D e t a i l s ( D i r e c t e d W e i g h t e d S u b g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> s u b g r a p h , WeightedEdgeWithType wEdge ){

W e i g h t e d V e r t e x s o u r c e = s u b g r a p h . g e t E d g e S o u r c e ( wEdge ) ; W e i g h t e d V e r t e x t a r g e t = s u b g r a p h . g e t E d g e T a r g e t ( wEdge ) ; S t r i n g [ ] l i s t = {

s o u r c e . getName ( ) , t a r g e t . getName ( ) , s o u r c e . g e t T y p e ( ) , t a r g e t . g e t T y p e ( ) , wEdge . g e t T y p e ( ) ,

D o u b l e . t o S t r i n g ( s u b g r a p h . g e t E d g e W e i g h t ( wEdge ) ) };

r e t u r n l i s t ; }

}

GraphPanel.java

p a c k a g e window . v i e w s ;

i m p o r t g r a p h . WeightedEdgeWithType ; i m p o r t g r a p h . W e i g h t e d V e r t e x ; i m p o r t j a v a . awt . B o r d e r L a y o u t ; i m p o r t j a v a . awt . C o l o r ;

i m p o r t j a v a . awt . e v e n t . MouseAdapter ; i m p o r t j a v a . awt . e v e n t . MouseEvent ; i m p o r t j a v a . u t i l . Map ;

i m p o r t o r g . j g r a p h t . e x t . JGraphXAdapter ;

i m p o r t o r g . j g r a p h t . g r a p h . D i r e c t e d W e i g h t e d M u l t i g r a p h ; i m p o r t com . mxgraph . l a y o u t . m x F a s t O r g a n i c L a y o u t ; i m p o r t com . mxgraph . l a y o u t . m x P a r a l l e l E d g e L a y o u t ; i m p o r t com . mxgraph . model . m x C e l l ;

i m p o r t com . mxgraph . model . m x I C e l l ;

i m p o r t com . mxgraph . s w i n g . mxGraphComponent ; /∗∗

∗ P a n e l t h a t c o n t a i n s t h e g r a p h t h a t i s l o a d e d i n t o t h e t o o l .

∗ @author E i na d

∗/

@ S u p p r e s s W a r n i n g s ( ” s e r i a l ” )

p u b l i c c l a s s GraphPanel e x t e n d s J P a n e l {

p r i v a t e D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ; JGraphXAdapter<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h A d a p t e r ;

mxGraphComponent graphCom ; m x C e l l s e l e c t e d C e l l ; d o u b l e s c a l e ; /∗∗

∗ C r e a t e t h e p a n e l .

∗/

p u b l i c GraphPanel ( D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ) { t h i s . g r a p h = g r a p h ;

// s e t B o r d e r ( n u l l ) ;

s e t B a c k g r o u n d ( C o l o r . g r e e n ) ; showGraph ( ) ;

}

p u b l i c JGraphXAdapter<W e i g h t e d V e r t e x , WeightedEdgeWithType> g e t G r a p h A d a p t e r ( ){ r e t u r n g r a p h A d a p t e r ;

}

p u b l i c mxGraphComponent getGraphComponent ( ){

r e t u r n graphCom ; }

/∗∗

∗ P l a c e s t h e l o a d e d g r a p h i n t o a J P a n e l

∗/

p u b l i c v o i d showGraph ( ){

g r a p h A d a p t e r = new JGraphXAdapter<>(g r a p h ) ; W i n d o w U t i l s . s e t u p G r a p h ( g r a p h A d a p t e r ) ;

m x F a s t O r g a n i c L a y o u t o r g a n i c L a y o u t = new m x F a s t O r g a n i c L a y o u t ( g r a p h A d a p t e r ) ; m x P a r a l l e l E d g e L a y o u t p a r a l l e l L a y o u t = new m x P a r a l l e l E d g e L a y o u t ( g r a p h A d a p t e r ) ; o r g a n i c L a y o u t . s e t F o r c e C o n s t a n t ( 1 5 0 ) ; // t h e h i g h e r , t h e more s e p a r a t e d o r g a n i c L a y o u t . e x e c u t e ( g r a p h A d a p t e r . g e t D e f a u l t P a r e n t ( ) ) ;

p a r a l l e l L a y o u t . e x e c u t e ( g r a p h A d a p t e r . g e t D e f a u l t P a r e n t ( ) ) ; graphCom = new mxGraphComponent ( g r a p h A d a p t e r ) ;

graphCom . s e t C o n n e c t a b l e ( f a l s e ) ; t h i s . s e t L a y o u t ( new B o r d e r L a y o u t ( ) ) ; t h i s . add ( graphCom , B o r d e r L a y o u t .CENTER ) ; }

p u b l i c v o i d c o l o r V e r t i c e s ( S e t<W e i g h t e d V e r t e x> v e r t i c e s T o B e C o l o r e d , S t r i n g c o l o r ){

Map<W e i g h t e d V e r t e x , m x I C e l l> v e r t e x T a b l e = g r a p h A d a p t e r . g e t V e r t e x T o C e l l M a p ( ) ;

O b j e c t [ ] m x C e l l = new O b j e c t [ v e r t i c e s T o B e C o l o r e d . s i z e ( ) ] ; i n t i = 0 ;

f o r ( W e i g h t e d V e r t e x c v : v e r t i c e s T o B e C o l o r e d ){

m x I C e l l c e l l = v e r t e x T a b l e . g e t ( c v ) ; m x C e l l [ i ++] = ( O b j e c t ) c e l l ; }

g r a p h A d a p t e r . s e t C e l l S t y l e ( ” f i l l C o l o r =”+c o l o r , m x C e l l ) ; }

v o i d s e t G r a p h L i s t e n e r ( f i n a l J P a n e l e l e m e n t I n f o C o n t e n t P ){

f i n a l mxGraphComponent graphComponent = t h i s . getGraphComponent ( ) ; graphComponent . g e t G r a p h C o n t r o l ( ) . a d d M o u s e L i s t e n e r ( new MouseAdapter ( ){

@ O v e r r i d e

p u b l i c v o i d m o u s e R e l e a s e d ( MouseEvent e ){

O b j e c t c e l l = graphComponent . g e t C e l l A t ( e . getX ( ) , e . getY ( ) ) ; i f ( c e l l != n u l l ){

s e l e c t e d C e l l = ( m x C e l l ) c e l l ;

S t r i n g B u i l d e r s b = new S t r i n g B u i l d e r ( ) ; t r y{

W e i g h t e d V e r t e x wv = ( W e i g h t e d V e r t e x ) s e l e c t e d C e l l . g e t V a l u e ( ) ; e l e m e n t I n f o C o n t e n t P . r e m o v e A l l ( ) ;

s b . append ( ” Name = ” ) . append ( wv . getName ( ) ) ;

e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; s b . s e t L e n g t h ( 0 ) ;

s b . append ( ” Type = ” ) . append ( wv . g e t T y p e ( ) ) ;

e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; s b . s e t L e n g t h ( 0 ) ;

s b . append ( ” Weight = ” ) . append ( wv . g e t W e i g h t ( ) ) ; e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; e l e m e n t I n f o C o n t e n t P . r e v a l i d a t e ( ) ;

e l e m e n t I n f o C o n t e n t P . r e p a i n t ( ) ;

} c a t c h ( C l a s s C a s t E x c e p t i o n c c e ){

WeightedEdgeWithType wEdge = ( WeightedEdgeWithType ) s e l e c t e d C e l l . g e t V a l u e ( ) ; e l e m e n t I n f o C o n t e n t P . r e m o v e A l l ( ) ;

s b . append ( ” S o u r c e = ” ) . append ( g r a p h . g e t E d g e S o u r c e ( wEdge ) ) ; e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; s b . s e t L e n g t h ( 0 ) ;

s b . append ( ” T a r g e t = ” ) . append ( g r a p h . g e t E d g e T a r g e t ( wEdge ) ) ; e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; s b . s e t L e n g t h ( 0 ) ;

s b . append ( ” Type = ” ) . append ( wEdge . g e t T y p e ( ) ) ; e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; s b . s e t L e n g t h ( 0 ) ;

s b . append ( ” Weight = ” ) . append ( g r a p h . g e t E d g e W e i g h t ( wEdge ) ) ; e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; e l e m e n t I n f o C o n t e n t P . r e v a l i d a t e ( ) ;

e l e m e n t I n f o C o n t e n t P . r e p a i n t ( ) ; }

} e l s e {

e l e m e n t I n f o C o n t e n t P . r e m o v e A l l ( ) ; e l e m e n t I n f o C o n t e n t P . r e v a l i d a t e ( ) ; e l e m e n t I n f o C o n t e n t P . r e p a i n t ( ) ; }

} }) ; }

v o i d zoomGraph ( b o o l e a n i s Z o o m I n ){

i f ( i s Z o o m I n ){ graphCom . zoomIn ( ) ; } e l s e{

graphCom . zoomOut ( ) ; }

}

m x C e l l g e t S e l e c t e d C e l l ( ){

r e t u r n s e l e c t e d C e l l ; }

}

SubgraphWindow.java

p a c k a g e window . v i e w s ;

i m p o r t j a v a . awt . B o r d e r L a y o u t ; i m p o r t j a v a . awt . C o l o r ; i m p o r t j a v a . awt . F i l e D i a l o g ; i m p o r t j a v a . awt . FlowLayout ; i m p o r t j a v a . awt . Font ;

i m p o r t j a v a . awt . e v e n t . A c t i o n E v e n t ; i m p o r t j a v a . awt . e v e n t . A c t i o n L i s t e n e r ; i m p o r t j a v a . awt . e v e n t . MouseAdapter ; i m p o r t j a v a . awt . e v e n t . MouseEvent ; i m p o r t j a v a . i o . F i l e W r i t e r ; i m p o r t j a v a . i o . I O E x c e p t i o n ; i m p o r t j a v a . u t i l . A r r a y L i s t ; i m p o r t j a v a . u t i l . H a s h S e t ; i m p o r t j a v a . u t i l . L i s t ; i m p o r t j a v a . u t i l . Map ; i m p o r t j a v a . u t i l . S e t ;

i m p o r t j a v a x . s w i n g . BoxLayout ; i m p o r t j a v a x . s w i n g . J B u t t o n ; i m p o r t j a v a x . s w i n g . JFrame ; i m p o r t j a v a x . s w i n g . J L a b e l ; i m p o r t j a v a x . s w i n g . J P a n e l ;

i m p o r t j a v a x . s w i n g . b o r d e r . EmptyBorder ; i m p o r t j a v a x . s w i n g . b o r d e r . L i n e B o r d e r ; i m p o r t o r g . j g r a p h t . GraphPath ;

i m p o r t o r g . j g r a p h t . e x t . JGraphXAdapter ;

i m p o r t o r g . j g r a p h t . g r a p h . D i r e c t e d W e i g h t e d M u l t i g r a p h ; i m p o r t o r g . j g r a p h t . g r a p h . D i r e c t e d W e i g h t e d S u b g r a p h ; i m p o r t window . v i e w s . u t i l s . U s e r C o n s t a n t s ;

i m p o r t com . mxgraph . l a y o u t . m x F a s t O r g a n i c L a y o u t ; i m p o r t com . mxgraph . l a y o u t . m x P a r a l l e l E d g e L a y o u t ; i m p o r t com . mxgraph . model . m x C e l l ;

i m p o r t com . mxgraph . model . m x I C e l l ;

i m p o r t com . mxgraph . s w i n g . mxGraphComponent ;

i m p o r t g r a p h . W e i g h t e d V e r t e x ;

@ S u p p r e s s W a r n i n g s ( ” s e r i a l ” )

p u b l i c c l a s s SubgraphWindow e x t e n d s JFrame { p r i v a t e S u b g r a p h E x t r a c t o r s e ;

D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ; D i r e c t e d W e i g h t e d S u b g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> completeSubG ; JGraphXAdapter<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h A d a p t e r ;

p r i v a t e J P a n e l e l e m e n t I n f o C o n t e n t P , s u b g r a p h I n f o C o n t e n t P ; p r i v a t e J P a n e l c o n t e n t P a n e ;

S u b g r a p h E x t r a c t o r g e t E x t r a c t o r ( ){

r e t u r n s e ; }

S e t<W e i g h t e d V e r t e x> g e t C h o s e n V e r t i c e s ( ){

r e t u r n s e . g e t C h o s e n V e r t i c e s ( ) ; }

/∗∗

∗ C r e a t e t h e f r a m e .

∗/

p u b l i c SubgraphWindow ( D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ){

t h i s . g r a p h = g r a p h ;

s e t T i t l e ( ” G e n e r a t e d Subgraph ” ) ; s e t R e s i z a b l e ( f a l s e ) ;

s e t B o u n d s ( 1 0 0 , 1 0 0 , 7 0 0 , 5 0 0 ) ; c o n t e n t P a n e = new J P a n e l ( ) ;

c o n t e n t P a n e . s e t B o r d e r ( new EmptyBorder ( 5 , 5 , 5 , 5 ) ) ; s e t C o n t e n t P a n e ( c o n t e n t P a n e ) ;

c o n t e n t P a n e . s e t L a y o u t ( n u l l ) ; J P a n e l e l e m e n t I n f o P = new J P a n e l ( ) ;

e l e m e n t I n f o P . s e t B o u n d s ( 4 5 7 , 1 2 4 , 2 1 7 , 2 5 8 ) ;

e l e m e n t I n f o P . s e t B o r d e r ( new L i n e B o r d e r ( C o l o r . d e c o d e (”#808 B96 ” ) ) ) ; c o n t e n t P a n e . add ( e l e m e n t I n f o P ) ;

e l e m e n t I n f o P . s e t L a y o u t ( n u l l ) ;

J P a n e l e l e m e n t I n f o L a b e l P = new J P a n e l ( ) ;

e l e m e n t I n f o L a b e l P . s e t B a c k g r o u n d ( C o l o r . d e c o d e (”#808 B96 ” ) ) ; e l e m e n t I n f o L a b e l P . s e t B o u n d s ( 0 , 0 , 2 1 7 , 2 3 ) ;

e l e m e n t I n f o P . add ( e l e m e n t I n f o L a b e l P ) ;

e l e m e n t I n f o L a b e l P . s e t L a y o u t ( new FlowLayout ( FlowLayout . CENTER, 5 , 5 ) ) ; J L a b e l e l e m e n t I n f o L = new J L a b e l ( ” E l e m e n t I n f o r m a t i o n ” ) ;

e l e m e n t I n f o L . s e t F o n t ( new Font ( ” Tahoma ” , Font . BOLD, 1 2 ) ) ; e l e m e n t I n f o L a b e l P . add ( e l e m e n t I n f o L ) ;

e l e m e n t I n f o C o n t e n t P = new J P a n e l ( ) ;

e l e m e n t I n f o C o n t e n t P . s e t B o u n d s ( 0 , 2 2 , 2 1 7 , 2 3 6 ) ;

e l e m e n t I n f o C o n t e n t P . s e t L a y o u t ( new BoxLayout ( e l e m e n t I n f o C o n t e n t P , BoxLayout . Y AXIS ) ) ; e l e m e n t I n f o P . add ( e l e m e n t I n f o C o n t e n t P ) ;

J B u t t o n c l o s e B = new J B u t t o n ( ” C l o s e ” ) ;

c l o s e B . a d d A c t i o n L i s t e n e r ( new A c t i o n L i s t e n e r ( ) { p u b l i c v o i d a c t i o n P e r f o r m e d ( A c t i o n E v e n t e ) { s e t V i s i b l e ( f a l s e ) ;

d i s p o s e ( ) ; }

}) ;

c l o s e B . s e t B o u n d s ( 4 7 5 , 4 1 0 , 8 9 , 2 3 ) ; W i n d o w U t i l s . s e t B u t t o n S t y l e ( c l o s e B ) ; c o n t e n t P a n e . add ( c l o s e B ) ;

J B u t t o n e x p o r t B = new J B u t t o n ( ” E x p o r t ” ) ; f i n a l JFrame main = t h i s ;

e x p o r t B . a d d A c t i o n L i s t e n e r ( new A c t i o n L i s t e n e r ( ) { p u b l i c v o i d a c t i o n P e r f o r m e d ( A c t i o n E v e n t e ) {

F i l e D i a l o g f d = new F i l e D i a l o g ( main , ” S a v e Subgraph . . . ” , F i l e D i a l o g . SAVE ) ; f d . s e t V i s i b l e ( t r u e ) ;

S t r i n g f i l e N a m e = f d . g e t D i r e c t o r y ( ) + f d . g e t F i l e ( ) ; t r y {

G r a p h F i l e W r i t e r gfw = new G r a p h F i l e W r i t e r ( new F i l e W r i t e r ( f i l e N a m e ) ) ; gfw . w r i t e S u b g r a p h T o F i l e ( completeSubG ) ;

} c a t c h ( I O E x c e p t i o n IOe ) { IOe . p r i n t S t a c k T r a c e ( ) ; }

} }) ;

e x p o r t B . s e t B o u n d s ( 5 7 4 , 4 1 0 , 8 9 , 2 3 ) ; W i n d o w U t i l s . s e t B u t t o n S t y l e ( e x p o r t B ) ; c o n t e n t P a n e . add ( e x p o r t B ) ;

J P a n e l s u b g r a p h I n f o P = new J P a n e l ( ) ; s u b g r a p h I n f o P . s e t B o u n d s ( 4 5 7 , 1 1 , 2 1 7 , 1 0 2 ) ;

s u b g r a p h I n f o P . s e t B o r d e r ( new L i n e B o r d e r ( C o l o r . d e c o d e (”#808 B96 ” ) ) ) ; c o n t e n t P a n e . add ( s u b g r a p h I n f o P ) ;

s u b g r a p h I n f o P . s e t L a y o u t ( n u l l ) ;

J P a n e l s u b g r a p h I n f o L a b e l P = new J P a n e l ( ) ; s u b g r a p h I n f o L a b e l P . s e t B o u n d s ( 0 , 0 , 2 1 7 , 2 4 ) ;

s u b g r a p h I n f o L a b e l P . s e t B a c k g r o u n d ( C o l o r . d e c o d e (”#808 B96 ” ) ) ; s u b g r a p h I n f o P . add ( s u b g r a p h I n f o L a b e l P ) ;

s u b g r a p h I n f o L a b e l P . s e t L a y o u t ( new FlowLayout ( FlowLayout . CENTER, 5 , 5 ) ) ; J L a b e l s u b g r a p h I n f o L = new J L a b e l ( ” Subgraph I n f o r m a t i o n ” ) ;

s u b g r a p h I n f o L . s e t F o n t ( new Font ( ” Tahoma ” , Font . BOLD, 1 2 ) ) ; s u b g r a p h I n f o L a b e l P . add ( s u b g r a p h I n f o L ) ;

s u b g r a p h I n f o C o n t e n t P = new J P a n e l ( ) ;

s u b g r a p h I n f o C o n t e n t P . s e t B o u n d s ( 0 , 2 2 , 2 1 7 , 8 0 ) ;

s u b g r a p h I n f o C o n t e n t P . s e t L a y o u t ( new BoxLayout ( s u b g r a p h I n f o C o n t e n t P , BoxLayout . Y AXIS ) ) ; s u b g r a p h I n f o P . add ( s u b g r a p h I n f o C o n t e n t P ) ;

}

v o i d g e n e r a t e S u b g r a p h ( S u b g r a p h E x t r a c t o r s e , S e t<W e i g h t e d V e r t e x> a d d V e r t ){

t h i s . s e = s e ;

completeSubG = s e . g e n e r a t e S u b g r a p h ( f a l s e , a d d V e r t ) ;

D i r e c t e d W e i g h t e d S u b g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> subG = s e . g e n e r a t e S u b g r a p h ( t r u e , a d d V e r t ) ; i f ( s e . g e t E d g e T h r e s h o l d ( ) == D o u b l e . MAX VALUE)

s u b g r a p h I n f o C o n t e n t P . add ( new J L a b e l ( ” T h r e s h o l d : n / a ” ) ) ; e l s e

s u b g r a p h I n f o C o n t e n t P . add ( new J L a b e l ( ” T h r e s h o l d : ” + s e . g e t E d g e T h r e s h o l d ( ) ) ) ; s u b g r a p h I n f o C o n t e n t P . add ( new J L a b e l ( ” Hop Number : ” + s e . g e t H o p s ( ) ) ) ;

g r a p h A d a p t e r = new JGraphXAdapter<>(subG ) ; g r a p h A d a p t e r . g e t M o d e l ( ) . b e g i n U p d a t e ( ) ; t r y {

h i d e E d g e s ( g r a p h A d a p t e r ) ; } f i n a l l y {

g r a p h A d a p t e r . g e t M o d e l ( ) . endUpdate ( ) ; }

Map<W e i g h t e d V e r t e x , m x I C e l l> v e r t e x T a b l e = g r a p h A d a p t e r . g e t V e r t e x T o C e l l M a p ( ) ;

S e t<W e i g h t e d V e r t e x> c h o s e n = s e . g e t C h o s e n V e r t i c e s ( ) ; O b j e c t [ ] m x C e l l = new O b j e c t [ c h o s e n . s i z e ( ) ] ;

i n t i = 0 ;

f o r ( W e i g h t e d V e r t e x c v : c h o s e n ){

m x I C e l l c e l l = v e r t e x T a b l e . g e t ( c v ) ; m x C e l l [ i ++] = ( O b j e c t ) c e l l ; }

g r a p h A d a p t e r . s e t C e l l S t y l e ( ” f i l l C o l o r =”+U s e r C o n s t a n t s . CHOSEN COLOR, m x C e l l ) ; W i n d o w U t i l s . s e t u p G r a p h ( g r a p h A d a p t e r ) ;

mxGraphComponent graphCom = new mxGraphComponent ( g r a p h A d a p t e r ) ; graphCom . s e t C o n n e c t a b l e ( f a l s e ) ;

s e t G r a p h M o u s e L i s t e n e r ( graphCom ) ;

m x F a s t O r g a n i c L a y o u t o r g a n i c L a y o u t = new m x F a s t O r g a n i c L a y o u t ( g r a p h A d a p t e r ) ; m x P a r a l l e l E d g e L a y o u t p a r a l l e l L a y o u t = new m x P a r a l l e l E d g e L a y o u t ( g r a p h A d a p t e r ) ; o r g a n i c L a y o u t . s e t F o r c e C o n s t a n t ( 1 5 0 ) ; // t h e h i g h e r , t h e more s e p a r a t e d o r g a n i c L a y o u t . e x e c u t e ( g r a p h A d a p t e r . g e t D e f a u l t P a r e n t ( ) ) ;

p a r a l l e l L a y o u t . e x e c u t e ( g r a p h A d a p t e r . g e t D e f a u l t P a r e n t ( ) ) ; J P a n e l s ub gr a ph P = new J P a n e l ( ) ;

s ub gr a ph P . s e t B o u n d s ( 1 0 , 1 1 , 4 3 7 , 4 3 9 ) ; s ub gr a ph P . s e t L a y o u t ( new B o r d e r L a y o u t ( ) ) ; s ub gr a ph P . add ( graphCom ) ;

c o n t e n t P a n e . add ( s ub gr a ph P ) ; }

p r i v a t e v o i d s e t G r a p h M o u s e L i s t e n e r ( f i n a l mxGraphComponent graphCom ) { graphCom . g e t G r a p h C o n t r o l ( ) . a d d M o u s e L i s t e n e r ( new MouseAdapter ( ) {

p u b l i c v o i d m o u s e R e l e a s e d ( MouseEvent e ) {

O b j e c t c e l l = graphCom . g e t C e l l A t ( e . getX ( ) , e . getY ( ) ) ; m x C e l l c e l l M = ( m x C e l l ) c e l l ;

m x I C e l l p a r e n t = n u l l ;

i f ( c e l l M != n u l l && ! i s T r a n s i t i v e E d g e ( c e l l M ) ){

p a r e n t = c e l l M . g e t P a r e n t ( ) ;

S t r i n g B u i l d e r s b = new S t r i n g B u i l d e r ( ) ; t r y{

W e i g h t e d V e r t e x wv = ( W e i g h t e d V e r t e x ) c e l l M . g e t V a l u e ( ) ;

e l e m e n t I n f o C o n t e n t P . r e m o v e A l l ( ) ;

s b . append ( ” Name = ” ) . append ( wv . getName ( ) ) ;

e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; s b . s e t L e n g t h ( 0 ) ;

s b . append ( ” Type = ” ) . append ( wv . g e t T y p e ( ) ) ;

e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; s b . s e t L e n g t h ( 0 ) ;

s b . append ( ” Weight = ” ) . append ( wv . g e t W e i g h t ( ) ) ; e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ;

} c a t c h ( C l a s s C a s t E x c e p t i o n c c e ){

WeightedEdgeWithType wEdge = ( WeightedEdgeWithType ) c e l l M . g e t V a l u e ( ) ; e l e m e n t I n f o C o n t e n t P . r e m o v e A l l ( ) ;

s b . append ( ” S o u r c e = ” ) . append ( g r a p h . g e t E d g e S o u r c e ( wEdge ) ) ; e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; s b . s e t L e n g t h ( 0 ) ;

s b . append ( ” T a r g e t = ” ) . append ( g r a p h . g e t E d g e T a r g e t ( wEdge ) ) ; e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; s b . s e t L e n g t h ( 0 ) ;

s b . append ( ” Type = ” ) . append ( wEdge . g e t T y p e ( ) ) ; e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; s b . s e t L e n g t h ( 0 ) ;

s b . append ( ” Weight = ” ) . append ( g r a p h . g e t E d g e W e i g h t ( wEdge ) ) ; e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; e l e m e n t I n f o C o n t e n t P . r e v a l i d a t e ( ) ;

e l e m e n t I n f o C o n t e n t P . r e p a i n t ( ) ; }

} e l s e {

e l e m e n t I n f o C o n t e n t P . r e m o v e A l l ( ) ; e l e m e n t I n f o C o n t e n t P . r e v a l i d a t e ( ) ; e l e m e n t I n f o C o n t e n t P . r e p a i n t ( ) ; }

i f ( e . g e t C l i c k C o u n t ( ) == 1 ){

i f ( c e l l != n u l l && i s T r a n s i t i v e E d g e ( c e l l M ) ) {

i f ( c e l l M . i s C o l l a p s e d ( ) ){

g r a p h A d a p t e r . f o l d C e l l s ( f a l s e , f a l s e , new O b j e c t [ ]{c e l l}) ; t o g g l e E l e m e n t s ( c e l l M , t r u e , e ) ;

g r a p h A d a p t e r . s e t C e l l S t y l e ( ” s t r o k e C o l o r=”+U s e r C o n s t a n t s .SUBGRAPH BACKGROUND+”; f o n t C o l o r=”+U s e r C o n s t a n t s .SUBGRAPH BACKGROUND, new O b j e c t [ ]{c e l l}) ; }

}

} e l s e i f ( e . g e t C l i c k C o u n t ( ) == 2 ){

i f ( c e l l != n u l l && p a r e n t != g r a p h A d a p t e r . g e t D e f a u l t P a r e n t ( ) ){

i f ( ! c e l l M . i s C o l l a p s e d ( ) ){

g r a p h A d a p t e r . f o l d C e l l s ( t r u e , f a l s e , new O b j e c t [ ]{p a r e n t}) ; t o g g l e E l e m e n t s ( ( m x C e l l ) p a r e n t , f a l s e , e ) ;

g r a p h A d a p t e r . s e t C e l l S t y l e ( ” d a s h e d=t r u e ; s t r o k e C o l o r=”+U s e r C o n s t a n t s . INDIRECT COLOR+”; f o n t C o l o r=”+U s e r C o n s t a n t s . INDIRECT COLOR , new O b j e c t [ ]{p a r e n t}) ; }

} } } }) ; }

p r i v a t e b o o l e a n i s T r a n s i t i v e E d g e ( m x C e l l e d g e ){

r e t u r n e d g e . i s E d g e ( ) && e d g e . g e t C h i l d C o u n t ( ) > 0 ; }

p r i v a t e v o i d t o g g l e E l e m e n t s ( m x C e l l c e l l , b o o l e a n v i s i b l e , MouseEvent e ){

d o u b l e INIT LOC = 2 . 0 ;

i n t numOfChild = c e l l . g e t C h i l d C o u n t ( ) ; S e t<O b j e c t> c e l l L i s t = new HashSet< >();

d o u b l e l o c = 0 ;

f o r ( i n t i = 0 ; i < numOfChild ; i ++){

m x I C e l l c h i l d = c e l l . g e t C h i l d A t ( i ) ; c e l l L i s t . add ( ( O b j e c t ) c h i l d ) ;

l o c = g r a p h A d a p t e r . g e t C e l l G e o m e t r y ( c h i l d ) . getX ( ) + g r a p h A d a p t e r . g e t C e l l G e o m e t r y ( c h i l d ) . getY ( ) ; c h i l d . s e t V i s i b l e ( v i s i b l e ) ;

i n t numOfEdges = c h i l d . g e t E d g e C o u n t ( ) ; f o r ( i n t j = 0 ; j < numOfEdges ; j ++){

m x I C e l l e d g e = c h i l d . g e t E d g e A t ( j ) ; e d g e . s e t V i s i b l e ( v i s i b l e ) ;

} }

i f ( v i s i b l e && l o c==INIT LOC ){

g r a p h A d a p t e r . m o v e C e l l s ( c e l l L i s t . t o A r r a y ( ) , e . getX ( ) , e . getY ( ) ) ; }

}

p r i v a t e v o i d h i d e E d g e s ( JGraphXAdapter<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h A d a p t e r ){

L i s t<GraphPath<W e i g h t e d V e r t e x , WeightedEdgeWithType>> c o n n e c t i n g P a t h s = s e . g e t P a t h L i s t ( ) ;

Map<W e i g h t e d V e r t e x , m x I C e l l> v e r t e x T a b l e = g r a p h A d a p t e r . g e t V e r t e x T o C e l l M a p ( ) ;

f o r ( GraphPath<W e i g h t e d V e r t e x , WeightedEdgeWithType> c u r P a t h : c o n n e c t i n g P a t h s ){

i f ( c u r P a t h . g e t L e n g t h ( ) > 1 && d o e s N o t C o n t a i n S e l e c t e d ( c u r P a t h ) ){

O b j e c t m a i n P a r e n t = i n s e r t P a r e n t E d g e ( v e r t e x T a b l e . g e t ( c u r P a t h . g e t S t a r t V e r t e x ( ) ) , v e r t e x T a b l e . g e t ( c u r P a t h . g e t E n d V e r t e x ( ) ) , g e t P a t h W e i g h t ( c u r P a t h ) ) ;

O b j e c t [ ] c e l l s = g e n e r a t e G r o u p O b j e c t s ( c u r P a t h , m a i n P a r e n t , v e r t e x T a b l e ) ; g r a p h A d a p t e r . g r o u p C e l l s ( m a i n P a r e n t , 1 , c e l l s ) ;

g r a p h A d a p t e r . f o l d C e l l s ( t r u e , f a l s e , new O b j e c t [ ]{m a i n P a r e n t}) ;

g r a p h A d a p t e r . s e t C e l l S t y l e ( ” d a s h e d=t r u e ; s t r o k e C o l o r=”+U s e r C o n s t a n t s . INDIRECT COLOR+”; f i l l C o l o r =”+U s e r C o n s t a n t s . INDIRECT COLOR , c e l l s ) ;

g r a p h A d a p t e r . s e t C e l l S t y l e ( ” d a s h e d=t r u e ; s t r o k e C o l o r=”+U s e r C o n s t a n t s . INDIRECT COLOR+”; f o n t C o l o r=”+U s e r C o n s t a n t s . INDIRECT COLOR , new O b j e c t [ ]{m a i n P a r e n t}) ; }

} }

p r i v a t e d o u b l e g e t P a t h W e i g h t ( GraphPath<W e i g h t e d V e r t e x , WeightedEdgeWithType> p a t h ){

L i s t<WeightedEdgeWithType> e d g e L i s t = p a t h . g e t E d g e L i s t ( ) ; d o u b l e w e i g h t = 0 . 0 ;

f o r ( WeightedEdgeWithType e d g e : e d g e L i s t ) w e i g h t += g r a p h . g e t E d g e W e i g h t ( e d g e ) ; r e t u r n w e i g h t ;

}

p r i v a t e O b j e c t [ ] g e n e r a t e G r o u p O b j e c t s (

GraphPath<W e i g h t e d V e r t e x , WeightedEdgeWithType> c u r P a t h , O b j e c t m a i n P a r e n t ,

Map<W e i g h t e d V e r t e x , m x I C e l l> v e r t e x T a b l e ) {

L i s t<WeightedEdgeWithType> e d g e P a t h = c u r P a t h . g e t E d g e L i s t ( ) ; L i s t<W e i g h t e d V e r t e x> e d g e V e r t e x = c u r P a t h . g e t V e r t e x L i s t ( ) ; L i s t<O b j e c t> mxCellAr = new A r r a y L i s t< >(1);

L i s t<O b j e c t> mxVertAr = new A r r a y L i s t< >();

f o r ( i n t i = 0 ; i < e d g e V e r t e x . s i z e ( ) ; i ++){

W e i g h t e d V e r t e x c u r V e r t = e d g e V e r t e x . g e t ( i ) ; i f ( i == 0 | | i == e d g e V e r t e x . s i z e ( )−1 ){

mxVertAr . add ( ( O b j e c t ) v e r t e x T a b l e . g e t ( c u r V e r t ) ) ; }e l s e{

O b j e c t vInGrp = g r a p h A d a p t e r .

i n s e r t V e r t e x ( m a i n P a r e n t , c u r V e r t . getName ( ) , c u r V e r t , 0 , 0 , 4 0 , 2 0 , ” f i l l C o l o r =”+U s e r C o n s t a n t s . CHOSEN COLOR ) ; mxVertAr . add ( vInGrp ) ;

mxCellAr . add ( vInGrp ) ;

( ( m x C e l l ) vInGrp ) . s e t V i s i b l e ( f a l s e ) ; }

}

i n t c u r V e r t e x = 0 ;

f o r ( WeightedEdgeWithType wew : e d g e P a t h ){

O b j e c t e = g r a p h A d a p t e r . i n s e r t E d g e ( m a i n P a r e n t , n u l l , wew , mxVertAr . g e t ( c u r V e r t e x ) , mxVertAr . g e t (++ c u r V e r t e x ) ) ; mxCellAr . add ( e ) ;

( ( m x C e l l ) e ) . s e t V i s i b l e ( f a l s e ) ; }

r e t u r n mxCellAr . t o A r r a y ( ) ; }

p r i v a t e b o o l e a n d o e s N o t C o n t a i n S e l e c t e d ( GraphPath<W e i g h t e d V e r t e x , WeightedEdgeWithType> c u r P a t h ){

L i s t<W e i g h t e d V e r t e x> v e r t e x L i s t = c u r P a t h . g e t V e r t e x L i s t ( ) ;

f o r ( i n t i = 1 ; i < v e r t e x L i s t . s i z e ( )−1 ; i ++){ // s k i p t h e f i r s t and l a s t v e r t i c e s i f ( s e . g e t C h o s e n V e r t i c e s ( ) . c o n t a i n s ( v e r t e x L i s t . g e t ( i ) ) )

r e t u r n f a l s e ; }

r e t u r n t r u e ; }

p r i v a t e O b j e c t i n s e r t P a r e n t E d g e ( m x I C e l l s o u r c e , m x I C e l l t a r g e t , d o u b l e t o t a l W e i g h t ){

r e t u r n g r a p h A d a p t e r . i n s e r t E d g e ( g r a p h A d a p t e r . g e t D e f a u l t P a r e n t ( ) , ” e”+ s o u r c e+t a r g e t , t o t a l W e i g h t , s o u r c e , t a r g e t ) ; }

}

HopsWindow.java

p a c k a g e window . v i e w s ;

i m p o r t g r a p h . WeightedEdgeWithType ; i m p o r t g r a p h . W e i g h t e d V e r t e x ; i m p o r t j a v a . awt . B o r d e r L a y o u t ; i m p o r t j a v a . awt . e v e n t . A c t i o n E v e n t ; i m p o r t j a v a . awt . e v e n t . A c t i o n L i s t e n e r ; i m p o r t j a v a . awt . e v e n t . WindowEvent ; i m p o r t j a v a x . s w i n g . J B u t t o n ; i m p o r t j a v a x . s w i n g . JFrame ; i m p o r t j a v a x . s w i n g . J L a b e l ; i m p o r t j a v a x . s w i n g . J P a n e l ; i m p o r t j a v a x . s w i n g . J S l i d e r ;

i m p o r t o r g . j g r a p h t . e x t . JGraphXAdapter ; i m p o r t com . mxgraph . l a y o u t . m x C i r c l e L a y o u t ; i m p o r t com . mxgraph . l a y o u t . m x P a r a l l e l E d g e L a y o u t ; i m p o r t com . mxgraph . s w i n g . mxGraphComponent ; i m p o r t j a v a . awt . Font ;

@ S u p p r e s s W a r n i n g s ( ” s e r i a l ” ) c l a s s HopsWindow e x t e n d s JFrame{

J S l i d e r t h r e s h o l d S l i d e r ;

JGraphXAdapter<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h A d a p t e r ; b o o l e a n h a s S u b m i t t e d = f a l s e ;

i n t h o p s ;

p u b l i c HopsWindow ( JGraphXAdapter<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h A d a p t e r ) { t h i s . g r a p h A d a p t e r = g r a p h A d a p t e r ;

i n i t i a l i z e ( ) ; }

g e t C o n t e n t P a n e ( ) . s e t L a y o u t ( n u l l ) ; s e t L o c a t i o n R e l a t i v e T o ( n u l l ) ; J P a n e l s ub gr a ph P = new J P a n e l ( ) ; s ub gr a ph P . s e t B o u n d s ( 1 0 , 1 1 , 4 3 7 , 4 3 9 ) ; s ub gr a ph P . s e t L a y o u t ( new B o r d e r L a y o u t ( ) ) ; W i n d o w U t i l s . s e t u p G r a p h ( g r a p h A d a p t e r ) ;

m x C i r c l e L a y o u t o r g a n i c L a y o u t = new m x C i r c l e L a y o u t ( g r a p h A d a p t e r ) ;

m x P a r a l l e l E d g e L a y o u t p a r a l l e l L a y o u t = new m x P a r a l l e l E d g e L a y o u t ( g r a p h A d a p t e r ) ; o r g a n i c L a y o u t . e x e c u t e ( g r a p h A d a p t e r . g e t D e f a u l t P a r e n t ( ) ) ;

p a r a l l e l L a y o u t . e x e c u t e ( g r a p h A d a p t e r . g e t D e f a u l t P a r e n t ( ) ) ; mxGraphComponent graphCom = new mxGraphComponent ( g r a p h A d a p t e r ) ; graphCom . s e t C o n n e c t a b l e ( f a l s e ) ;

s ub gr a ph P . add ( graphCom , B o r d e r L a y o u t .CENTER ) ; g e t C o n t e n t P a n e ( ) . add ( s ub g ra ph P ) ;

f i n a l J S l i d e r h o p S l = c r e a t e H o p s S l i d e r ( ) ; h o p S l . s e t B o u n d s ( 1 0 4 , 4 9 1 , 2 5 7 , 5 1 ) ; g e t C o n t e n t P a n e ( ) . add ( h o p S l ) ;

J L a b e l lblNumberOfHops = new J L a b e l ( ” Number o f Hops ” ) ; lblNumberOfHops . s e t B o u n d s ( 1 0 4 , 4 6 0 , 9 8 , 1 4 ) ;

g e t C o n t e n t P a n e ( ) . add ( lblNumberOfHops ) ; J B u t t o n s e t V a l u e s B = new J B u t t o n ( ” G e n e r a t e ” ) ;

s e t V a l u e s B . s e t F o n t ( new Font ( ” Verdana ” , Font . PLAIN , 9 ) ) ; s e t V a l u e s B . a d d A c t i o n L i s t e n e r ( new A c t i o n L i s t e n e r ( ){

@ O v e r r i d e

p u b l i c v o i d a c t i o n P e r f o r m e d ( A c t i o n E v e n t e ) { h o p s = h o p S l . g e t V a l u e ( ) ;

h a s S u b m i t t e d = t r u e ;

d i s p a t c h E v e n t ( new WindowEvent ( HopsWindow . t h i s , WindowEvent . WINDOW CLOSING ) ) ; }

}) ;

s e t V a l u e s B . s e t B o u n d s ( 2 5 4 , 4 5 7 , 1 0 7 , 2 3 ) ; W i n d o w U t i l s . s e t B u t t o n S t y l e ( s e t V a l u e s B ) ; g e t C o n t e n t P a n e ( ) . add ( s e t V a l u e s B ) ; }

p r i v a t e J S l i d e r c r e a t e H o p s S l i d e r ( ){

J S l i d e r s l i d e r = new J S l i d e r ( J S l i d e r . HORIZONTAL, 1 , 3 , 1 ) ; s l i d e r . s e t M i n o r T i c k S p a c i n g ( 1 ) ;

s l i d e r . s e t P a i n t T i c k s ( t r u e ) ; s l i d e r . s e t P a i n t L a b e l s ( t r u e ) ;

s l i d e r . s e t L a b e l T a b l e ( s l i d e r . c r e a t e S t a n d a r d L a b e l s ( 1 ) ) ; r e t u r n s l i d e r ;

}

p u b l i c b o o l e a n h a s S u b m i t t e d ( ){

r e t u r n h a s S u b m i t t e d ; }

p u b l i c i n t g e t H o p s ( ){ r e t u r n h o p s ;

} }

ThresholdWindow.java

p a c k a g e window . v i e w s ;

i m p o r t j a v a . awt . e v e n t . A c t i o n E v e n t ; i m p o r t j a v a . awt . e v e n t . A c t i o n L i s t e n e r ; i m p o r t j a v a . awt . e v e n t . WindowEvent ; i m p o r t j a v a . u t i l . H a s h t a b l e ; i m p o r t j a v a x . s w i n g . J B u t t o n ; i m p o r t j a v a x . s w i n g . JFrame ; i m p o r t j a v a x . s w i n g . J L a b e l ; i m p o r t j a v a x . s w i n g . J S l i d e r ; i m p o r t j a v a x . s w i n g . J T e x t F i e l d ; i m p o r t j a v a x . s w i n g . e v e n t . ChangeEvent ; i m p o r t j a v a x . s w i n g . e v e n t . C h a n g e L i s t e n e r ;

@ S u p p r e s s W a r n i n g s ( ” s e r i a l ” )

c l a s s ThresholdWindow e x t e n d s JFrame{

p r i v a t e J T e x t F i e l d t h r e s h o l d T f ; J S l i d e r t h r e s h o l d S l i d e r ; b o o l e a n h a s S u b m i t t e d = f a l s e ; i n t t h r e s h o l d ;

i n t t h r e s h o l d L i m ;

p u b l i c ThresholdWindow ( i n t t h r e s h o l d L i m , i n t t h r e s h o l d ) { t h i s . t h r e s h o l d L i m = t h r e s h o l d L i m ;

i f ( t h r e s h o l d == D o u b l e . MAX VALUE) t h r e s h o l d = 0 ;

t h i s . t h r e s h o l d = t h r e s h o l d ;

i n i t i a l i z e ( ) ; }

p r i v a t e v o i d i n i t i a l i z e ( ) { s e t T i t l e ( ” S e t T h r e s h o l d . . . ” ) ; s e t R e s i z a b l e ( f a l s e ) ;

s e t B o u n d s ( 1 0 0 , 1 0 0 , 2 9 3 , 1 5 0 ) ; g e t C o n t e n t P a n e ( ) . s e t L a y o u t ( n u l l ) ; s e t L o c a t i o n R e l a t i v e T o ( n u l l ) ;

J L a b e l l b l T h r e s h o l d = new J L a b e l ( ” T h r e s h o l d ” ) ; l b l T h r e s h o l d . s e t B o u n d s ( 1 0 , 1 5 , 7 6 , 1 4 ) ; g e t C o n t e n t P a n e ( ) . add ( l b l T h r e s h o l d ) ; t h r e s h o l d T f = new J T e x t F i e l d ( ” 1 ” ) ; t h r e s h o l d T f . s e t B o u n d s ( 7 2 , 1 2 , 7 6 , 2 0 ) ; t h r e s h o l d T f . s e t E d i t a b l e ( f a l s e ) ; g e t C o n t e n t P a n e ( ) . add ( t h r e s h o l d T f ) ; t h r e s h o l d T f . s e t C o l u m n s ( 1 0 ) ;

J B u t t o n s e t V a l u e s B = new J B u t t o n ( ” S e t V a l u e s ” ) ; s e t V a l u e s B . a d d A c t i o n L i s t e n e r ( new A c t i o n L i s t e n e r ( ){

@ O v e r r i d e

p u b l i c v o i d a c t i o n P e r f o r m e d ( A c t i o n E v e n t e ) { t h r e s h o l d = I n t e g e r . p a r s e I n t ( t h r e s h o l d T f . g e t T e x t ( ) ) ; h a s S u b m i t t e d = t r u e ;

d i s p a t c h E v e n t ( new WindowEvent ( ThresholdWindow . t h i s , WindowEvent . WINDOW CLOSING ) ) ; }

}) ;

s e t V a l u e s B . s e t B o u n d s ( 1 6 6 , 1 1 , 1 0 1 , 2 3 ) ; W i n d o w U t i l s . s e t B u t t o n S t y l e ( s e t V a l u e s B ) ; g e t C o n t e n t P a n e ( ) . add ( s e t V a l u e s B ) ;

t h r e s h o l d S l i d e r = c r e a t e T h r e s h o l d S l i d e r ( ) ; t h r e s h o l d S l i d e r . s e t B o u n d s ( 1 0 , 4 7 , 2 5 7 , 5 1 ) ; g e t C o n t e n t P a n e ( ) . add ( t h r e s h o l d S l i d e r ) ; }

p r i v a t e J S l i d e r c r e a t e T h r e s h o l d S l i d e r ( ){

f i n a l J S l i d e r s l i d e r = new J S l i d e r ( J S l i d e r . HORIZONTAL, 1 , t h r e s h o l d L i m , 1 ) ; H a s h t a b l e<I n t e g e r , J L a b e l> l a b e l T = new H a s h t a b l e< >();

l a b e l T . p u t ( new I n t e g e r ( 1 ) , new J L a b e l ( ” 1 ” ) ) ;

l a b e l T . p u t ( new I n t e g e r ( t h r e s h o l d L i m ) , new J L a b e l ( I n t e g e r . t o S t r i n g ( t h r e s h o l d L i m ) ) ) ; s l i d e r . s e t L a b e l T a b l e ( l a b e l T ) ;

s l i d e r . a d d C h a n g e L i s t e n e r ( new C h a n g e L i s t e n e r ( ){

p u b l i c v o i d s t a t e C h a n g e d ( ChangeEvent e ){

t h r e s h o l d T f . s e t T e x t ( I n t e g e r . t o S t r i n g ( s l i d e r . g e t V a l u e ( ) ) ) ; }

} ) ;

s l i d e r . s e t P a i n t L a b e l s ( t r u e ) ; s l i d e r . s e t V a l u e ( t h r e s h o l d ) ; r e t u r n s l i d e r ;

}

p u b l i c b o o l e a n h a s S u b m i t t e d ( ){

r e t u r n h a s S u b m i t t e d ; }

p u b l i c i n t g e t T h r e s h o l d ( ){

r e t u r n t h r e s h o l d ; }

}

GraphPanel.java

p a c k a g e window . v i e w s ;

i m p o r t g r a p h . WeightedEdgeWithType ; i m p o r t g r a p h . W e i g h t e d V e r t e x ; i m p o r t j a v a . awt . B o r d e r L a y o u t ; i m p o r t j a v a . awt . C o l o r ;

i m p o r t j a v a . awt . e v e n t . MouseAdapter ; i m p o r t j a v a . awt . e v e n t . MouseEvent ; i m p o r t j a v a . u t i l . Map ;

i m p o r t j a v a . u t i l . S e t ; i m p o r t j a v a x . s w i n g . J L a b e l ; i m p o r t j a v a x . s w i n g . J P a n e l ;

i m p o r t o r g . j g r a p h t . e x t . JGraphXAdapter ;

i m p o r t o r g . j g r a p h t . g r a p h . D i r e c t e d W e i g h t e d M u l t i g r a p h ;

i m p o r t com . mxgraph . model . m x I C e l l ;

i m p o r t com . mxgraph . s w i n g . mxGraphComponent ; /∗∗

∗ P a n e l t h a t c o n t a i n s t h e g r a p h t h a t i s l o a d e d i n t o t h e t o o l .

∗ @author E i na d

∗/

@ S u p p r e s s W a r n i n g s ( ” s e r i a l ” )

p u b l i c c l a s s GraphPanel e x t e n d s J P a n e l {

p r i v a t e D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ; JGraphXAdapter<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h A d a p t e r ;

mxGraphComponent graphCom ; m x C e l l s e l e c t e d C e l l ; d o u b l e s c a l e ; /∗∗

∗ C r e a t e t h e p a n e l .

∗/

p u b l i c GraphPanel ( D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ) { t h i s . g r a p h = g r a p h ;

// s e t B o r d e r ( n u l l ) ;

s e t B a c k g r o u n d ( C o l o r . g r e e n ) ; showGraph ( ) ;

}

p u b l i c JGraphXAdapter<W e i g h t e d V e r t e x , WeightedEdgeWithType> g e t G r a p h A d a p t e r ( ){ r e t u r n g r a p h A d a p t e r ;

}

p u b l i c mxGraphComponent getGraphComponent ( ){

r e t u r n graphCom ; }

/∗∗

∗ P l a c e s t h e l o a d e d g r a p h i n t o a J P a n e l

∗/

p u b l i c v o i d showGraph ( ){

g r a p h A d a p t e r = new JGraphXAdapter<>(g r a p h ) ; W i n d o w U t i l s . s e t u p G r a p h ( g r a p h A d a p t e r ) ;

m x F a s t O r g a n i c L a y o u t o r g a n i c L a y o u t = new m x F a s t O r g a n i c L a y o u t ( g r a p h A d a p t e r ) ; m x P a r a l l e l E d g e L a y o u t p a r a l l e l L a y o u t = new m x P a r a l l e l E d g e L a y o u t ( g r a p h A d a p t e r ) ; o r g a n i c L a y o u t . s e t F o r c e C o n s t a n t ( 1 5 0 ) ; // t h e h i g h e r , t h e more s e p a r a t e d o r g a n i c L a y o u t . e x e c u t e ( g r a p h A d a p t e r . g e t D e f a u l t P a r e n t ( ) ) ;

p a r a l l e l L a y o u t . e x e c u t e ( g r a p h A d a p t e r . g e t D e f a u l t P a r e n t ( ) ) ; graphCom = new mxGraphComponent ( g r a p h A d a p t e r ) ;

graphCom . s e t C o n n e c t a b l e ( f a l s e ) ; t h i s . s e t L a y o u t ( new B o r d e r L a y o u t ( ) ) ; t h i s . add ( graphCom , B o r d e r L a y o u t .CENTER ) ; }

p u b l i c v o i d c o l o r V e r t i c e s ( S e t<W e i g h t e d V e r t e x> v e r t i c e s T o B e C o l o r e d , S t r i n g c o l o r ){

Map<W e i g h t e d V e r t e x , m x I C e l l> v e r t e x T a b l e = g r a p h A d a p t e r . g e t V e r t e x T o C e l l M a p ( ) ;

O b j e c t [ ] m x C e l l = new O b j e c t [ v e r t i c e s T o B e C o l o r e d . s i z e ( ) ] ; i n t i = 0 ;

f o r ( W e i g h t e d V e r t e x c v : v e r t i c e s T o B e C o l o r e d ){

m x I C e l l c e l l = v e r t e x T a b l e . g e t ( c v ) ; m x C e l l [ i ++] = ( O b j e c t ) c e l l ; }

g r a p h A d a p t e r . s e t C e l l S t y l e ( ” f i l l C o l o r =”+c o l o r , m x C e l l ) ; }

v o i d s e t G r a p h L i s t e n e r ( f i n a l J P a n e l e l e m e n t I n f o C o n t e n t P ){

f i n a l mxGraphComponent graphComponent = t h i s . getGraphComponent ( ) ; graphComponent . g e t G r a p h C o n t r o l ( ) . a d d M o u s e L i s t e n e r ( new MouseAdapter ( ){

@ O v e r r i d e

p u b l i c v o i d m o u s e R e l e a s e d ( MouseEvent e ){

O b j e c t c e l l = graphComponent . g e t C e l l A t ( e . getX ( ) , e . getY ( ) ) ; i f ( c e l l != n u l l ){

s e l e c t e d C e l l = ( m x C e l l ) c e l l ;

S t r i n g B u i l d e r s b = new S t r i n g B u i l d e r ( ) ; t r y{

W e i g h t e d V e r t e x wv = ( W e i g h t e d V e r t e x ) s e l e c t e d C e l l . g e t V a l u e ( ) ; e l e m e n t I n f o C o n t e n t P . r e m o v e A l l ( ) ;

s b . append ( ” Name = ” ) . append ( wv . getName ( ) ) ;

e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; s b . s e t L e n g t h ( 0 ) ;

s b . append ( ” Type = ” ) . append ( wv . g e t T y p e ( ) ) ;

e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; s b . s e t L e n g t h ( 0 ) ;

s b . append ( ” Weight = ” ) . append ( wv . g e t W e i g h t ( ) ) ; e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; e l e m e n t I n f o C o n t e n t P . r e v a l i d a t e ( ) ;

e l e m e n t I n f o C o n t e n t P . r e p a i n t ( ) ;

} c a t c h ( C l a s s C a s t E x c e p t i o n c c e ){

WeightedEdgeWithType wEdge = ( WeightedEdgeWithType ) s e l e c t e d C e l l . g e t V a l u e ( ) ; e l e m e n t I n f o C o n t e n t P . r e m o v e A l l ( ) ;

s b . append ( ” S o u r c e = ” ) . append ( g r a p h . g e t E d g e S o u r c e ( wEdge ) ) ; e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; s b . s e t L e n g t h ( 0 ) ;

s b . append ( ” T a r g e t = ” ) . append ( g r a p h . g e t E d g e T a r g e t ( wEdge ) ) ; e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; s b . s e t L e n g t h ( 0 ) ;

s b . append ( ” Type = ” ) . append ( wEdge . g e t T y p e ( ) ) ; e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; s b . s e t L e n g t h ( 0 ) ;

s b . append ( ” Weight = ” ) . append ( g r a p h . g e t E d g e W e i g h t ( wEdge ) ) ; e l e m e n t I n f o C o n t e n t P . add ( new J L a b e l ( s b . t o S t r i n g ( ) ) ) ; e l e m e n t I n f o C o n t e n t P . r e v a l i d a t e ( ) ;

e l e m e n t I n f o C o n t e n t P . r e p a i n t ( ) ; }

} e l s e {

e l e m e n t I n f o C o n t e n t P . r e m o v e A l l ( ) ; e l e m e n t I n f o C o n t e n t P . r e v a l i d a t e ( ) ; e l e m e n t I n f o C o n t e n t P . r e p a i n t ( ) ; }

} }) ; }

v o i d zoomGraph ( b o o l e a n i s Z o o m I n ){

i f ( i s Z o o m I n ){ graphCom . zoomIn ( ) ; } e l s e{

graphCom . zoomOut ( ) ; }

}

m x C e l l g e t S e l e c t e d C e l l ( ){

r e t u r n s e l e c t e d C e l l ; }

}

OpeningWindow.java p a c k a g e window . v i e w s ;

i m p o r t j a v a . awt . B o r d e r L a y o u t ; i m p o r t j a v a . awt . C o l o r ; i m p o r t j a v a x . s w i n g . I m a g e I c o n ; i m p o r t j a v a x . s w i n g . J L a b e l ; i m p o r t j a v a x . s w i n g . J P a n e l ; i m p o r t j a v a x . s w i n g . JWindow ;

@ S u p p r e s s W a r n i n g s ( ” s e r i a l ” )

c l a s s OpeningWindow e x t e n d s JWindow { p r i v a t e i n t d u r a t i o n ;

p u b l i c OpeningWindow ( i n t d ) { d u r a t i o n = d ;

}

p u b l i c v o i d s h o w S p l a s h ( ) {

J P a n e l c o n t e n t = ( J P a n e l ) g e t C o n t e n t P a n e ( ) ; c o n t e n t . s e t B a c k g r o u n d ( C o l o r . w h i t e ) ; s e t B o u n d s ( 1 0 0 , 1 0 0 , 7 6 8 , 2 7 5 ) ; s e t L o c a t i o n R e l a t i v e T o ( n u l l ) ;

J L a b e l l a b e l = new J L a b e l ( new I m a g e I c o n ( ” r e s o u r c e s /MenuBg . png ” ) ) ; c o n t e n t . add ( l a b e l , B o r d e r L a y o u t .CENTER ) ;

s e t V i s i b l e ( t r u e ) ;

t r y { Thread . s l e e p ( d u r a t i o n ) ; } c a t c h ( E x c e p t i o n e ) {}

s e t V i s i b l e ( f a l s e ) ; }

}

MainWindow.java

p a c k a g e window . v i e w s ;

i m p o r t e x t r a c t o r . S u b g r a p h E x t r a c t o r ; i m p o r t e x t r a c t o r . V e r t e x P i c k e r ; i m p o r t f i l e s . G r a p h F i l e R e a d e r ; i m p o r t g r a p h . WeightedEdgeWithType ; i m p o r t g r a p h . W e i g h t e d V e r t e x ;

i m p o r t j a v a . awt . G r a p h i c s ;

i m p o r t j a v a . awt . G r i d B a g C o n s t r a i n t s ; i m p o r t j a v a . awt . GridBagLayout ; i m p o r t j a v a . awt . e v e n t . A c t i o n E v e n t ; i m p o r t j a v a . awt . e v e n t . A c t i o n L i s t e n e r ; i m p o r t j a v a . awt . e v e n t . WindowAdapter ; i m p o r t j a v a . awt . e v e n t . WindowEvent ; i m p o r t j a v a . awt . i m a g e . B u f f e r e d I m a g e ; i m p o r t j a v a . i o . F i l e ;

i m p o r t j a v a . i o . F i l e N o t F o u n d E x c e p t i o n ; i m p o r t j a v a . i o . F i l e R e a d e r ;

i m p o r t j a v a . i o . I O E x c e p t i o n ; i m p o r t j a v a . u t i l . A r r a y L i s t ; i m p o r t j a v a . u t i l . H a s h S e t ; i m p o r t j a v a . u t i l . L i s t ; i m p o r t j a v a . u t i l . Map ; i m p o r t j a v a . u t i l . S e t ; i m p o r t j a v a . u t i l . T r e e S e t ; i m p o r t j a v a x . i m a g e i o . ImageIO ; i m p o r t j a v a x . s w i n g . BoxLayout ; i m p o r t j a v a x . s w i n g . I m a g e I c o n ; i m p o r t j a v a x . s w i n g . J B u t t o n ; i m p o r t j a v a x . s w i n g . JFrame ; i m p o r t j a v a x . s w i n g . J L a b e l ; i m p o r t j a v a x . s w i n g . JMenu ; i m p o r t j a v a x . s w i n g . JMenuBar ; i m p o r t j a v a x . s w i n g . JMenuItem ; i m p o r t j a v a x . s w i n g . J Opti onP ane ; i m p o r t j a v a x . s w i n g . J P a n e l ; i m p o r t j a v a x . s w i n g . J S c r o l l P a n e ; i m p o r t j a v a x . s w i n g . UIManager ;

i m p o r t j a v a x . s w i n g . b o r d e r . L i n e B o r d e r ;

i m p o r t no . u i b . c i p r . m a t r i x . N o t C o n v e r g e d E x c e p t i o n ; i m p o r t o r g . j g r a p h t . e x t . JGraphXAdapter ;

i m p o r t o r g . j g r a p h t . g r a p h . D i r e c t e d W e i g h t e d M u l t i g r a p h ; i m p o r t window . v i e w s . u t i l s . U s e r C o n s t a n t s ;

i m p o r t c e n t r a l i t y . B e t w e e n e s s C e n t r a l i t y C o m p u t e r ; i m p o r t c e n t r a l i t y . C l o s e n e s s C e n t r a l i t y C o m p u t e r ; i m p o r t c e n t r a l i t y . D e g r e e C e n t r a l i t y C o m p u t e r ; i m p o r t c e n t r a l i t y . E i g e n v e c t o r C e n t r a l i t y C o m p u t e r ; i m p o r t com . mxgraph . model . m x C e l l ;

i m p o r t com . mxgraph . u t i l . m x C e l l R e n d e r e r ; p u b l i c c l a s s MainWindow{

p r i v a t e JFrame f r m N e t E x t r a n a l y s i s ; p r i v a t e GraphPanel graphP ;

p r i v a t e D i r e c t e d W e i g h t e d M u l t i g r a p h<W e i g h t e d V e r t e x , WeightedEdgeWithType> g r a p h ; p r i v a t e S e t<W e i g h t e d V e r t e x> a d d V e r t i c e s ;

p r i v a t e S u b g r a p h E x t r a c t o r s e ;

J P a n e l g r a p h C e n t r a l i t y P , c e n t L b l P , c e n t r a l i t y L e g e n d P , e l e m e n t I n f o C o n t e n t P ; J P a n e l s u b g r a p h I n f o C o n t e n t P ;

p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { OpeningWindow open = new OpeningWindow ( 3 5 0 0 ) ; open . s h o w S p l a s h ( ) ;

EventQueue . i n v o k e L a t e r ( new Runnable ( ) { p u b l i c v o i d r u n ( ) {

t r y {

MainWindow window = new MainWindow ( ) ; window . f r m N e t E x t r a n a l y s i s . s e t V i s i b l e ( t r u e ) ; } c a t c h ( E x c e p t i o n e ) {

e . p r i n t S t a c k T r a c e ( ) ; }

} }) ; }

p u b l i c MainWindow ( ) { i n i t i a l i z e ( ) ;

}

p r i v a t e v o i d i n i t i a l i z e ( ) { a d d V e r t i c e s = new T r e e S e t< >();

I m a g e I c o n img = new I m a g e I c o n ( ” r e s o u r c e s / b i g L o g o . png ” ) ; f r m N e t E x t r a n a l y s i s = new JFrame ( ) ;

f r m N e t E x t r a n a l y s i s . s e t I c o n I m a g e ( img . g e t I m a g e ( ) ) ;

f r m N e t E x t r a n a l y s i s . s e t T i t l e ( ” B i o l o g i c a l Net E x t r a l y s i s : A B i o l o g i c a l Network A n a l y s i s and S u b n e t w o r k E x t r a c t i o n T o o l ” ) ; f r m N e t E x t r a n a l y s i s . s e t B o u n d s ( 1 0 0 , 1 0 0 , 9 0 0 , 6 0 0 ) ;

f r m N e t E x t r a n a l y s i s . s e t L o c a t i o n R e l a t i v e T o ( n u l l ) ; f r m N e t E x t r a n a l y s i s . s e t R e s i z a b l e ( f a l s e ) ;

f r m N e t E x t r a n a l y s i s . g e t C o n t e n t P a n e ( ) . s e t B a c k g r o u n d ( UIManager . g e t C o l o r ( ” P a n e l . b a c k g r o u n d ” ) ) ; f r m N e t E x t r a n a l y s i s . s e t D e f a u l t C l o s e O p e r a t i o n ( JFrame . EXIT ON CLOSE ) ;

f r m N e t E x t r a n a l y s i s . g e t C o n t e n t P a n e ( ) . s e t L a y o u t ( n u l l ) ;

J P a n e l e l e l e m e n t I n f o P = new J P a n e l ( ) ;

e l e l e m e n t I n f o P . s e t B o r d e r ( new L i n e B o r d e r ( C o l o r . d e c o d e (”#808 B96 ” ) ) ) ; e l e l e m e n t I n f o P . s e t B o u n d s ( 5 7 8 , 1 1 , 2 9 6 , 1 4 4 ) ;

f r m N e t E x t r a n a l y s i s . g e t C o n t e n t P a n e ( ) . add ( e l e l e m e n t I n f o P ) ; e l e l e m e n t I n f o P . s e t L a y o u t ( n u l l ) ;

J P a n e l e l e m e n t I n f o L b l P = new J P a n e l ( ) ;

e l e m e n t I n f o L b l P . s e t B a c k g r o u n d ( C o l o r . d e c o d e (”#808 B96 ” ) ) ; e l e m e n t I n f o L b l P . s e t B o u n d s ( 0 , 0 , 2 9 6 , 2 3 ) ;

e l e l e m e n t I n f o P . add ( e l e m e n t I n f o L b l P ) ;

e l e m e n t I n f o L b l P . s e t L a y o u t ( new FlowLayout ( FlowLayout . CENTER, 5 , 5 ) ) ; J L a b e l e l e m e n t I n f o L = new J L a b e l ( ” E l e m e n t I n f o r m a t i o n ” ) ;

e l e m e n t I n f o L . s e t F o n t ( new Font ( ” Tahoma ” , Font . BOLD, 1 2 ) ) ; e l e m e n t I n f o L b l P . add ( e l e m e n t I n f o L ) ;

e l e m e n t I n f o C o n t e n t P = new J P a n e l ( ) ;

e l e m e n t I n f o C o n t e n t P . s e t B o u n d s ( 5 , 2 3 , 2 8 6 , 9 3 ) ;

e l e m e n t I n f o C o n t e n t P . s e t L a y o u t ( new BoxLayout ( e l e m e n t I n f o C o n t e n t P , BoxLayout . Y AXIS ) ) ; e l e l e m e n t I n f o P . add ( e l e m e n t I n f o C o n t e n t P ) ;

J B u t t o n addElemB = new J B u t t o n ( ” Add E l e m e n t ” ) ; addElemB . s e t F o n t ( new Font ( ” Tahoma ” , Font . PLAIN , 1 0 ) ) ; addElemB . s e t B o u n d s ( 1 9 3 , 1 1 7 , 9 3 , 2 3 ) ;

W i n d o w U t i l s . s e t B u t t o n S t y l e ( addElemB ) ; e l e l e m e n t I n f o P . add ( addElemB ) ;

addElemB . a d d A c t i o n L i s t e n e r ( new A c t i o n L i s t e n e r ( ) { p u b l i c v o i d a c t i o n P e r f o r m e d ( A c t i o n E v e n t e ) { m x C e l l s e l e c t e d C e l l = graphP . g e t S e l e c t e d C e l l ( ) ; t r y{

W e i g h t e d V e r t e x s e l e c t e d V = ( W e i g h t e d V e r t e x ) s e l e c t e d C e l l . g e t V a l u e ( ) ; a d d V e r t i c e s . add ( s e l e c t e d V ) ;

} c a t c h ( C l a s s C a s t E x c e p t i o n c c e ){

WeightedEdgeWithType s e l e c t e d E = ( WeightedEdgeWithType ) s e l e c t e d C e l l . g e t V a l u e ( ) ; a d d V e r t i c e s . add ( g r a p h . g e t E d g e S o u r c e ( s e l e c t e d E ) ) ;

a d d V e r t i c e s . add ( g r a p h . g e t E d g e T a r g e t ( s e l e c t e d E ) ) ; }

graphP . c o l o r V e r t i c e s ( a d d V e r t i c e s , U s e r C o n s t a n t s . CHOSEN COLOR ) ; p r i n t S u b g r a p h L i s t ( ) ;

} }) ;

J P a n e l s ub gr a ph P = new J P a n e l ( ) ;

s ub gr a ph P . s e t B o r d e r ( new L i n e B o r d e r ( C o l o r . d e c o d e (”#808 B96 ” ) ) ) ; s ub gr a ph P . s e t B o u n d s ( 5 7 8 , 1 7 0 , 2 9 6 , 1 7 4 ) ;

f r m N e t E x t r a n a l y s i s . g e t C o n t e n t P a n e ( ) . add ( su b gr a ph P ) ; s ub gr a ph P . s e t L a y o u t ( n u l l ) ;

J P a n e l g r a p h I n f o L b l P = new J P a n e l ( ) ; g r a p h I n f o L b l P . s e t B o u n d s ( 0 , 0 , 2 9 6 , 2 3 ) ;

g r a p h I n f o L b l P . s e t B a c k g r o u n d ( C o l o r . d e c o d e (”#808 B96 ” ) ) ; s ub gr a ph P . add ( g r a p h I n f o L b l P ) ;

g r a p h I n f o L b l P . s e t L a y o u t ( new FlowLayout ( FlowLayout . CENTER, 5 , 5 ) ) ; J L a b e l s u b g r a p h I n f o L = new J L a b e l ( ” Subgraph E l e m e n t s ” ) ;

s u b g r a p h I n f o L . s e t F o n t ( new Font ( ” Tahoma ” , Font . BOLD, 1 2 ) ) ; g r a p h I n f o L b l P . add ( s u b g r a p h I n f o L ) ;

s u b g r a p h I n f o C o n t e n t P = new J P a n e l ( ) ; s u b g r a p h I n f o C o n t e n t P . s e t B o r d e r ( n u l l ) ;

s u b g r a p h I n f o C o n t e n t P . s e t L a y o u t ( new BoxLayout ( s u b g r a p h I n f o C o n t e n t P , BoxLayout . Y AXIS ) ) ; J S c r o l l P a n e s u b g r a p h S c r o l l = new J S c r o l l P a n e ( s u b g r a p h I n f o C o n t e n t P ) ;

s u b g r a p h S c r o l l . s e t B o u n d s ( 0 , 2 3 , 2 9 6 , 1 5 1 ) ; s ub gr a ph P . add ( s u b g r a p h S c r o l l ) ;

g r a p h C e n t r a l i t y P = new J P a n e l ( ) ;

g r a p h C e n t r a l i t y P . s e t B o r d e r ( new L i n e B o r d e r ( C o l o r . d e c o d e (”#808 B96 ” ) ) ) ; g r a p h C e n t r a l i t y P . s e t B o u n d s ( 5 7 8 , 3 8 5 , 2 9 6 , 1 4 4 ) ;

f r m N e t E x t r a n a l y s i s . g e t C o n t e n t P a n e ( ) . add ( g r a p h C e n t r a l i t y P ) ; g r a p h C e n t r a l i t y P . s e t L a y o u t ( n u l l ) ;

c e n t L b l P = new J P a n e l ( ) ;

c e n t L b l P . s e t B a c k g r o u n d ( C o l o r . d e c o d e (”#808 B96 ” ) ) ; c e n t L b l P . s e t B o u n d s ( 0 , 0 , 2 9 6 , 2 3 ) ;

g r a p h C e n t r a l i t y P . add ( c e n t L b l P ) ;

c e n t L b l P . s e t L a y o u t ( new FlowLayout ( FlowLayout . CENTER, 5 , 5 ) ) ; J L a b e l c e n t r a l i t y L = new J L a b e l ( ” C e n t r a l i t y Legend ” ) ; c e n t r a l i t y L . s e t F o n t ( new Font ( ” Tahoma ” , Font . BOLD, 1 2 ) ) ; c e n t L b l P . add ( c e n t r a l i t y L ) ;

c e n t r a l i t y L e g e n d P = new J P a n e l ( ) ;

c e n t r a l i t y L e g e n d P . s e t B o u n d s ( 5 , 2 2 , 2 8 6 , 1 1 1 ) ; g r a p h C e n t r a l i t y P . add ( c e n t r a l i t y L e g e n d P ) ;

c e n t r a l i t y L e g e n d P . s e t L a y o u t ( new GridBagLayout ( ) ) ; J B u t t o n g e n e r a t e B = new J B u t t o n ( ” G e n e r a t e ” ) ;

g e n e r a t e B . s e t F o n t ( new Font ( ” Tahoma ” , Font . BOLD, 1 2 ) ) ;

Dokumen terkait