/*******************************************************************************
* Copyright (c) 2014 EURA NOVA.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v2.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Contributors:
* Aldemar Reynaga - initial API and implementation
* Salim Jouili - initial API and implementation
******************************************************************************/
package com.steffi.storage;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import java.util.StringTokenizer;
import org.infinispan.Cache;
import com.steffi.common.BigTextFile;
import com.steffi.model.Cell;
import com.steffi.model.EdgeType;
import com.steffi.model.SteffiEdge;
import com.steffi.model.SteffiVertex;
import com.tinkerpop.blueprints.TransactionalGraph.Conclusion;
import com.tinkerpop.blueprints.impls.steffi.SteffiGraphDBGraph;
import com.tinkerpop.blueprints.impls.steffi.SteffiGraphDBVertex;
/**
* @author Aldemar Reynaga
* Text file functions used for the loading of files
*/
public class FileUtilities {
public static void readFromFile(SteffiGraphDBGraph graph, String fileName) throws Exception {
BigTextFile file = null;
StringTokenizer tokenizer = null;
SteffiVertex vertex = null;
int inEdgesCounter, outEdgesCounter;
long counter=0;
Date startDate, endDate;
try {
startDate = new Date();
file = new BigTextFile(fileName);
System.out.print("Loading\n[");
for (String line : file) {
if (!line.trim().equals("")) {
tokenizer = new StringTokenizer(line);
vertex = ((SteffiGraphDBVertex)graph.addVertex(Long.parseLong(tokenizer.nextToken()))).getRawVertex();
inEdgesCounter = Integer.parseInt(tokenizer.nextToken());
for (int i=0; i<inEdgesCounter; i++)
vertex.addPartialEdge(Long.parseLong(tokenizer.nextToken()), EdgeType.IN, "");
outEdgesCounter = Integer.parseInt(tokenizer.nextToken());
for (int i=0; i<outEdgesCounter; i++)
vertex.addPartialEdge(Long.parseLong(tokenizer.nextToken()), EdgeType.OUT, "");
counter++;
if (counter%500==0) {
System.out.print(".");
System.out.flush();
graph.stopTransaction(Conclusion.SUCCESS);
} else if ((counter % 50000) == 0) {
System.out.print("]\nLoaded " + counter + " lines \n[" );
System.out.flush();
}
}
}
graph.stopTransaction(Conclusion.SUCCESS);
System.out.println("Starting to update edgeAddresses...");
EdgeAddressesUpdater.updateEdgeAddresses();
System.out.println("Starting to calculate local 1-Hop neighbors");
//ImgpFileTools.updateLocal1HopNeighbors();
endDate = new Date();
System.out.println("File succesfully loaded in " + (endDate.getTime() - startDate.getTime()) +
"ms. "+ counter + " vertices have been processed");
} finally {
if (file != null) file.Close();
}
}
public static void writeToFile(String fileName) throws IOException {
Cache<Long, Cell> cache = CacheContainer.getCellCache();
String line = null, edgeIn = null, edgeOut = null, edgeUnd = null;
int edgeInCounter, edgeOutCounter, edgeUndCounter;
BufferedWriter bufWriter = null;
try {
bufWriter = new BufferedWriter(new FileWriter(fileName));
for (Cell cell : cache.values()) {
if (cell instanceof SteffiVertex) {
line = cell.getId() + "\t";
edgeIn = edgeOut = edgeUnd = "";
edgeInCounter = edgeOutCounter = edgeUndCounter = 0;
for (SteffiEdge edge : ((SteffiVertex) cell).getEdges()){
switch (edge.getEdgeType()) {
case HYPEREDGE:
break;
case IN:
edgeIn += ("\t" + edge.getDestCellId());
edgeInCounter++;
break;
case OUT:
edgeOut += ("\t" + edge.getDestCellId());
edgeOutCounter++;
break;
case UNDIRECTED:
edgeUnd += ("\t" + edge.getDestCellId());
edgeUndCounter++;
break;
default:
break;
}
}
line += (edgeInCounter + edgeIn + "\t" + edgeOutCounter + edgeOut +
"\t" + edgeUndCounter + edgeUnd);
bufWriter.write(line);
bufWriter.newLine();
}
}
} finally {
if (bufWriter!=null){try{bufWriter.close();}catch(IOException ioe){}}
}
}
}