package ldbc.snb.datagen.serializer.snb.interactive;
import ldbc.snb.datagen.dictionary.Dictionaries;
import ldbc.snb.datagen.objects.Organization;
import ldbc.snb.datagen.objects.Place;
import ldbc.snb.datagen.objects.Tag;
import ldbc.snb.datagen.objects.TagClass;
import ldbc.snb.datagen.serializer.HDFSCSVWriter;
import ldbc.snb.datagen.serializer.InvariantSerializer;
import ldbc.snb.datagen.vocabulary.DBP;
import ldbc.snb.datagen.vocabulary.DBPOWL;
import org.apache.hadoop.conf.Configuration;
import java.util.ArrayList;
/**
* Created by aprat on 17/02/15.
*/
public class CSVMergeForeignInvariantSerializer extends InvariantSerializer {
private HDFSCSVWriter[] writers;
private enum FileNames {
TAG ("tag"),
TAG_HAS_TYPE_TAGCLASS("tag_hasType_tagclass"),
TAGCLASS ("tagclass"),
TAGCLASS_IS_SUBCLASS_OF_TAGCLASS ("tagclass_isSubclassOf_tagclass"),
PLACE ("place"),
ORGANIZATION ("organisation");
private final String name;
private FileNames( String name ) {
this.name = name;
}
public String toString() {
return name;
}
}
public void initialize(Configuration conf, int reducerId) {
int numFiles = FileNames.values().length;
writers = new HDFSCSVWriter[numFiles];
for( int i = 0; i < numFiles; ++i) {
writers[i] = new HDFSCSVWriter(conf.get("ldbc.snb.datagen.serializer.socialNetworkDir"),FileNames.values()[i].toString()+"_"+reducerId,conf.getInt("ldbc.snb.datagen.numPartitions",1),conf.getBoolean("ldbc.snb.datagen.serializer.compressed",false),"|",conf.getBoolean("ldbc.snb.datagen.serializer.endlineSeparator",false));
}
ArrayList<String> arguments = new ArrayList<String>();
arguments.add("id");
arguments.add("name");
arguments.add("url");
writers[FileNames.TAG.ordinal()].writeEntry(arguments);
arguments.clear();
arguments.add("Tag.id");
arguments.add("TagClass.id");
writers[FileNames.TAG_HAS_TYPE_TAGCLASS.ordinal()].writeEntry(arguments);
arguments.clear();
arguments.add("id");
arguments.add("name");
arguments.add("url");
writers[FileNames.TAGCLASS.ordinal()].writeEntry(arguments);
arguments.clear();
arguments.add("TagClass.id");
arguments.add("TagClass.id");
writers[FileNames.TAGCLASS_IS_SUBCLASS_OF_TAGCLASS.ordinal()].writeEntry(arguments);
arguments.clear();
arguments.add("id");
arguments.add("name");
arguments.add("url");
arguments.add("type");
arguments.add("isPartOf");
writers[FileNames.PLACE.ordinal()].writeEntry(arguments);
arguments.clear();
arguments.add("id");
arguments.add("type");
arguments.add("name");
arguments.add("url");
arguments.add("place");
writers[FileNames.ORGANIZATION.ordinal()].writeEntry(arguments);
}
public void close() {
int numFiles = FileNames.values().length;
for(int i = 0; i < numFiles; ++i) {
writers[i].close();
}
}
protected void serialize(final Place place) {
ArrayList<String> arguments = new ArrayList<String>();
arguments.add(Integer.toString(place.getId()));
arguments.add(place.getName());
arguments.add(DBP.getUrl(place.getName()));
arguments.add(place.getType());
if (place.getType() == Place.CITY ||
place.getType() == Place.COUNTRY) {
arguments.add(Integer.toString(Dictionaries.places.belongsTo(place.getId())));
} else {
arguments.add("");
}
writers[FileNames.PLACE.ordinal()].writeEntry(arguments);
}
protected void serialize(final Organization organization) {
ArrayList<String> arguments = new ArrayList<String>();
arguments.add(Long.toString(organization.id));
arguments.add(organization.type.toString());
arguments.add(organization.name);
arguments.add(DBP.getUrl(organization.name));
arguments.add(Integer.toString(organization.location));
writers[FileNames.ORGANIZATION.ordinal()].writeEntry(arguments);
}
protected void serialize(final TagClass tagClass) {
ArrayList<String> arguments = new ArrayList<String>();
arguments.add(Integer.toString(tagClass.id));
arguments.add(tagClass.name);
if (tagClass.name.equals("Thing")) {
arguments.add("http://www.w3.org/2002/07/owl#Thing");
} else {
arguments.add(DBPOWL.getUrl(tagClass.name));
}
writers[FileNames.TAGCLASS.ordinal()].writeEntry(arguments);
if (tagClass.parent != -1) {
arguments.clear();
arguments.add(Integer.toString(tagClass.id));
arguments.add(Integer.toString(tagClass.parent));
writers[FileNames.TAGCLASS_IS_SUBCLASS_OF_TAGCLASS.ordinal()].writeEntry(arguments);
}
}
protected void serialize(final Tag tag) {
ArrayList<String> arguments = new ArrayList<String>();
arguments.add(Integer.toString(tag.id));
arguments.add(tag.name);
arguments.add(DBP.getUrl(tag.name));
writers[FileNames.TAG.ordinal()].writeEntry(arguments);
arguments.clear();
arguments.add(Integer.toString(tag.id));
arguments.add(Integer.toString(tag.tagClass));
writers[FileNames.TAG_HAS_TYPE_TAGCLASS.ordinal()].writeEntry(arguments);
}public void reset() {
}
}