package org.reldb.rel.v0.storage.relvars;
import java.io.Serializable;
import org.reldb.rel.exceptions.ExceptionFatal;
import org.reldb.rel.v0.generator.SelectAttributes;
import org.reldb.rel.v0.interpreter.Interpreter;
import org.reldb.rel.v0.languages.tutoriald.parser.ParseException;
import org.reldb.rel.v0.storage.RelDatabase;
import org.reldb.rel.v0.types.Heading;
public class RelvarHeadingMetadata implements Serializable {
private static final long serialVersionUID = 1L;
private String headingText;
private String[][] keys;
public RelvarHeadingMetadata(RelvarHeading headingDefinition) {
headingText = headingDefinition.getHeading().getSignature();
keys = new String[headingDefinition.getKeyCount()][];
for (int i=0; i<keys.length; i++)
keys[i] = headingDefinition.getKey(i).getNames().toArray(new String[0]);
}
public RelvarHeading getHeadingDefinition(RelDatabase database) {
Interpreter interpreter = new Interpreter(database, System.out);
Heading heading;
try {
heading = interpreter.getHeading(headingText);
} catch (ParseException pe) {
throw new ExceptionFatal("RS0368: Failed loading heading " + headingText + ": " + pe.toString());
}
RelvarHeading relvarHeading = new RelvarHeading(heading);
for (int i=0; i<keys.length; i++) {
SelectAttributes keyAttributes = new SelectAttributes();
for (int j=0; j<keys[i].length; j++)
keyAttributes.add(keys[i][j]);
relvarHeading.addKey(keyAttributes);
}
return relvarHeading;
}
}