openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

TargetFactory.class.php (1180B)


      1 <?php
      2 
      3 
      4 namespace cms\generator\target;
      5 
      6 
      7 use util\ClassUtils;
      8 use util\exception\PublisherException;
      9 
     10 class TargetFactory
     11 {
     12 
     13 	/**
     14 	 * Creates a target for publishing files.
     15 	 *
     16 	 * @param string $url URL
     17 	 * @return Target
     18 	 * @throws PublisherException if no target could be created
     19 	 */
     20 	public static function getTargetForUrl( $url ) {
     21 
     22 		$scheme = parse_url( $url,PHP_URL_SCHEME );
     23 
     24 		/** @var Target $target */
     25 		$target = null;
     26 
     27 		switch( $scheme ) {
     28 
     29 			case '':
     30 			case 'file':
     31 			case 'local':
     32 				$target = new LocalTarget($url);
     33 				break;
     34 
     35 			case 'dav':
     36 				$target = new DavTarget($url);
     37 				break;
     38 
     39 			case 'ftp':
     40 				$target = new FtpTarget($url);
     41 				break;
     42 
     43 			case 'ftps':
     44 				$target = new FtpsTarget($url);
     45 				break;
     46 
     47 			case 'scp':
     48 				$target = new ScpTarget($url);
     49 				break;
     50 
     51 			case 'sftp':
     52 				$target = new SFtpTarget($url);
     53 				break;
     54 
     55 			case 's3':
     56 				$target = new S3Target($url);
     57 				break;
     58 
     59 			default:
     60 				throw new PublisherException('The scheme "'.$scheme.'" is not supported.' );
     61 		}
     62 
     63 		if   ( ! $target::isAvailable() )
     64 			throw new PublisherException(ClassUtils::getSimpleClassName($target).' is not available.' );
     65 
     66 		return $target;
     67 	}
     68 }