public static function create(DeclareSchema $schema)
 {
     $schemaProxyClass = $schema->getSchemaProxyClass();
     $cTemplate = new TemplateClassFile($schemaProxyClass, array('template_dirs' => dirname(__DIR__) . DIRECTORY_SEPARATOR . 'Templates', 'template' => 'Schema.php.twig'));
     $schemaClass = get_class($schema);
     $schemaArray = $schema->export();
     $cTemplate->addConst('schema_class', $schemaClass);
     $cTemplate->addConst('collection_class', $schemaArray['collection_class']);
     $cTemplate->addConst('model_class', $schemaArray['model_class']);
     $cTemplate->addConst('model_name', $schema->getModelName());
     $cTemplate->addConst('model_namespace', $schema->getNamespace());
     $cTemplate->addConst('primary_key', $schemaArray['primary_key']);
     $cTemplate->addConst('table', $schema->getTable());
     $cTemplate->addConst('label', $schema->getLabel());
     // export column names excluding virtual columns
     $cTemplate->addStaticVar('column_names', $schema->getColumnNames());
     $cTemplate->addStaticVar('column_hash', array_fill_keys($schema->getColumnNames(), 1));
     $cTemplate->addStaticVar('mixin_classes', array_reverse($schema->getMixinSchemaClasses()));
     // export column names including virutal columns
     $cTemplate->addStaticVar('column_names_include_virtual', $schema->getColumnNames(true));
     $cTemplate->schema = $schema;
     $cTemplate->schema_data = $schemaArray;
     $cTemplate->now = new DateTime();
     // Aggregate basic translations from labels
     $msgIds = $schema->getMsgIds();
     $cTemplate->setMsgIds($msgIds);
     return $cTemplate;
 }