1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203:
<?php
namespace Net\Bazzline\Propel\Behavior\EntityInstantiator;
class FileContentGenerator
{
public function generate(
EntityCollection $collection,
Configuration $configuration
) {
$useStatements = $this->generateUseStatements(
$configuration->doNotUseFullyQualifiedNames(),
$configuration->getNamespace(),
$collection
);
$content = $this->generateFileHeader(
$configuration->getNamespace(),
$useStatements
);
$content .= $this->generateClassHeader(
$configuration->getClassName(),
$configuration->getExtends()
);
$content .= $this->generateGetConnectionMethod(
$configuration->getIndention(),
$configuration->getDefaultConnectionMode(),
$configuration->getDefaultConnectionName()
);
foreach ($collection as $entity) {
$content .= $this->generateObjectEntityOrQueryEntityGetMethod(
$entity,
$configuration->getIndention(),
$configuration->useFullyQualifiedNames()
);
}
$content .= '}';
return $content;
}
private function generateClassHeader(
$className,
$extends
) {
$extends = ($this->isValidString($extends)) ? ' extends ' . $extends : '';
return '
/**
* Class ' . $className . '
*
* @author ' . __CLASS__ . '
* @since ' . date('Y-m-d') . '
* @link http://www.bazzline.net
*/
class ' . $className . $extends . '
{' . PHP_EOL;
}
private function generateObjectEntityOrQueryEntityGetMethod(
AbstractEntity $entity,
$indention,
$useFullyQualifiedName
) {
$methodName = lcfirst($entity->methodNamePrefix() . ucfirst($entity->className()));
$className = ($useFullyQualifiedName)
? '\\' . $entity->fullQualifiedClassName()
: $entity->className();
$content = PHP_EOL .
$indention . '/**' . PHP_EOL .
$indention . ' * @return ' . $className . PHP_EOL .
$indention . ' */' . PHP_EOL .
$indention . 'public function ' . $methodName . '()' . PHP_EOL .
$indention . '{' . PHP_EOL;
if ($entity instanceof ObjectEntity) {
$content .= $indention . $indention . 'return new ' . $className . '();' . PHP_EOL;
} else if ($entity instanceof QueryEntity) {
$content .= $indention . $indention . 'return ' . $className . '::create();' . PHP_EOL;
}
$content .= $indention . '}' . PHP_EOL;
return $content;
}
private function generateFileHeader(
$namespace,
$uses
) {
$content = '<?php';
$content .= ($this->isValidString($namespace))
? str_repeat(PHP_EOL, 2) . 'namespace ' . $namespace . ';' . PHP_EOL
: PHP_EOL;
$thereAreUseStatements = (!empty($uses));
if ($thereAreUseStatements) {
$content .= PHP_EOL;
$content .= implode(PHP_EOL, $uses);
$content .= PHP_EOL;
}
return $content;
}
private function generateGetConnectionMethod(
$indention,
$defaultConnectionMode = null,
$defaultConnectionName = null
) {
return $indention . '/**
' . $indention . ' * @param null|string $name - The data source name that is used to look up the DSN from the runtime configuration file.
' . $indention . ' * @param string $mode The connection mode (this applies to replication systems).
' . $indention . ' * @return PDO
' . $indention . ' * @throws PropelException
' . $indention . ' */
' . $indention . 'public function getConnection($name = ' . $defaultConnectionName . ', $mode = ' . $defaultConnectionMode . ')
' . $indention . '{
' . (str_repeat($indention, 2)) . 'return Propel::getConnection($name, $mode);
' . $indention . '}' . PHP_EOL;
}
private function generateUseStatements(
$includeCollection,
$namespace,
EntityCollection $collection
) {
$uses = [];
if ($this->isValidString($namespace)) {
$uses[] = 'use Propel;';
$uses[] = 'use PropelException;';
$uses[] = 'use PDO;';
}
if ($includeCollection) {
foreach ($collection as $entity) {
$uses[] = 'use ' . $entity->fullQualifiedClassName() . ';';
}
}
natsort($uses);
return $uses;
}
private function isValidString($namespace)
{
return ((is_string($namespace))
&& (strlen($namespace) > 0));
}
}