You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by nd...@apache.org on 2015/05/01 23:32:48 UTC

[01/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Repository: airavata-php-gateway
Updated Branches:
  refs/heads/master 39a110e04 -> 71079c5f4


http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/monolog/monolog/CHANGELOG.mdown
----------------------------------------------------------------------
diff --git a/vendor/monolog/monolog/CHANGELOG.mdown b/vendor/monolog/monolog/CHANGELOG.mdown
new file mode 100644
index 0000000..cf8db7b
--- /dev/null
+++ b/vendor/monolog/monolog/CHANGELOG.mdown
@@ -0,0 +1,217 @@
+### 1.13.1 (2015-03-09)
+
+  * Fixed regression in HipChat requiring a new token to be created
+
+### 1.13.0 (2015-03-05)
+
+  * Added Registry::hasLogger to check for the presence of a logger instance
+  * Added context.user support to RavenHandler
+  * Added HipChat API v2 support in the HipChatHandler
+  * Added NativeMailerHandler::addParameter to pass params to the mail() process
+  * Added context data to SlackHandler when $includeContextAndExtra is true
+  * Added ability to customize the Swift_Message per-email in SwiftMailerHandler
+  * Fixed SwiftMailerHandler to lazily create message instances if a callback is provided
+  * Fixed serialization of INF and NaN values in Normalizer and LineFormatter
+
+### 1.12.0 (2014-12-29)
+
+  * Break: HandlerInterface::isHandling now receives a partial record containing only a level key. This was always the intent and does not break any Monolog handler but is strictly speaking a BC break and you should check if you relied on any other field in your own handlers.
+  * Added PsrHandler to forward records to another PSR-3 logger
+  * Added SamplingHandler to wrap around a handler and include only every Nth record
+  * Added MongoDBFormatter to support better storage with MongoDBHandler (it must be enabled manually for now)
+  * Added exception codes in the output of most formatters
+  * Added LineFormatter::includeStacktraces to enable exception stack traces in logs (uses more than one line)
+  * Added $useShortAttachment to SlackHandler to minify attachment size and $includeExtra to append extra data
+  * Added $host to HipChatHandler for users of private instances
+  * Added $transactionName to NewRelicHandler and support for a transaction_name context value
+  * Fixed MandrillHandler to avoid outputing API call responses
+  * Fixed some non-standard behaviors in SyslogUdpHandler
+
+### 1.11.0 (2014-09-30)
+
+  * Break: The NewRelicHandler extra and context data are now prefixed with extra_ and context_ to avoid clashes. Watch out if you have scripts reading those from the API and rely on names
+  * Added WhatFailureGroupHandler to suppress any exception coming from the wrapped handlers and avoid chain failures if a logging service fails
+  * Added MandrillHandler to send emails via the Mandrillapp.com API
+  * Added SlackHandler to log records to a Slack.com account
+  * Added FleepHookHandler to log records to a Fleep.io account
+  * Added LogglyHandler::addTag to allow adding tags to an existing handler
+  * Added $ignoreEmptyContextAndExtra to LineFormatter to avoid empty [] at the end
+  * Added $useLocking to StreamHandler and RotatingFileHandler to enable flock() while writing
+  * Added support for PhpAmqpLib in the AmqpHandler
+  * Added FingersCrossedHandler::clear and BufferHandler::clear to reset them between batches in long running jobs
+  * Added support for adding extra fields from $_SERVER in the WebProcessor
+  * Fixed support for non-string values in PrsLogMessageProcessor
+  * Fixed SwiftMailer messages being sent with the wrong date in long running scripts
+  * Fixed minor PHP 5.6 compatibility issues
+  * Fixed BufferHandler::close being called twice
+
+### 1.10.0 (2014-06-04)
+
+  * Added Logger::getHandlers() and Logger::getProcessors() methods
+  * Added $passthruLevel argument to FingersCrossedHandler to let it always pass some records through even if the trigger level is not reached
+  * Added support for extra data in NewRelicHandler
+  * Added $expandNewlines flag to the ErrorLogHandler to create multiple log entries when a message has multiple lines
+
+### 1.9.1 (2014-04-24)
+
+  * Fixed regression in RotatingFileHandler file permissions
+  * Fixed initialization of the BufferHandler to make sure it gets flushed after receiving records
+  * Fixed ChromePHPHandler and FirePHPHandler's activation strategies to be more conservative
+
+### 1.9.0 (2014-04-20)
+
+  * Added LogEntriesHandler to send logs to a LogEntries account
+  * Added $filePermissions to tweak file mode on StreamHandler and RotatingFileHandler
+  * Added $useFormatting flag to MemoryProcessor to make it send raw data in bytes
+  * Added support for table formatting in FirePHPHandler via the table context key
+  * Added a TagProcessor to add tags to records, and support for tags in RavenHandler
+  * Added $appendNewline flag to the JsonFormatter to enable using it when logging to files
+  * Added sound support to the PushoverHandler
+  * Fixed multi-threading support in StreamHandler
+  * Fixed empty headers issue when ChromePHPHandler received no records
+  * Fixed default format of the ErrorLogHandler
+
+### 1.8.0 (2014-03-23)
+
+  * Break: the LineFormatter now strips newlines by default because this was a bug, set $allowInlineLineBreaks to true if you need them
+  * Added BrowserConsoleHandler to send logs to any browser's console via console.log() injection in the output
+  * Added FilterHandler to filter records and only allow those of a given list of levels through to the wrapped handler
+  * Added FlowdockHandler to send logs to a Flowdock account
+  * Added RollbarHandler to send logs to a Rollbar account
+  * Added HtmlFormatter to send prettier log emails with colors for each log level
+  * Added GitProcessor to add the current branch/commit to extra record data
+  * Added a Monolog\Registry class to allow easier global access to pre-configured loggers
+  * Added support for the new official graylog2/gelf-php lib for GelfHandler, upgrade if you can by replacing the mlehner/gelf-php requirement
+  * Added support for HHVM
+  * Added support for Loggly batch uploads
+  * Added support for tweaking the content type and encoding in NativeMailerHandler
+  * Added $skipClassesPartials to tweak the ignored classes in the IntrospectionProcessor
+  * Fixed batch request support in GelfHandler
+
+### 1.7.0 (2013-11-14)
+
+  * Added ElasticSearchHandler to send logs to an Elastic Search server
+  * Added DynamoDbHandler and ScalarFormatter to send logs to Amazon's Dynamo DB
+  * Added SyslogUdpHandler to send logs to a remote syslogd server
+  * Added LogglyHandler to send logs to a Loggly account
+  * Added $level to IntrospectionProcessor so it only adds backtraces when needed
+  * Added $version to LogstashFormatter to allow using the new v1 Logstash format
+  * Added $appName to NewRelicHandler
+  * Added configuration of Pushover notification retries/expiry
+  * Added $maxColumnWidth to NativeMailerHandler to change the 70 chars default
+  * Added chainability to most setters for all handlers
+  * Fixed RavenHandler batch processing so it takes the message from the record with highest priority
+  * Fixed HipChatHandler batch processing so it sends all messages at once
+  * Fixed issues with eAccelerator
+  * Fixed and improved many small things
+
+### 1.6.0 (2013-07-29)
+
+  * Added HipChatHandler to send logs to a HipChat chat room
+  * Added ErrorLogHandler to send logs to PHP's error_log function
+  * Added NewRelicHandler to send logs to NewRelic's service
+  * Added Monolog\ErrorHandler helper class to register a Logger as exception/error/fatal handler
+  * Added ChannelLevelActivationStrategy for the FingersCrossedHandler to customize levels by channel
+  * Added stack traces output when normalizing exceptions (json output & co)
+  * Added Monolog\Logger::API constant (currently 1)
+  * Added support for ChromePHP's v4.0 extension
+  * Added support for message priorities in PushoverHandler, see $highPriorityLevel and $emergencyLevel
+  * Added support for sending messages to multiple users at once with the PushoverHandler
+  * Fixed RavenHandler's support for batch sending of messages (when behind a Buffer or FingersCrossedHandler)
+  * Fixed normalization of Traversables with very large data sets, only the first 1000 items are shown now
+  * Fixed issue in RotatingFileHandler when an open_basedir restriction is active
+  * Fixed minor issues in RavenHandler and bumped the API to Raven 0.5.0
+  * Fixed SyslogHandler issue when many were used concurrently with different facilities
+
+### 1.5.0 (2013-04-23)
+
+  * Added ProcessIdProcessor to inject the PID in log records
+  * Added UidProcessor to inject a unique identifier to all log records of one request/run
+  * Added support for previous exceptions in the LineFormatter exception serialization
+  * Added Monolog\Logger::getLevels() to get all available levels
+  * Fixed ChromePHPHandler so it avoids sending headers larger than Chrome can handle
+
+### 1.4.1 (2013-04-01)
+
+  * Fixed exception formatting in the LineFormatter to be more minimalistic
+  * Fixed RavenHandler's handling of context/extra data, requires Raven client >0.1.0
+  * Fixed log rotation in RotatingFileHandler to work with long running scripts spanning multiple days
+  * Fixed WebProcessor array access so it checks for data presence
+  * Fixed Buffer, Group and FingersCrossed handlers to make use of their processors
+
+### 1.4.0 (2013-02-13)
+
+  * Added RedisHandler to log to Redis via the Predis library or the phpredis extension
+  * Added ZendMonitorHandler to log to the Zend Server monitor
+  * Added the possibility to pass arrays of handlers and processors directly in the Logger constructor
+  * Added `$useSSL` option to the PushoverHandler which is enabled by default
+  * Fixed ChromePHPHandler and FirePHPHandler issue when multiple instances are used simultaneously
+  * Fixed header injection capability in the NativeMailHandler
+
+### 1.3.1 (2013-01-11)
+
+  * Fixed LogstashFormatter to be usable with stream handlers
+  * Fixed GelfMessageFormatter levels on Windows
+
+### 1.3.0 (2013-01-08)
+
+  * Added PSR-3 compliance, the `Monolog\Logger` class is now an instance of `Psr\Log\LoggerInterface`
+  * Added PsrLogMessageProcessor that you can selectively enable for full PSR-3 compliance
+  * Added LogstashFormatter (combine with SocketHandler or StreamHandler to send logs to Logstash)
+  * Added PushoverHandler to send mobile notifications
+  * Added CouchDBHandler and DoctrineCouchDBHandler
+  * Added RavenHandler to send data to Sentry servers
+  * Added support for the new MongoClient class in MongoDBHandler
+  * Added microsecond precision to log records' timestamps
+  * Added `$flushOnOverflow` param to BufferHandler to flush by batches instead of losing
+    the oldest entries
+  * Fixed normalization of objects with cyclic references
+
+### 1.2.1 (2012-08-29)
+
+  * Added new $logopts arg to SyslogHandler to provide custom openlog options
+  * Fixed fatal error in SyslogHandler
+
+### 1.2.0 (2012-08-18)
+
+  * Added AmqpHandler (for use with AMQP servers)
+  * Added CubeHandler
+  * Added NativeMailerHandler::addHeader() to send custom headers in mails
+  * Added the possibility to specify more than one recipient in NativeMailerHandler
+  * Added the possibility to specify float timeouts in SocketHandler
+  * Added NOTICE and EMERGENCY levels to conform with RFC 5424
+  * Fixed the log records to use the php default timezone instead of UTC
+  * Fixed BufferHandler not being flushed properly on PHP fatal errors
+  * Fixed normalization of exotic resource types
+  * Fixed the default format of the SyslogHandler to avoid duplicating datetimes in syslog
+
+### 1.1.0 (2012-04-23)
+
+  * Added Monolog\Logger::isHandling() to check if a handler will
+    handle the given log level
+  * Added ChromePHPHandler
+  * Added MongoDBHandler
+  * Added GelfHandler (for use with Graylog2 servers)
+  * Added SocketHandler (for use with syslog-ng for example)
+  * Added NormalizerFormatter
+  * Added the possibility to change the activation strategy of the FingersCrossedHandler
+  * Added possibility to show microseconds in logs
+  * Added `server` and `referer` to WebProcessor output
+
+### 1.0.2 (2011-10-24)
+
+  * Fixed bug in IE with large response headers and FirePHPHandler
+
+### 1.0.1 (2011-08-25)
+
+  * Added MemoryPeakUsageProcessor and MemoryUsageProcessor
+  * Added Monolog\Logger::getName() to get a logger's channel name
+
+### 1.0.0 (2011-07-06)
+
+  * Added IntrospectionProcessor to get info from where the logger was called
+  * Fixed WebProcessor in CLI
+
+### 1.0.0-RC1 (2011-07-01)
+
+  * Initial release


[49/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/lang/en/validation.php
----------------------------------------------------------------------
diff --git a/app/lang/en/validation.php b/app/lang/en/validation.php
new file mode 100755
index 0000000..b03b926
--- /dev/null
+++ b/app/lang/en/validation.php
@@ -0,0 +1,104 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Validation Language Lines
+	|--------------------------------------------------------------------------
+	|
+	| The following language lines contain the default error messages used by
+	| the validator class. Some of these rules have multiple versions such
+	| as the size rules. Feel free to tweak each of these messages here.
+	|
+	*/
+
+	"accepted"             => "The :attribute must be accepted.",
+	"active_url"           => "The :attribute is not a valid URL.",
+	"after"                => "The :attribute must be a date after :date.",
+	"alpha"                => "The :attribute may only contain letters.",
+	"alpha_dash"           => "The :attribute may only contain letters, numbers, and dashes.",
+	"alpha_num"            => "The :attribute may only contain letters and numbers.",
+	"array"                => "The :attribute must be an array.",
+	"before"               => "The :attribute must be a date before :date.",
+	"between"              => array(
+		"numeric" => "The :attribute must be between :min and :max.",
+		"file"    => "The :attribute must be between :min and :max kilobytes.",
+		"string"  => "The :attribute must be between :min and :max characters.",
+		"array"   => "The :attribute must have between :min and :max items.",
+	),
+	"confirmed"            => "The :attribute confirmation does not match.",
+	"date"                 => "The :attribute is not a valid date.",
+	"date_format"          => "The :attribute does not match the format :format.",
+	"different"            => "The :attribute and :other must be different.",
+	"digits"               => "The :attribute must be :digits digits.",
+	"digits_between"       => "The :attribute must be between :min and :max digits.",
+	"email"                => "The :attribute must be a valid email address.",
+	"exists"               => "The selected :attribute is invalid.",
+	"image"                => "The :attribute must be an image.",
+	"in"                   => "The selected :attribute is invalid.",
+	"integer"              => "The :attribute must be an integer.",
+	"ip"                   => "The :attribute must be a valid IP address.",
+	"max"                  => array(
+		"numeric" => "The :attribute may not be greater than :max.",
+		"file"    => "The :attribute may not be greater than :max kilobytes.",
+		"string"  => "The :attribute may not be greater than :max characters.",
+		"array"   => "The :attribute may not have more than :max items.",
+	),
+	"mimes"                => "The :attribute must be a file of type: :values.",
+	"min"                  => array(
+		"numeric" => "The :attribute must be at least :min.",
+		"file"    => "The :attribute must be at least :min kilobytes.",
+		"string"  => "The :attribute must be at least :min characters.",
+		"array"   => "The :attribute must have at least :min items.",
+	),
+	"not_in"               => "The selected :attribute is invalid.",
+	"numeric"              => "The :attribute must be a number.",
+	"regex"                => "The :attribute format is invalid.",
+	"required"             => "The :attribute field is required.",
+	"required_if"          => "The :attribute field is required when :other is :value.",
+	"required_with"        => "The :attribute field is required when :values is present.",
+	"required_with_all"    => "The :attribute field is required when :values is present.",
+	"required_without"     => "The :attribute field is required when :values is not present.",
+	"required_without_all" => "The :attribute field is required when none of :values are present.",
+	"same"                 => "The :attribute and :other must match.",
+	"size"                 => array(
+		"numeric" => "The :attribute must be :size.",
+		"file"    => "The :attribute must be :size kilobytes.",
+		"string"  => "The :attribute must be :size characters.",
+		"array"   => "The :attribute must contain :size items.",
+	),
+	"unique"               => "The :attribute has already been taken.",
+	"url"                  => "The :attribute format is invalid.",
+
+	/*
+	|--------------------------------------------------------------------------
+	| Custom Validation Language Lines
+	|--------------------------------------------------------------------------
+	|
+	| Here you may specify custom validation messages for attributes using the
+	| convention "attribute.rule" to name the lines. This makes it quick to
+	| specify a specific custom language line for a given attribute rule.
+	|
+	*/
+
+	'custom' => array(
+		'attribute-name' => array(
+			'rule-name' => 'custom-message',
+		),
+	),
+
+	/*
+	|--------------------------------------------------------------------------
+	| Custom Validation Attributes
+	|--------------------------------------------------------------------------
+	|
+	| The following language lines are used to swap attribute place-holders
+	| with something more reader friendly such as E-Mail Address instead
+	| of "email". This simply helps us make messages a little cleaner.
+	|
+	*/
+
+	'attributes' => array(),
+
+);


[02/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php
new file mode 100755
index 0000000..81034aa
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php
@@ -0,0 +1,68 @@
+<?php namespace Illuminate\View\Compilers;
+
+use Illuminate\Filesystem\Filesystem;
+
+abstract class Compiler {
+
+	/**
+	 * The Filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * Get the cache path for the compiled views.
+	 *
+	 * @var string
+	 */
+	protected $cachePath;
+
+	/**
+	 * Create a new compiler instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @param  string  $cachePath
+	 * @return void
+	 */
+	public function __construct(Filesystem $files, $cachePath)
+	{
+		$this->files = $files;
+		$this->cachePath = $cachePath;
+	}
+
+	/**
+	 * Get the path to the compiled version of a view.
+	 *
+	 * @param  string  $path
+	 * @return string
+	 */
+	public function getCompiledPath($path)
+	{
+		return $this->cachePath.'/'.md5($path);
+	}
+
+	/**
+	 * Determine if the view at the given path is expired.
+	 *
+	 * @param  string  $path
+	 * @return bool
+	 */
+	public function isExpired($path)
+	{
+		$compiled = $this->getCompiledPath($path);
+
+		// If the compiled file doesn't exist we will indicate that the view is expired
+		// so that it can be re-compiled. Else, we will verify the last modification
+		// of the views is less than the modification times of the compiled views.
+		if ( ! $this->cachePath || ! $this->files->exists($compiled))
+		{
+			return true;
+		}
+
+		$lastModified = $this->files->lastModified($path);
+
+		return $lastModified >= $this->files->lastModified($compiled);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/View/Compilers/CompilerInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/CompilerInterface.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/CompilerInterface.php
new file mode 100755
index 0000000..85034b0
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/CompilerInterface.php
@@ -0,0 +1,29 @@
+<?php namespace Illuminate\View\Compilers;
+
+interface CompilerInterface {
+
+	/**
+	 * Get the path to the compiled version of a view.
+	 *
+	 * @param  string  $path
+	 * @return string
+	 */
+	public function getCompiledPath($path);
+
+	/**
+	 * Determine if the given view is expired.
+	 *
+	 * @param  string  $path
+	 * @return bool
+	 */
+	public function isExpired($path);
+
+	/**
+	 * Compile the view at the given path.
+	 *
+	 * @param  string  $path
+	 * @return void
+	 */
+	public function compile($path);
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php b/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php
new file mode 100755
index 0000000..6c9398e
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php
@@ -0,0 +1,100 @@
+<?php namespace Illuminate\View\Engines;
+
+use Illuminate\View\Compilers\CompilerInterface;
+
+class CompilerEngine extends PhpEngine {
+
+	/**
+	 * The Blade compiler instance.
+	 *
+	 * @var \Illuminate\View\Compilers\CompilerInterface
+	 */
+	protected $compiler;
+
+	/**
+	 * A stack of the last compiled templates.
+	 *
+	 * @var array
+	 */
+	protected $lastCompiled = array();
+
+	/**
+	 * Create a new Blade view engine instance.
+	 *
+	 * @param  \Illuminate\View\Compilers\CompilerInterface  $compiler
+	 * @return void
+	 */
+	public function __construct(CompilerInterface $compiler)
+	{
+		$this->compiler = $compiler;
+	}
+
+	/**
+	 * Get the evaluated contents of the view.
+	 *
+	 * @param  string  $path
+	 * @param  array   $data
+	 * @return string
+	 */
+	public function get($path, array $data = array())
+	{
+		$this->lastCompiled[] = $path;
+
+		// If this given view has expired, which means it has simply been edited since
+		// it was last compiled, we will re-compile the views so we can evaluate a
+		// fresh copy of the view. We'll pass the compiler the path of the view.
+		if ($this->compiler->isExpired($path))
+		{
+			$this->compiler->compile($path);
+		}
+
+		$compiled = $this->compiler->getCompiledPath($path);
+
+		// Once we have the path to the compiled file, we will evaluate the paths with
+		// typical PHP just like any other templates. We also keep a stack of views
+		// which have been rendered for right exception messages to be generated.
+		$results = $this->evaluatePath($compiled, $data);
+
+		array_pop($this->lastCompiled);
+
+		return $results;
+	}
+
+	/**
+	 * Handle a view exception.
+	 *
+	 * @param  \Exception  $e
+	 * @param  int  $obLevel
+	 * @return void
+	 *
+	 * @throws $e
+	 */
+	protected function handleViewException($e, $obLevel)
+	{
+		$e = new \ErrorException($this->getMessage($e), 0, 1, $e->getFile(), $e->getLine(), $e);
+
+		parent::handleViewException($e, $obLevel);
+	}
+
+	/**
+	 * Get the exception message for an exception.
+	 *
+	 * @param  \Exception  $e
+	 * @return string
+	 */
+	protected function getMessage($e)
+	{
+		return $e->getMessage().' (View: '.realpath(last($this->lastCompiled)).')';
+	}
+
+	/**
+	 * Get the compiler implementation.
+	 *
+	 * @return \Illuminate\View\Compilers\CompilerInterface
+	 */
+	public function getCompiler()
+	{
+		return $this->compiler;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/View/Engines/Engine.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/View/Engines/Engine.php b/vendor/laravel/framework/src/Illuminate/View/Engines/Engine.php
new file mode 100755
index 0000000..4ea9796
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/View/Engines/Engine.php
@@ -0,0 +1,22 @@
+<?php namespace Illuminate\View\Engines;
+
+abstract class Engine {
+
+	/**
+	 * The view that was last to be rendered.
+	 *
+	 * @var string
+	 */
+	protected $lastRendered;
+
+	/**
+	 * Get the last view that was rendered.
+	 *
+	 * @return string
+	 */
+	public function getLastRendered()
+	{
+		return $this->lastRendered;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/View/Engines/EngineInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/View/Engines/EngineInterface.php b/vendor/laravel/framework/src/Illuminate/View/Engines/EngineInterface.php
new file mode 100755
index 0000000..5368734
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/View/Engines/EngineInterface.php
@@ -0,0 +1,14 @@
+<?php namespace Illuminate\View\Engines;
+
+interface EngineInterface {
+
+	/**
+	 * Get the evaluated contents of the view.
+	 *
+	 * @param  string  $path
+	 * @param  array   $data
+	 * @return string
+	 */
+	public function get($path, array $data = array());
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/View/Engines/EngineResolver.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/View/Engines/EngineResolver.php b/vendor/laravel/framework/src/Illuminate/View/Engines/EngineResolver.php
new file mode 100755
index 0000000..8317da5
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/View/Engines/EngineResolver.php
@@ -0,0 +1,57 @@
+<?php namespace Illuminate\View\Engines;
+
+use Closure;
+
+class EngineResolver {
+
+	/**
+	 * The array of engine resolvers.
+	 *
+	 * @var array
+	 */
+	protected $resolvers = array();
+
+	/**
+	 * The resolved engine instances.
+	 *
+	 * @var array
+	 */
+	protected $resolved = array();
+
+	/**
+	 * Register a new engine resolver.
+	 *
+	 * The engine string typically corresponds to a file extension.
+	 *
+	 * @param  string   $engine
+	 * @param  \Closure  $resolver
+	 * @return void
+	 */
+	public function register($engine, Closure $resolver)
+	{
+		$this->resolvers[$engine] = $resolver;
+	}
+
+	/**
+	 * Resolver an engine instance by name.
+	 *
+	 * @param  string  $engine
+	 * @return \Illuminate\View\Engines\EngineInterface
+	 * @throws \InvalidArgumentException
+	 */
+	public function resolve($engine)
+	{
+		if (isset($this->resolved[$engine]))
+		{
+			return $this->resolved[$engine];
+		}
+
+		if (isset($this->resolvers[$engine]))
+		{
+			return $this->resolved[$engine] = call_user_func($this->resolvers[$engine]);
+		}
+
+		throw new \InvalidArgumentException("Engine $engine not found.");
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php b/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php
new file mode 100755
index 0000000..5caf580
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php
@@ -0,0 +1,66 @@
+<?php namespace Illuminate\View\Engines;
+
+class PhpEngine implements EngineInterface {
+
+	/**
+	 * Get the evaluated contents of the view.
+	 *
+	 * @param  string  $path
+	 * @param  array   $data
+	 * @return string
+	 */
+	public function get($path, array $data = array())
+	{
+		return $this->evaluatePath($path, $data);
+	}
+
+	/**
+	 * Get the evaluated contents of the view at the given path.
+	 *
+	 * @param  string  $__path
+	 * @param  array   $__data
+	 * @return string
+	 */
+	protected function evaluatePath($__path, $__data)
+	{
+		$obLevel = ob_get_level();
+
+		ob_start();
+
+		extract($__data);
+
+		// We'll evaluate the contents of the view inside a try/catch block so we can
+		// flush out any stray output that might get out before an error occurs or
+		// an exception is thrown. This prevents any partial views from leaking.
+		try
+		{
+			include $__path;
+		}
+		catch (\Exception $e)
+		{
+			$this->handleViewException($e, $obLevel);
+		}
+
+		return ltrim(ob_get_clean());
+	}
+
+	/**
+	 * Handle a view exception.
+	 *
+	 * @param  \Exception  $e
+	 * @param  int  $obLevel
+	 * @return void
+	 *
+	 * @throws $e
+	 */
+	protected function handleViewException($e, $obLevel)
+	{
+		while (ob_get_level() > $obLevel)
+		{
+			ob_end_clean();
+		}
+
+		throw $e;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/View/Factory.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/View/Factory.php b/vendor/laravel/framework/src/Illuminate/View/Factory.php
new file mode 100755
index 0000000..18d41a7
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/View/Factory.php
@@ -0,0 +1,842 @@
+<?php namespace Illuminate\View;
+
+use Closure;
+use Illuminate\Events\Dispatcher;
+use Illuminate\Container\Container;
+use Illuminate\View\Engines\EngineResolver;
+use Illuminate\Support\Contracts\ArrayableInterface as Arrayable;
+
+class Factory {
+
+	/**
+	 * The engine implementation.
+	 *
+	 * @var \Illuminate\View\Engines\EngineResolver
+	 */
+	protected $engines;
+
+	/**
+	 * The view finder implementation.
+	 *
+	 * @var \Illuminate\View\ViewFinderInterface
+	 */
+	protected $finder;
+
+	/**
+	 * The event dispatcher instance.
+	 *
+	 * @var \Illuminate\Events\Dispatcher
+	 */
+	protected $events;
+
+	/**
+	 * The IoC container instance.
+	 *
+	 * @var \Illuminate\Container\Container
+	 */
+	protected $container;
+
+	/**
+	 * Data that should be available to all templates.
+	 *
+	 * @var array
+	 */
+	protected $shared = array();
+
+	/**
+	 * Array of registered view name aliases.
+	 *
+	 * @var array
+	 */
+	protected $aliases = array();
+
+	/**
+	 * All of the registered view names.
+	 *
+	 * @var array
+	 */
+	protected $names = array();
+
+	/**
+	 * The extension to engine bindings.
+	 *
+	 * @var array
+	 */
+	protected $extensions = array('blade.php' => 'blade', 'php' => 'php');
+
+	/**
+	 * The view composer events.
+	 *
+	 * @var array
+	 */
+	protected $composers = array();
+
+	/**
+	 * All of the finished, captured sections.
+	 *
+	 * @var array
+	 */
+	protected $sections = array();
+
+	/**
+	 * The stack of in-progress sections.
+	 *
+	 * @var array
+	 */
+	protected $sectionStack = array();
+
+	/**
+	 * The number of active rendering operations.
+	 *
+	 * @var int
+	 */
+	protected $renderCount = 0;
+
+	/**
+	 * Create a new view factory instance.
+	 *
+	 * @param  \Illuminate\View\Engines\EngineResolver  $engines
+	 * @param  \Illuminate\View\ViewFinderInterface  $finder
+	 * @param  \Illuminate\Events\Dispatcher  $events
+	 * @return void
+	 */
+	public function __construct(EngineResolver $engines, ViewFinderInterface $finder, Dispatcher $events)
+	{
+		$this->finder = $finder;
+		$this->events = $events;
+		$this->engines = $engines;
+
+		$this->share('__env', $this);
+	}
+
+	/**
+	 * Get the evaluated view contents for the given view.
+	 *
+	 * @param  string  $view
+	 * @param  array   $data
+	 * @param  array   $mergeData
+	 * @return \Illuminate\View\View
+	 */
+	public function make($view, $data = array(), $mergeData = array())
+	{
+		if (isset($this->aliases[$view])) $view = $this->aliases[$view];
+
+		$path = $this->finder->find($view);
+
+		$data = array_merge($mergeData, $this->parseData($data));
+
+		$this->callCreator($view = new View($this, $this->getEngineFromPath($path), $view, $path, $data));
+
+		return $view;
+	}
+
+	/**
+	 * Parse the given data into a raw array.
+	 *
+	 * @param  mixed  $data
+	 * @return array
+	 */
+	protected function parseData($data)
+	{
+		return $data instanceof Arrayable ? $data->toArray() : $data;
+	}
+
+	/**
+	 * Get the evaluated view contents for a named view.
+	 *
+	 * @param  string  $view
+	 * @param  mixed   $data
+	 * @return \Illuminate\View\View
+	 */
+	public function of($view, $data = array())
+	{
+		return $this->make($this->names[$view], $data);
+	}
+
+	/**
+	 * Register a named view.
+	 *
+	 * @param  string  $view
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function name($view, $name)
+	{
+		$this->names[$name] = $view;
+	}
+
+	/**
+	 * Add an alias for a view.
+	 *
+	 * @param  string  $view
+	 * @param  string  $alias
+	 * @return void
+	 */
+	public function alias($view, $alias)
+	{
+		$this->aliases[$alias] = $view;
+	}
+
+	/**
+	 * Determine if a given view exists.
+	 *
+	 * @param  string  $view
+	 * @return bool
+	 */
+	public function exists($view)
+	{
+		try
+		{
+			$this->finder->find($view);
+		}
+		catch (\InvalidArgumentException $e)
+		{
+			return false;
+		}
+
+		return true;
+	}
+
+	/**
+	 * Get the rendered contents of a partial from a loop.
+	 *
+	 * @param  string  $view
+	 * @param  array   $data
+	 * @param  string  $iterator
+	 * @param  string  $empty
+	 * @return string
+	 */
+	public function renderEach($view, $data, $iterator, $empty = 'raw|')
+	{
+		$result = '';
+
+		// If is actually data in the array, we will loop through the data and append
+		// an instance of the partial view to the final result HTML passing in the
+		// iterated value of this data array, allowing the views to access them.
+		if (count($data) > 0)
+		{
+			foreach ($data as $key => $value)
+			{
+				$data = array('key' => $key, $iterator => $value);
+
+				$result .= $this->make($view, $data)->render();
+			}
+		}
+
+		// If there is no data in the array, we will render the contents of the empty
+		// view. Alternatively, the "empty view" could be a raw string that begins
+		// with "raw|" for convenience and to let this know that it is a string.
+		else
+		{
+			if (starts_with($empty, 'raw|'))
+			{
+				$result = substr($empty, 4);
+			}
+			else
+			{
+				$result = $this->make($empty)->render();
+			}
+		}
+
+		return $result;
+	}
+
+	/**
+	 * Get the appropriate view engine for the given path.
+	 *
+	 * @param  string  $path
+	 * @return \Illuminate\View\Engines\EngineInterface
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	public function getEngineFromPath($path)
+	{
+		if ( ! $extension = $this->getExtension($path))
+		{
+			throw new \InvalidArgumentException("Unrecognized extension in file: $path");
+		}
+
+		$engine = $this->extensions[$extension];
+
+		return $this->engines->resolve($engine);
+	}
+
+	/**
+	 * Get the extension used by the view file.
+	 *
+	 * @param  string  $path
+	 * @return string
+	 */
+	protected function getExtension($path)
+	{
+		$extensions = array_keys($this->extensions);
+
+		return array_first($extensions, function($key, $value) use ($path)
+		{
+			return ends_with($path, $value);
+		});
+	}
+
+	/**
+	 * Add a piece of shared data to the environment.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function share($key, $value = null)
+	{
+		if ( ! is_array($key)) return $this->shared[$key] = $value;
+
+		foreach ($key as $innerKey => $innerValue)
+		{
+			$this->share($innerKey, $innerValue);
+		}
+	}
+
+	/**
+	 * Register a view creator event.
+	 *
+	 * @param  array|string     $views
+	 * @param  \Closure|string  $callback
+	 * @return array
+	 */
+	public function creator($views, $callback)
+	{
+		$creators = array();
+
+		foreach ((array) $views as $view)
+		{
+			$creators[] = $this->addViewEvent($view, $callback, 'creating: ');
+		}
+
+		return $creators;
+	}
+
+	/**
+	 * Register multiple view composers via an array.
+	 *
+	 * @param  array  $composers
+	 * @return array
+	 */
+	public function composers(array $composers)
+	{
+		$registered = array();
+
+		foreach ($composers as $callback => $views)
+		{
+			$registered = array_merge($registered, $this->composer($views, $callback));
+		}
+
+		return $registered;
+	}
+
+	/**
+	 * Register a view composer event.
+	 *
+	 * @param  array|string  $views
+	 * @param  \Closure|string  $callback
+	 * @param  int|null  $priority
+	 * @return array
+	 */
+	public function composer($views, $callback, $priority = null)
+	{
+		$composers = array();
+
+		foreach ((array) $views as $view)
+		{
+			$composers[] = $this->addViewEvent($view, $callback, 'composing: ', $priority);
+		}
+
+		return $composers;
+	}
+
+	/**
+	 * Add an event for a given view.
+	 *
+	 * @param  string  $view
+	 * @param  \Closure|string  $callback
+	 * @param  string  $prefix
+	 * @param  int|null  $priority
+	 * @return \Closure
+	 */
+	protected function addViewEvent($view, $callback, $prefix = 'composing: ', $priority = null)
+	{
+		if ($callback instanceof Closure)
+		{
+			$this->addEventListener($prefix.$view, $callback, $priority);
+
+			return $callback;
+		}
+		elseif (is_string($callback))
+		{
+			return $this->addClassEvent($view, $callback, $prefix, $priority);
+		}
+	}
+
+	/**
+	 * Register a class based view composer.
+	 *
+	 * @param  string    $view
+	 * @param  string    $class
+	 * @param  string    $prefix
+	 * @param  int|null  $priority
+	 * @return \Closure
+	 */
+	protected function addClassEvent($view, $class, $prefix, $priority = null)
+	{
+		$name = $prefix.$view;
+
+		// When registering a class based view "composer", we will simply resolve the
+		// classes from the application IoC container then call the compose method
+		// on the instance. This allows for convenient, testable view composers.
+		$callback = $this->buildClassEventCallback($class, $prefix);
+
+		$this->addEventListener($name, $callback, $priority);
+
+		return $callback;
+	}
+
+	/**
+	 * Add a listener to the event dispatcher.
+	 *
+	 * @param  string   $name
+	 * @param  \Closure $callback
+	 * @param  int      $priority
+	 * @return void
+	 */
+	protected function addEventListener($name, $callback, $priority = null)
+	{
+		if (is_null($priority))
+		{
+			$this->events->listen($name, $callback);
+		}
+		else
+		{
+			$this->events->listen($name, $callback, $priority);
+		}
+	}
+
+	/**
+	 * Build a class based container callback Closure.
+	 *
+	 * @param  string  $class
+	 * @param  string  $prefix
+	 * @return \Closure
+	 */
+	protected function buildClassEventCallback($class, $prefix)
+	{
+		$container = $this->container;
+
+		list($class, $method) = $this->parseClassEvent($class, $prefix);
+
+		// Once we have the class and method name, we can build the Closure to resolve
+		// the instance out of the IoC container and call the method on it with the
+		// given arguments that are passed to the Closure as the composer's data.
+		return function() use ($class, $method, $container)
+		{
+			$callable = array($container->make($class), $method);
+
+			return call_user_func_array($callable, func_get_args());
+		};
+	}
+
+	/**
+	 * Parse a class based composer name.
+	 *
+	 * @param  string  $class
+	 * @param  string  $prefix
+	 * @return array
+	 */
+	protected function parseClassEvent($class, $prefix)
+	{
+		if (str_contains($class, '@'))
+		{
+			return explode('@', $class);
+		}
+
+		$method = str_contains($prefix, 'composing') ? 'compose' : 'create';
+
+		return array($class, $method);
+	}
+
+	/**
+	 * Call the composer for a given view.
+	 *
+	 * @param  \Illuminate\View\View  $view
+	 * @return void
+	 */
+	public function callComposer(View $view)
+	{
+		$this->events->fire('composing: '.$view->getName(), array($view));
+	}
+
+	/**
+	 * Call the creator for a given view.
+	 *
+	 * @param  \Illuminate\View\View  $view
+	 * @return void
+	 */
+	public function callCreator(View $view)
+	{
+		$this->events->fire('creating: '.$view->getName(), array($view));
+	}
+
+	/**
+	 * Start injecting content into a section.
+	 *
+	 * @param  string  $section
+	 * @param  string  $content
+	 * @return void
+	 */
+	public function startSection($section, $content = '')
+	{
+		if ($content === '')
+		{
+			if (ob_start())
+			{
+				$this->sectionStack[] = $section;
+			}
+		}
+		else
+		{
+			$this->extendSection($section, $content);
+		}
+	}
+
+	/**
+	 * Inject inline content into a section.
+	 *
+	 * @param  string  $section
+	 * @param  string  $content
+	 * @return void
+	 */
+	public function inject($section, $content)
+	{
+		return $this->startSection($section, $content);
+	}
+
+	/**
+	 * Stop injecting content into a section and return its contents.
+	 *
+	 * @return string
+	 */
+	public function yieldSection()
+	{
+		return $this->yieldContent($this->stopSection());
+	}
+
+	/**
+	 * Stop injecting content into a section.
+	 *
+	 * @param  bool  $overwrite
+	 * @return string
+	 */
+	public function stopSection($overwrite = false)
+	{
+		$last = array_pop($this->sectionStack);
+
+		if ($overwrite)
+		{
+			$this->sections[$last] = ob_get_clean();
+		}
+		else
+		{
+			$this->extendSection($last, ob_get_clean());
+		}
+
+		return $last;
+	}
+
+	/**
+	 * Stop injecting content into a section and append it.
+	 *
+	 * @return string
+	 */
+	public function appendSection()
+	{
+		$last = array_pop($this->sectionStack);
+
+		if (isset($this->sections[$last]))
+		{
+			$this->sections[$last] .= ob_get_clean();
+		}
+		else
+		{
+			$this->sections[$last] = ob_get_clean();
+		}
+
+		return $last;
+	}
+
+	/**
+	 * Append content to a given section.
+	 *
+	 * @param  string  $section
+	 * @param  string  $content
+	 * @return void
+	 */
+	protected function extendSection($section, $content)
+	{
+		if (isset($this->sections[$section]))
+		{
+			$content = str_replace('@parent', $content, $this->sections[$section]);
+		}
+
+		$this->sections[$section] = $content;
+	}
+
+	/**
+	 * Get the string contents of a section.
+	 *
+	 * @param  string  $section
+	 * @param  string  $default
+	 * @return string
+	 */
+	public function yieldContent($section, $default = '')
+	{
+		$sectionContent = $default;
+
+		if (isset($this->sections[$section]))
+		{
+			$sectionContent = $this->sections[$section];
+		}
+
+		return str_replace('@parent', '', $sectionContent);
+	}
+
+	/**
+	 * Flush all of the section contents.
+	 *
+	 * @return void
+	 */
+	public function flushSections()
+	{
+		$this->sections = array();
+
+		$this->sectionStack = array();
+	}
+
+	/**
+	 * Flush all of the section contents if done rendering.
+	 *
+	 * @return void
+	 */
+	public function flushSectionsIfDoneRendering()
+	{
+		if ($this->doneRendering()) $this->flushSections();
+	}
+
+	/**
+	 * Increment the rendering counter.
+	 *
+	 * @return void
+	 */
+	public function incrementRender()
+	{
+		$this->renderCount++;
+	}
+
+	/**
+	 * Decrement the rendering counter.
+	 *
+	 * @return void
+	 */
+	public function decrementRender()
+	{
+		$this->renderCount--;
+	}
+
+	/**
+	 * Check if there are no active render operations.
+	 *
+	 * @return bool
+	 */
+	public function doneRendering()
+	{
+		return $this->renderCount == 0;
+	}
+
+	/**
+	 * Add a location to the array of view locations.
+	 *
+	 * @param  string  $location
+	 * @return void
+	 */
+	public function addLocation($location)
+	{
+		$this->finder->addLocation($location);
+	}
+
+	/**
+	 * Add a new namespace to the loader.
+	 *
+	 * @param  string  $namespace
+	 * @param  string|array  $hints
+	 * @return void
+	 */
+	public function addNamespace($namespace, $hints)
+	{
+		$this->finder->addNamespace($namespace, $hints);
+	}
+
+	/**
+	 * Prepend a new namespace to the loader.
+	 *
+	 * @param  string  $namespace
+	 * @param  string|array  $hints
+	 * @return void
+	 */
+	public function prependNamespace($namespace, $hints)
+	{
+		$this->finder->prependNamespace($namespace, $hints);
+	}
+
+	/**
+	 * Register a valid view extension and its engine.
+	 *
+	 * @param  string    $extension
+	 * @param  string    $engine
+	 * @param  \Closure  $resolver
+	 * @return void
+	 */
+	public function addExtension($extension, $engine, $resolver = null)
+	{
+		$this->finder->addExtension($extension);
+
+		if (isset($resolver))
+		{
+			$this->engines->register($engine, $resolver);
+		}
+
+		unset($this->extensions[$extension]);
+
+		$this->extensions = array_merge(array($extension => $engine), $this->extensions);
+	}
+
+	/**
+	 * Get the extension to engine bindings.
+	 *
+	 * @return array
+	 */
+	public function getExtensions()
+	{
+		return $this->extensions;
+	}
+
+	/**
+	 * Get the engine resolver instance.
+	 *
+	 * @return \Illuminate\View\Engines\EngineResolver
+	 */
+	public function getEngineResolver()
+	{
+		return $this->engines;
+	}
+
+	/**
+	 * Get the view finder instance.
+	 *
+	 * @return \Illuminate\View\ViewFinderInterface
+	 */
+	public function getFinder()
+	{
+		return $this->finder;
+	}
+
+	/**
+	 * Set the view finder instance.
+	 *
+	 * @param  \Illuminate\View\ViewFinderInterface  $finder
+	 * @return void
+	 */
+	public function setFinder(ViewFinderInterface $finder)
+	{
+		$this->finder = $finder;
+	}
+
+	/**
+	 * Get the event dispatcher instance.
+	 *
+	 * @return \Illuminate\Events\Dispatcher
+	 */
+	public function getDispatcher()
+	{
+		return $this->events;
+	}
+
+	/**
+	 * Set the event dispatcher instance.
+	 *
+	 * @param  \Illuminate\Events\Dispatcher
+	 * @return void
+	 */
+	public function setDispatcher(Dispatcher $events)
+	{
+		$this->events = $events;
+	}
+
+	/**
+	 * Get the IoC container instance.
+	 *
+	 * @return \Illuminate\Container\Container
+	 */
+	public function getContainer()
+	{
+		return $this->container;
+	}
+
+	/**
+	 * Set the IoC container instance.
+	 *
+	 * @param  \Illuminate\Container\Container  $container
+	 * @return void
+	 */
+	public function setContainer(Container $container)
+	{
+		$this->container = $container;
+	}
+
+	/**
+	 * Get an item from the shared data.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return mixed
+	 */
+	public function shared($key, $default = null)
+	{
+		return array_get($this->shared, $key, $default);
+	}
+
+	/**
+	 * Get all of the shared data for the environment.
+	 *
+	 * @return array
+	 */
+	public function getShared()
+	{
+		return $this->shared;
+	}
+
+	/**
+	 * Get the entire array of sections.
+	 *
+	 * @return array
+	 */
+	public function getSections()
+	{
+		return $this->sections;
+	}
+
+	/**
+	 * Get all of the registered named views in environment.
+	 *
+	 * @return array
+	 */
+	public function getNames()
+	{
+		return $this->names;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/View/FileViewFinder.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/View/FileViewFinder.php b/vendor/laravel/framework/src/Illuminate/View/FileViewFinder.php
new file mode 100755
index 0000000..e593f4c
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/View/FileViewFinder.php
@@ -0,0 +1,280 @@
+<?php namespace Illuminate\View;
+
+use Illuminate\Filesystem\Filesystem;
+
+class FileViewFinder implements ViewFinderInterface {
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * The array of active view paths.
+	 *
+	 * @var array
+	 */
+	protected $paths;
+
+	/**
+	 * The array of views that have been located.
+	 *
+	 * @var array
+	 */
+	protected $views = array();
+
+	/**
+	 * The namespace to file path hints.
+	 *
+	 * @var array
+	 */
+	protected $hints = array();
+
+	/**
+	 * Register a view extension with the finder.
+	 *
+	 * @var array
+	 */
+	protected $extensions = array('blade.php', 'php');
+
+	/**
+	 * Hint path delimiter value.
+	 *
+	 * @var string
+	 */
+	const HINT_PATH_DELIMITER = '::';
+
+	/**
+	 * Create a new file view loader instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @param  array  $paths
+	 * @param  array  $extensions
+	 * @return void
+	 */
+	public function __construct(Filesystem $files, array $paths, array $extensions = null)
+	{
+		$this->files = $files;
+		$this->paths = $paths;
+
+		if (isset($extensions))
+		{
+			$this->extensions = $extensions;
+		}
+	}
+
+	/**
+	 * Get the fully qualified location of the view.
+	 *
+	 * @param  string  $name
+	 * @return string
+	 */
+	public function find($name)
+	{
+		if (isset($this->views[$name])) return $this->views[$name];
+
+		if ($this->hasHintInformation($name = trim($name)))
+		{
+			return $this->views[$name] = $this->findNamedPathView($name);
+		}
+
+		return $this->views[$name] = $this->findInPaths($name, $this->paths);
+	}
+
+	/**
+	 * Get the path to a template with a named path.
+	 *
+	 * @param  string  $name
+	 * @return string
+	 */
+	protected function findNamedPathView($name)
+	{
+		list($namespace, $view) = $this->getNamespaceSegments($name);
+
+		return $this->findInPaths($view, $this->hints[$namespace]);
+	}
+
+	/**
+	 * Get the segments of a template with a named path.
+	 *
+	 * @param  string  $name
+	 * @return array
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	protected function getNamespaceSegments($name)
+	{
+		$segments = explode(static::HINT_PATH_DELIMITER, $name);
+
+		if (count($segments) != 2)
+		{
+			throw new \InvalidArgumentException("View [$name] has an invalid name.");
+		}
+
+		if ( ! isset($this->hints[$segments[0]]))
+		{
+			throw new \InvalidArgumentException("No hint path defined for [{$segments[0]}].");
+		}
+
+		return $segments;
+	}
+
+	/**
+	 * Find the given view in the list of paths.
+	 *
+	 * @param  string  $name
+	 * @param  array   $paths
+	 * @return string
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	protected function findInPaths($name, $paths)
+	{
+		foreach ((array) $paths as $path)
+		{
+			foreach ($this->getPossibleViewFiles($name) as $file)
+			{
+				if ($this->files->exists($viewPath = $path.'/'.$file))
+				{
+					return $viewPath;
+				}
+			}
+		}
+
+		throw new \InvalidArgumentException("View [$name] not found.");
+	}
+
+	/**
+	 * Get an array of possible view files.
+	 *
+	 * @param  string  $name
+	 * @return array
+	 */
+	protected function getPossibleViewFiles($name)
+	{
+		return array_map(function($extension) use ($name)
+		{
+			return str_replace('.', '/', $name).'.'.$extension;
+
+		}, $this->extensions);
+	}
+
+	/**
+	 * Add a location to the finder.
+	 *
+	 * @param  string  $location
+	 * @return void
+	 */
+	public function addLocation($location)
+	{
+		$this->paths[] = $location;
+	}
+
+	/**
+	 * Add a namespace hint to the finder.
+	 *
+	 * @param  string  $namespace
+	 * @param  string|array  $hints
+	 * @return void
+	 */
+	public function addNamespace($namespace, $hints)
+	{
+		$hints = (array) $hints;
+
+		if (isset($this->hints[$namespace]))
+		{
+			$hints = array_merge($this->hints[$namespace], $hints);
+		}
+
+		$this->hints[$namespace] = $hints;
+	}
+
+	/**
+	 * Prepend a namespace hint to the finder.
+	 *
+	 * @param  string  $namespace
+	 * @param  string|array  $hints
+	 * @return void
+	 */
+	public function prependNamespace($namespace, $hints)
+	{
+		$hints = (array) $hints;
+
+		if (isset($this->hints[$namespace]))
+		{
+			$hints = array_merge($hints, $this->hints[$namespace]);
+		}
+
+		$this->hints[$namespace] = $hints;
+	}
+
+	/**
+	 * Register an extension with the view finder.
+	 *
+	 * @param  string  $extension
+	 * @return void
+	 */
+	public function addExtension($extension)
+	{
+		if (($index = array_search($extension, $this->extensions)) !== false)
+		{
+			unset($this->extensions[$index]);
+		}
+
+		array_unshift($this->extensions, $extension);
+	}
+
+	/**
+	 * Returns whether or not the view specify a hint information.
+	 *
+	 * @param  string  $name
+	 * @return boolean
+	 */
+	public function hasHintInformation($name)
+	{
+		return strpos($name, static::HINT_PATH_DELIMITER) > 0;
+	}
+
+	/**
+	 * Get the filesystem instance.
+	 *
+	 * @return \Illuminate\Filesystem\Filesystem
+	 */
+	public function getFilesystem()
+	{
+		return $this->files;
+	}
+
+	/**
+	 * Get the active view paths.
+	 *
+	 * @return array
+	 */
+	public function getPaths()
+	{
+		return $this->paths;
+	}
+
+	/**
+	 * Get the namespace to file path hints.
+	 *
+	 * @return array
+	 */
+	public function getHints()
+	{
+		return $this->hints;
+	}
+
+	/**
+	 * Get registered extensions.
+	 *
+	 * @return array
+	 */
+	public function getExtensions()
+	{
+		return $this->extensions;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/View/View.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/View/View.php b/vendor/laravel/framework/src/Illuminate/View/View.php
new file mode 100755
index 0000000..c09854a
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/View/View.php
@@ -0,0 +1,391 @@
+<?php namespace Illuminate\View;
+
+use ArrayAccess;
+use Closure;
+use Illuminate\Support\MessageBag;
+use Illuminate\View\Engines\EngineInterface;
+use Illuminate\Support\Contracts\MessageProviderInterface;
+use Illuminate\Support\Contracts\ArrayableInterface as Arrayable;
+use Illuminate\Support\Contracts\RenderableInterface as Renderable;
+
+class View implements ArrayAccess, Renderable {
+
+	/**
+	 * The view factory instance.
+	 *
+	 * @var \Illuminate\View\Factory
+	 */
+	protected $factory;
+
+	/**
+	 * The engine implementation.
+	 *
+	 * @var \Illuminate\View\Engines\EngineInterface
+	 */
+	protected $engine;
+
+	/**
+	 * The name of the view.
+	 *
+	 * @var string
+	 */
+	protected $view;
+
+	/**
+	 * The array of view data.
+	 *
+	 * @var array
+	 */
+	protected $data;
+
+	/**
+	 * The path to the view file.
+	 *
+	 * @var string
+	 */
+	protected $path;
+
+	/**
+	 * Create a new view instance.
+	 *
+	 * @param  \Illuminate\View\Factory  $factory
+	 * @param  \Illuminate\View\Engines\EngineInterface  $engine
+	 * @param  string  $view
+	 * @param  string  $path
+	 * @param  array   $data
+	 * @return void
+	 */
+	public function __construct(Factory $factory, EngineInterface $engine, $view, $path, $data = array())
+	{
+		$this->view = $view;
+		$this->path = $path;
+		$this->engine = $engine;
+		$this->factory = $factory;
+
+		$this->data = $data instanceof Arrayable ? $data->toArray() : (array) $data;
+	}
+
+	/**
+	 * Get the string contents of the view.
+	 *
+	 * @param  \Closure  $callback
+	 * @return string
+	 */
+	public function render(Closure $callback = null)
+	{
+		$contents = $this->renderContents();
+
+		$response = isset($callback) ? $callback($this, $contents) : null;
+
+		// Once we have the contents of the view, we will flush the sections if we are
+		// done rendering all views so that there is nothing left hanging over when
+		// another view gets rendered in the future by the application developer.
+		$this->factory->flushSectionsIfDoneRendering();
+
+		return $response ?: $contents;
+	}
+
+	/**
+	 * Get the contents of the view instance.
+	 *
+	 * @return string
+	 */
+	protected function renderContents()
+	{
+		// We will keep track of the amount of views being rendered so we can flush
+		// the section after the complete rendering operation is done. This will
+		// clear out the sections for any separate views that may be rendered.
+		$this->factory->incrementRender();
+
+		$this->factory->callComposer($this);
+
+		$contents = $this->getContents();
+
+		// Once we've finished rendering the view, we'll decrement the render count
+		// so that each sections get flushed out next time a view is created and
+		// no old sections are staying around in the memory of an environment.
+		$this->factory->decrementRender();
+
+		return $contents;
+	}
+
+	/**
+	 * Get the sections of the rendered view.
+	 *
+	 * @return array
+	 */
+	public function renderSections()
+	{
+		$env = $this->factory;
+
+		return $this->render(function($view) use ($env)
+		{
+			return $env->getSections();
+		});
+	}
+
+	/**
+	 * Get the evaluated contents of the view.
+	 *
+	 * @return string
+	 */
+	protected function getContents()
+	{
+		return $this->engine->get($this->path, $this->gatherData());
+	}
+
+	/**
+	 * Get the data bound to the view instance.
+	 *
+	 * @return array
+	 */
+	protected function gatherData()
+	{
+		$data = array_merge($this->factory->getShared(), $this->data);
+
+		foreach ($data as $key => $value)
+		{
+			if ($value instanceof Renderable)
+			{
+				$data[$key] = $value->render();
+			}
+		}
+
+		return $data;
+	}
+
+	/**
+	 * Add a piece of data to the view.
+	 *
+	 * @param  string|array  $key
+	 * @param  mixed   $value
+	 * @return $this
+	 */
+	public function with($key, $value = null)
+	{
+		if (is_array($key))
+		{
+			$this->data = array_merge($this->data, $key);
+		}
+		else
+		{
+			$this->data[$key] = $value;
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Add a view instance to the view data.
+	 *
+	 * @param  string  $key
+	 * @param  string  $view
+	 * @param  array   $data
+	 * @return $this
+	 */
+	public function nest($key, $view, array $data = array())
+	{
+		return $this->with($key, $this->factory->make($view, $data));
+	}
+
+	/**
+	 * Add validation errors to the view.
+	 *
+	 * @param  \Illuminate\Support\Contracts\MessageProviderInterface|array  $provider
+	 * @return $this
+	 */
+	public function withErrors($provider)
+	{
+		if ($provider instanceof MessageProviderInterface)
+		{
+			$this->with('errors', $provider->getMessageBag());
+		}
+		else
+		{
+			$this->with('errors', new MessageBag((array) $provider));
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Get the view factory instance.
+	 *
+	 * @return \Illuminate\View\Factory
+	 */
+	public function getFactory()
+	{
+		return $this->factory;
+	}
+
+	/**
+	 * Get the view's rendering engine.
+	 *
+	 * @return \Illuminate\View\Engines\EngineInterface
+	 */
+	public function getEngine()
+	{
+		return $this->engine;
+	}
+
+	/**
+	 * Get the name of the view.
+	 *
+	 * @return string
+	 */
+	public function getName()
+	{
+		return $this->view;
+	}
+
+	/**
+	 * Get the array of view data.
+	 *
+	 * @return array
+	 */
+	public function getData()
+	{
+		return $this->data;
+	}
+
+	/**
+	 * Get the path to the view file.
+	 *
+	 * @return string
+	 */
+	public function getPath()
+	{
+		return $this->path;
+	}
+
+	/**
+	 * Set the path to the view.
+	 *
+	 * @param  string  $path
+	 * @return void
+	 */
+	public function setPath($path)
+	{
+		$this->path = $path;
+	}
+
+	/**
+	 * Determine if a piece of data is bound.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function offsetExists($key)
+	{
+		return array_key_exists($key, $this->data);
+	}
+
+	/**
+	 * Get a piece of bound data to the view.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function offsetGet($key)
+	{
+		return $this->data[$key];
+	}
+
+	/**
+	 * Set a piece of data on the view.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function offsetSet($key, $value)
+	{
+		$this->with($key, $value);
+	}
+
+	/**
+	 * Unset a piece of data from the view.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function offsetUnset($key)
+	{
+		unset($this->data[$key]);
+	}
+
+	/**
+	 * Get a piece of data from the view.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function &__get($key)
+	{
+		return $this->data[$key];
+	}
+
+	/**
+	 * Set a piece of data on the view.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function __set($key, $value)
+	{
+		$this->with($key, $value);
+	}
+
+	/**
+	 * Check if a piece of data is bound to the view.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function __isset($key)
+	{
+		return isset($this->data[$key]);
+	}
+
+	/**
+	 * Remove a piece of bound data from the view.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function __unset($key)
+	{
+		unset($this->data[$key]);
+	}
+
+	/**
+	 * Dynamically bind parameters to the view.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return \Illuminate\View\View
+	 *
+	 * @throws \BadMethodCallException
+	 */
+	public function __call($method, $parameters)
+	{
+		if (starts_with($method, 'with'))
+		{
+			return $this->with(snake_case(substr($method, 4)), $parameters[0]);
+		}
+
+		throw new \BadMethodCallException("Method [$method] does not exist on view.");
+	}
+
+	/**
+	 * Get the string contents of the view.
+	 *
+	 * @return string
+	 */
+	public function __toString()
+	{
+		return $this->render();
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/View/ViewFinderInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/View/ViewFinderInterface.php b/vendor/laravel/framework/src/Illuminate/View/ViewFinderInterface.php
new file mode 100755
index 0000000..61100f3
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/View/ViewFinderInterface.php
@@ -0,0 +1,47 @@
+<?php namespace Illuminate\View;
+
+interface ViewFinderInterface {
+
+	/**
+	 * Get the fully qualified location of the view.
+	 *
+	 * @param  string  $view
+	 * @return string
+	 */
+	public function find($view);
+
+	/**
+	 * Add a location to the finder.
+	 *
+	 * @param  string  $location
+	 * @return void
+	 */
+	public function addLocation($location);
+
+	/**
+	 * Add a namespace hint to the finder.
+	 *
+	 * @param  string  $namespace
+	 * @param  string|array  $hints
+	 * @return void
+	 */
+	public function addNamespace($namespace, $hints);
+
+	/**
+	 * Prepend a namespace hint to the finder.
+	 *
+	 * @param  string  $namespace
+	 * @param  string|array  $hints
+	 * @return void
+	 */
+	public function prependNamespace($namespace, $hints);
+
+	/**
+	 * Add a valid view extension to the finder.
+	 *
+	 * @param  string  $extension
+	 * @return void
+	 */
+	public function addExtension($extension);
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/View/ViewServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/View/ViewServiceProvider.php b/vendor/laravel/framework/src/Illuminate/View/ViewServiceProvider.php
new file mode 100755
index 0000000..e186da8
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/View/ViewServiceProvider.php
@@ -0,0 +1,182 @@
+<?php namespace Illuminate\View;
+
+use Illuminate\Support\ViewErrorBag;
+use Illuminate\View\Engines\PhpEngine;
+use Illuminate\Support\ServiceProvider;
+use Illuminate\View\Engines\CompilerEngine;
+use Illuminate\View\Engines\EngineResolver;
+use Illuminate\View\Compilers\BladeCompiler;
+
+class ViewServiceProvider extends ServiceProvider {
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->registerEngineResolver();
+
+		$this->registerViewFinder();
+
+		// Once the other components have been registered we're ready to include the
+		// view environment and session binder. The session binder will bind onto
+		// the "before" application event and add errors into shared view data.
+		$this->registerFactory();
+
+		$this->registerSessionBinder();
+	}
+
+	/**
+	 * Register the engine resolver instance.
+	 *
+	 * @return void
+	 */
+	public function registerEngineResolver()
+	{
+		$this->app->bindShared('view.engine.resolver', function()
+		{
+			$resolver = new EngineResolver;
+
+			// Next we will register the various engines with the resolver so that the
+			// environment can resolve the engines it needs for various views based
+			// on the extension of view files. We call a method for each engines.
+			foreach (array('php', 'blade') as $engine)
+			{
+				$this->{'register'.ucfirst($engine).'Engine'}($resolver);
+			}
+
+			return $resolver;
+		});
+	}
+
+	/**
+	 * Register the PHP engine implementation.
+	 *
+	 * @param  \Illuminate\View\Engines\EngineResolver  $resolver
+	 * @return void
+	 */
+	public function registerPhpEngine($resolver)
+	{
+		$resolver->register('php', function() { return new PhpEngine; });
+	}
+
+	/**
+	 * Register the Blade engine implementation.
+	 *
+	 * @param  \Illuminate\View\Engines\EngineResolver  $resolver
+	 * @return void
+	 */
+	public function registerBladeEngine($resolver)
+	{
+		$app = $this->app;
+
+		// The Compiler engine requires an instance of the CompilerInterface, which in
+		// this case will be the Blade compiler, so we'll first create the compiler
+		// instance to pass into the engine so it can compile the views properly.
+		$app->bindShared('blade.compiler', function($app)
+		{
+			$cache = $app['path.storage'].'/views';
+
+			return new BladeCompiler($app['files'], $cache);
+		});
+
+		$resolver->register('blade', function() use ($app)
+		{
+			return new CompilerEngine($app['blade.compiler'], $app['files']);
+		});
+	}
+
+	/**
+	 * Register the view finder implementation.
+	 *
+	 * @return void
+	 */
+	public function registerViewFinder()
+	{
+		$this->app->bindShared('view.finder', function($app)
+		{
+			$paths = $app['config']['view.paths'];
+
+			return new FileViewFinder($app['files'], $paths);
+		});
+	}
+
+	/**
+	 * Register the view environment.
+	 *
+	 * @return void
+	 */
+	public function registerFactory()
+	{
+		$this->app->bindShared('view', function($app)
+		{
+			// Next we need to grab the engine resolver instance that will be used by the
+			// environment. The resolver will be used by an environment to get each of
+			// the various engine implementations such as plain PHP or Blade engine.
+			$resolver = $app['view.engine.resolver'];
+
+			$finder = $app['view.finder'];
+
+			$env = new Factory($resolver, $finder, $app['events']);
+
+			// We will also set the container instance on this view environment since the
+			// view composers may be classes registered in the container, which allows
+			// for great testable, flexible composers for the application developer.
+			$env->setContainer($app);
+
+			$env->share('app', $app);
+
+			return $env;
+		});
+	}
+
+	/**
+	 * Register the session binder for the view environment.
+	 *
+	 * @return void
+	 */
+	protected function registerSessionBinder()
+	{
+		list($app, $me) = array($this->app, $this);
+
+		$app->booted(function() use ($app, $me)
+		{
+			// If the current session has an "errors" variable bound to it, we will share
+			// its value with all view instances so the views can easily access errors
+			// without having to bind. An empty bag is set when there aren't errors.
+			if ($me->sessionHasErrors($app))
+			{
+				$errors = $app['session.store']->get('errors');
+
+				$app['view']->share('errors', $errors);
+			}
+
+			// Putting the errors in the view for every view allows the developer to just
+			// assume that some errors are always available, which is convenient since
+			// they don't have to continually run checks for the presence of errors.
+			else
+			{
+				$app['view']->share('errors', new ViewErrorBag);
+			}
+		});
+	}
+
+	/**
+	 * Determine if the application session has errors.
+	 *
+	 * @param  \Illuminate\Foundation\Application  $app
+	 * @return bool
+	 */
+	public function sessionHasErrors($app)
+	{
+		$config = $app['config']['session'];
+
+		if (isset($app['session.store']) && ! is_null($config['driver']))
+		{
+			return $app['session.store']->has('errors');
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/View/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/View/composer.json b/vendor/laravel/framework/src/Illuminate/View/composer.json
new file mode 100755
index 0000000..8b6b535
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/View/composer.json
@@ -0,0 +1,29 @@
+{
+    "name": "illuminate/view",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/container": "4.2.*",
+        "illuminate/events": "4.2.*",
+        "illuminate/filesystem": "4.2.*",
+        "illuminate/support": "4.2.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\View": ""
+        }
+    },
+    "target-dir": "Illuminate/View",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Workbench/Console/WorkbenchMakeCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Workbench/Console/WorkbenchMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Workbench/Console/WorkbenchMakeCommand.php
new file mode 100755
index 0000000..a93eb2a
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Workbench/Console/WorkbenchMakeCommand.php
@@ -0,0 +1,144 @@
+<?php namespace Illuminate\Workbench\Console;
+
+use Illuminate\Console\Command;
+use Illuminate\Workbench\Package;
+use Illuminate\Workbench\PackageCreator;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputArgument;
+
+class WorkbenchMakeCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'workbench';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Create a new package workbench';
+
+	/**
+	 * The package creator instance.
+	 *
+	 * @var \Illuminate\Workbench\PackageCreator
+	 */
+	protected $creator;
+
+	/**
+	 * Create a new make workbench command instance.
+	 *
+	 * @param  \Illuminate\Workbench\PackageCreator  $creator
+	 * @return void
+	 */
+	public function __construct(PackageCreator $creator)
+	{
+		parent::__construct();
+
+		$this->creator = $creator;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$workbench = $this->runCreator($this->buildPackage());
+
+		$this->info('Package workbench created!');
+
+		$this->callComposerUpdate($workbench);
+	}
+
+	/**
+	 * Run the package creator class for a given Package.
+	 *
+	 * @param  \Illuminate\Workbench\Package  $package
+	 * @return string
+	 */
+	protected function runCreator($package)
+	{
+		$path = $this->laravel['path.base'].'/workbench';
+
+		$plain = ! $this->option('resources');
+
+		return $this->creator->create($package, $path, $plain);
+	}
+
+	/**
+	 * Call the composer update routine on the path.
+	 *
+	 * @param  string  $path
+	 * @return void
+	 */
+	protected function callComposerUpdate($path)
+	{
+		chdir($path);
+
+		passthru('composer install --dev');
+	}
+
+	/**
+	 * Build the package details from user input.
+	 *
+	 * @return \Illuminate\Workbench\Package
+	 *
+	 * @throws \UnexpectedValueException
+	 */
+	protected function buildPackage()
+	{
+		list($vendor, $name) = $this->getPackageSegments();
+
+		$config = $this->laravel['config']['workbench'];
+
+		if (is_null($config['email']))
+		{
+			throw new \UnexpectedValueException("Please set the author's email in the workbench configuration file.");
+		}
+
+		return new Package($vendor, $name, $config['name'], $config['email']);
+	}
+
+	/**
+	 * Get the package vendor and name segments from the input.
+	 *
+	 * @return array
+	 */
+	protected function getPackageSegments()
+	{
+		$package = $this->argument('package');
+
+		return array_map('studly_case', explode('/', $package, 2));
+	}
+
+	/**
+	 * Get the console command arguments.
+	 *
+	 * @return array
+	 */
+	protected function getArguments()
+	{
+		return array(
+			array('package', InputArgument::REQUIRED, 'The name (vendor/name) of the package.'),
+		);
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('resources', null, InputOption::VALUE_NONE, 'Create Laravel specific directories.'),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Workbench/Package.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Workbench/Package.php b/vendor/laravel/framework/src/Illuminate/Workbench/Package.php
new file mode 100755
index 0000000..b87f8c2
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Workbench/Package.php
@@ -0,0 +1,76 @@
+<?php namespace Illuminate\Workbench;
+
+class Package {
+
+	/**
+	 * The vendor name of the package.
+	 *
+	 * @var string
+	 */
+	public $vendor;
+
+	/**
+	 * The snake-cased version of the vendor.
+	 *
+	 * @var string
+	 */
+	public $lowerVendor;
+
+	/**
+	 * The name of the package.
+	 *
+	 * @var string
+	 */
+	public $name;
+
+	/**
+	 * The snake-cased version of the package.
+	 *
+	 * @var string
+	 */
+	public $lowerName;
+
+	/**
+	 * The name of the author.
+	 *
+	 * @var string
+	 */
+	public $author;
+
+	/**
+	 * The email address of the author.
+	 *
+	 * @var string
+	 */
+	public $email;
+
+	/**
+	 * Create a new package instance.
+	 *
+	 * @param  string  $vendor
+	 * @param  string  $name
+	 * @param  string  $author
+	 * @param  string  $email
+	 * @return void
+	 */
+	public function __construct($vendor, $name, $author, $email)
+	{
+		$this->name = $name;
+		$this->email = $email;
+		$this->vendor = $vendor;
+		$this->author = $author;
+		$this->lowerName = snake_case($name, '-');
+		$this->lowerVendor = snake_case($vendor, '-');
+	}
+
+	/**
+	 * Get the full package name.
+	 *
+	 * @return string
+	 */
+	public function getFullName()
+	{
+		return $this->lowerVendor.'/'.$this->lowerName;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Workbench/PackageCreator.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Workbench/PackageCreator.php b/vendor/laravel/framework/src/Illuminate/Workbench/PackageCreator.php
new file mode 100755
index 0000000..8567d1f
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Workbench/PackageCreator.php
@@ -0,0 +1,376 @@
+<?php namespace Illuminate\Workbench;
+
+use Illuminate\Filesystem\Filesystem;
+
+class PackageCreator {
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * The basic building blocks of the package.
+	 *
+	 * @param  array
+	 */
+	protected $basicBlocks = array(
+		'SupportFiles',
+		'TestDirectory',
+		'ServiceProvider',
+	);
+
+	/**
+	 * The building blocks of the package.
+	 *
+	 * @param  array
+	 */
+	protected $blocks = array(
+		'SupportFiles',
+		'SupportDirectories',
+		'PublicDirectory',
+		'TestDirectory',
+		'ServiceProvider',
+	);
+
+	/**
+	 * Create a new package creator instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @return void
+	 */
+	public function __construct(Filesystem $files)
+	{
+		$this->files = $files;
+	}
+
+	/**
+	 * Create a new package stub.
+	 *
+	 * @param  \Illuminate\Workbench\Package  $package
+	 * @param  string  $path
+	 * @param  bool    $plain
+	 * @return string
+	 */
+	public function create(Package $package, $path, $plain = true)
+	{
+		$directory = $this->createDirectory($package, $path);
+
+		// To create the package, we will spin through a list of building blocks that
+		// make up each package. We'll then call the method to build that block on
+		// the class, which keeps the actual building of stuff nice and cleaned.
+		foreach ($this->getBlocks($plain) as $block)
+		{
+			$this->{"write{$block}"}($package, $directory, $plain);
+		}
+
+		return $directory;
+	}
+
+	/**
+	 * Create a package with all resource directories.
+	 *
+	 * @param  \Illuminate\Workbench\Package  $package
+	 * @param  string  $path
+	 * @return void
+	 */
+	public function createWithResources(Package $package, $path)
+	{
+		return $this->create($package, $path, false);
+	}
+
+	/**
+	 * Get the blocks for a given package.
+	 *
+	 * @param  bool  $plain
+	 * @return array
+	 */
+	protected function getBlocks($plain)
+	{
+		return $plain ? $this->basicBlocks : $this->blocks;
+	}
+
+	/**
+	 * Write the support files to the package root.
+	 *
+	 * @param  \Illuminate\Workbench\Package  $package
+	 * @param  string  $directory
+	 * @param  bool    $plain
+	 * @return void
+	 */
+	public function writeSupportFiles(Package $package, $directory, $plain)
+	{
+		foreach (array('PhpUnit', 'Travis', 'Composer', 'Ignore') as $file)
+		{
+			$this->{"write{$file}File"}($package, $directory, $plain);
+		}
+	}
+
+	/**
+	 * Write the PHPUnit stub file.
+	 *
+	 * @param  \Illuminate\Workbench\Package  $package
+	 * @param  string  $directory
+	 * @return void
+	 */
+	protected function writePhpUnitFile(Package $package, $directory)
+	{
+		$stub = __DIR__.'/stubs/phpunit.xml';
+
+		$this->files->copy($stub, $directory.'/phpunit.xml');
+	}
+
+	/**
+	 * Write the Travis stub file.
+	 *
+	 * @param  \Illuminate\Workbench\Package  $package
+	 * @param  string  $directory
+	 * @return void
+	 */
+	protected function writeTravisFile(Package $package, $directory)
+	{
+		$stub = __DIR__.'/stubs/.travis.yml';
+
+		$this->files->copy($stub, $directory.'/.travis.yml');
+	}
+
+	/**
+	 * Write the Composer.json stub file.
+	 *
+	 * @param  \Illuminate\Workbench\Package  $package
+	 * @param  string  $directory
+	 * @param  bool    $plain
+	 * @return void
+	 */
+	protected function writeComposerFile(Package $package, $directory, $plain)
+	{
+		$stub = $this->getComposerStub($plain);
+
+		$stub = $this->formatPackageStub($package, $stub);
+
+		$this->files->put($directory.'/composer.json', $stub);
+	}
+
+	/**
+	 * Get the Composer.json stub file contents.
+	 *
+	 * @param  bool  $plain
+	 * @return string
+	 */
+	protected function getComposerStub($plain)
+	{
+		if ($plain) return $this->files->get(__DIR__.'/stubs/plain.composer.json');
+
+		return $this->files->get(__DIR__.'/stubs/composer.json');
+	}
+
+	/**
+	 * Write the stub .gitignore file for the package.
+	 *
+	 * @param  \Illuminate\Workbench\Package  $package
+	 * @param  string  $directory
+	 * @param  bool    $plain
+	 * @return void
+	 */
+	public function writeIgnoreFile(Package $package, $directory, $plain)
+	{
+		$this->files->copy(__DIR__.'/stubs/gitignore.txt', $directory.'/.gitignore');
+	}
+
+	/**
+	 * Create the support directories for a package.
+	 *
+	 * @param  \Illuminate\Workbench\Package  $package
+	 * @param  string  $directory
+	 * @return void
+	 */
+	public function writeSupportDirectories(Package $package, $directory)
+	{
+		foreach (array('config', 'controllers', 'lang', 'migrations', 'views') as $support)
+		{
+			$this->writeSupportDirectory($package, $support, $directory);
+		}
+	}
+
+	/**
+	 * Write a specific support directory for the package.
+	 *
+	 * @param  \Illuminate\Workbench\Package  $package
+	 * @param  string  $support
+	 * @param  string  $directory
+	 * @return void
+	 */
+	protected function writeSupportDirectory(Package $package, $support, $directory)
+	{
+		// Once we create the source directory, we will write an empty file to the
+		// directory so that it will be kept in source control allowing the dev
+		// to go ahead and push these components to GitHub right on creation.
+		$path = $directory.'/src/'.$support;
+
+		$this->files->makeDirectory($path, 0777, true);
+
+		$this->files->put($path.'/.gitkeep', '');
+	}
+
+	/**
+	 * Create the public directory for the package.
+	 *
+	 * @param  \Illuminate\Workbench\Package  $package
+	 * @param  string  $directory
+	 * @param  bool    $plain
+	 * @return void
+	 */
+	public function writePublicDirectory(Package $package, $directory, $plain)
+	{
+		if ($plain) return;
+
+		$this->files->makeDirectory($directory.'/public');
+
+		$this->files->put($directory.'/public/.gitkeep', '');
+	}
+
+	/**
+	 * Create the test directory for the package.
+	 *
+	 * @param  \Illuminate\Workbench\Package  $package
+	 * @param  string  $directory
+	 * @return void
+	 */
+	public function writeTestDirectory(Package $package, $directory)
+	{
+		$this->files->makeDirectory($directory.'/tests');
+
+		$this->files->put($directory.'/tests/.gitkeep', '');
+	}
+
+	/**
+	 * Write the stub ServiceProvider for the package.
+	 *
+	 * @param  \Illuminate\Workbench\Package  $package
+	 * @param  string  $directory
+	 * @param  bool    $plain
+	 * @return void
+	 */
+	public function writeServiceProvider(Package $package, $directory, $plain)
+	{
+		// Once we have the service provider stub, we will need to format it and make
+		// the necessary replacements to the class, namespaces, etc. Then we'll be
+		// able to write it out into the package's workbench directory for them.
+		$stub = $this->getProviderStub($package, $plain);
+
+		$this->writeProviderStub($package, $directory, $stub);
+	}
+
+	/**
+	 * Write the service provider stub for the package.
+	 *
+	 * @param  \Illuminate\Workbench\Package  $package
+	 * @param  string  $directory
+	 * @param  string  $stub
+	 * @return void
+	 */
+	protected function writeProviderStub(Package $package, $directory, $stub)
+	{
+		$path = $this->createClassDirectory($package, $directory);
+
+		// The primary source directory where the package's classes will live may not
+		// exist yet, so we will need to create it before we write these providers
+		// out to that location. We'll go ahead and create now here before then.
+		$file = $path.'/'.$package->name.'ServiceProvider.php';
+
+		$this->files->put($file, $stub);
+	}
+
+	/**
+	 * Get the stub for a ServiceProvider.
+	 *
+	 * @param  \Illuminate\Workbench\Package  $package
+	 * @param  bool  $plain
+	 * @return string
+	 */
+	protected function getProviderStub(Package $package, $plain)
+	{
+		return $this->formatPackageStub($package, $this->getProviderFile($plain));
+	}
+
+	/**
+	 * Load the raw service provider file.
+	 *
+	 * @param  bool  $plain
+	 * @return string
+	 */
+	protected function getProviderFile($plain)
+	{
+		if ($plain)
+		{
+			return $this->files->get(__DIR__.'/stubs/plain.provider.stub');
+		}
+
+		return $this->files->get(__DIR__.'/stubs/provider.stub');
+	}
+
+	/**
+	 * Create the main source directory for the package.
+	 *
+	 * @param  \Illuminate\Workbench\Package  $package
+	 * @param  string  $directory
+	 * @return string
+	 */
+	protected function createClassDirectory(Package $package, $directory)
+	{
+		$path = $directory.'/src/'.$package->vendor.'/'.$package->name;
+
+		if ( ! $this->files->isDirectory($path))
+		{
+			$this->files->makeDirectory($path, 0777, true);
+		}
+
+		return $path;
+	}
+
+	/**
+	 * Format a generic package stub file.
+	 *
+	 * @param  \Illuminate\Workbench\Package  $package
+	 * @param  string  $stub
+	 * @return string
+	 */
+	protected function formatPackageStub(Package $package, $stub)
+	{
+		foreach (get_object_vars($package) as $key => $value)
+		{
+			$stub = str_replace('{{'.snake_case($key).'}}', $value, $stub);
+		}
+
+		return $stub;
+	}
+
+	/**
+	 * Create a workbench directory for the package.
+	 *
+	 * @param  \Illuminate\Workbench\Package  $package
+	 * @param  string  $path
+	 * @return string
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	protected function createDirectory(Package $package, $path)
+	{
+		$fullPath = $path.'/'.$package->getFullName();
+
+		// If the directory doesn't exist, we will go ahead and create the package
+		// directory in the workbench location. We will use this entire package
+		// name when creating the directory to avoid any potential conflicts.
+		if ( ! $this->files->isDirectory($fullPath))
+		{
+			$this->files->makeDirectory($fullPath, 0777, true);
+
+			return $fullPath;
+		}
+
+		throw new \InvalidArgumentException("Package exists.");
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Workbench/Starter.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Workbench/Starter.php b/vendor/laravel/framework/src/Illuminate/Workbench/Starter.php
new file mode 100755
index 0000000..b90c368
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Workbench/Starter.php
@@ -0,0 +1,33 @@
+<?php namespace Illuminate\Workbench;
+
+use Symfony\Component\Finder\Finder;
+use Illuminate\Filesystem\Filesystem;
+
+class Starter {
+
+	/**
+	 * Load the workbench vendor auto-load files.
+	 *
+	 * @param  string  $path
+	 * @param  \Symfony\Component\Finder\Finder  $finder
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @return void
+	 */
+	public static function start($path, Finder $finder = null, Filesystem $files = null)
+	{
+		$finder = $finder ?: new Finder;
+
+		// We will use the finder to locate all "autoload.php" files in the workbench
+		// directory, then we will include them each so that they are able to load
+		// the appropriate classes and file used by the given workbench package.
+		$files = $files ?: new Filesystem;
+
+		$autoloads = $finder->in($path)->files()->name('autoload.php')->depth('<= 3')->followLinks();
+
+		foreach ($autoloads as $file)
+		{
+			$files->requireOnce($file->getRealPath());
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Workbench/WorkbenchServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Workbench/WorkbenchServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Workbench/WorkbenchServiceProvider.php
new file mode 100755
index 0000000..f0b0d36
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Workbench/WorkbenchServiceProvider.php
@@ -0,0 +1,45 @@
+<?php namespace Illuminate\Workbench;
+
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Workbench\Console\WorkbenchMakeCommand;
+
+class WorkbenchServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = false;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('package.creator', function($app)
+		{
+			return new PackageCreator($app['files']);
+		});
+
+		$this->app->bindShared('command.workbench', function($app)
+		{
+			return new WorkbenchMakeCommand($app['package.creator']);
+		});
+
+		$this->commands('command.workbench');
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('package.creator', 'command.workbench');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Workbench/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Workbench/composer.json b/vendor/laravel/framework/src/Illuminate/Workbench/composer.json
new file mode 100755
index 0000000..7e3abdb
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Workbench/composer.json
@@ -0,0 +1,31 @@
+{
+    "name": "illuminate/workbench",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/filesystem": "4.2.*",
+        "illuminate/support": "4.2.*",
+        "symfony/finder": "2.5.*"
+    },
+    "require-dev": {
+        "illuminate/console": "4.2.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Workbench": ""
+        }
+    },
+    "target-dir": "Illuminate/Workbench",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Workbench/stubs/.travis.yml
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Workbench/stubs/.travis.yml b/vendor/laravel/framework/src/Illuminate/Workbench/stubs/.travis.yml
new file mode 100755
index 0000000..f60bbe0
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Workbench/stubs/.travis.yml
@@ -0,0 +1,13 @@
+language: php
+
+php:
+  - 5.4
+  - 5.5
+  - 5.6
+  - hhvm
+
+before_script:
+  - travis_retry composer self-update
+  - travis_retry composer install --prefer-source --no-interaction --dev
+
+script: phpunit

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Workbench/stubs/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Workbench/stubs/composer.json b/vendor/laravel/framework/src/Illuminate/Workbench/stubs/composer.json
new file mode 100755
index 0000000..5133cd8
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Workbench/stubs/composer.json
@@ -0,0 +1,23 @@
+{
+    "name": "{{lower_vendor}}/{{lower_name}}",
+    "description": "",
+    "authors": [
+        {
+            "name": "{{author}}",
+            "email": "{{email}}"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/support": "4.2.*"
+    },
+    "autoload": {
+        "classmap": [
+            "src/migrations"
+        ],
+        "psr-0": {
+            "{{vendor}}\\{{name}}\\": "src/"
+        }
+    },
+    "minimum-stability": "stable"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Workbench/stubs/gitignore.txt
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Workbench/stubs/gitignore.txt b/vendor/laravel/framework/src/Illuminate/Workbench/stubs/gitignore.txt
new file mode 100755
index 0000000..5826402
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Workbench/stubs/gitignore.txt
@@ -0,0 +1,4 @@
+/vendor
+composer.phar
+composer.lock
+.DS_Store

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Workbench/stubs/phpunit.xml
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Workbench/stubs/phpunit.xml b/vendor/laravel/framework/src/Illuminate/Workbench/stubs/phpunit.xml
new file mode 100755
index 0000000..3347b75
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Workbench/stubs/phpunit.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit backupGlobals="false"
+         backupStaticAttributes="false"
+         bootstrap="vendor/autoload.php"
+         colors="true"
+         convertErrorsToExceptions="true"
+         convertNoticesToExceptions="true"
+         convertWarningsToExceptions="true"
+         processIsolation="false"
+         stopOnFailure="false"
+         syntaxCheck="false"
+>
+    <testsuites>
+        <testsuite name="Package Test Suite">
+            <directory suffix=".php">./tests/</directory>
+        </testsuite>
+    </testsuites>
+</phpunit>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Workbench/stubs/plain.composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Workbench/stubs/plain.composer.json b/vendor/laravel/framework/src/Illuminate/Workbench/stubs/plain.composer.json
new file mode 100755
index 0000000..a2cd6bb
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Workbench/stubs/plain.composer.json
@@ -0,0 +1,20 @@
+{
+    "name": "{{lower_vendor}}/{{lower_name}}",
+    "description": "",
+    "authors": [
+        {
+            "name": "{{author}}",
+            "email": "{{email}}"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/support": "4.2.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "{{vendor}}\\{{name}}": "src/"
+        }
+    },
+    "minimum-stability": "stable"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Workbench/stubs/plain.provider.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Workbench/stubs/plain.provider.stub b/vendor/laravel/framework/src/Illuminate/Workbench/stubs/plain.provider.stub
new file mode 100755
index 0000000..68f4abc
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Workbench/stubs/plain.provider.stub
@@ -0,0 +1,34 @@
+<?php namespace {{vendor}}\{{name}};
+
+use Illuminate\Support\ServiceProvider;
+
+class {{name}}ServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = false;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		//
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array();
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Workbench/stubs/provider.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Workbench/stubs/provider.stub b/vendor/laravel/framework/src/Illuminate/Workbench/stubs/provider.stub
new file mode 100755
index 0000000..a39ecaf
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Workbench/stubs/provider.stub
@@ -0,0 +1,44 @@
+<?php namespace {{vendor}}\{{name}};
+
+use Illuminate\Support\ServiceProvider;
+
+class {{name}}ServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = false;
+
+	/**
+	 * Bootstrap the application events.
+	 *
+	 * @return void
+	 */
+	public function boot()
+	{
+		$this->package('{{lower_vendor}}/{{lower_name}}');
+	}
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		//
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array();
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/monolog/monolog/.php_cs
----------------------------------------------------------------------
diff --git a/vendor/monolog/monolog/.php_cs b/vendor/monolog/monolog/.php_cs
new file mode 100644
index 0000000..8c11b23
--- /dev/null
+++ b/vendor/monolog/monolog/.php_cs
@@ -0,0 +1,15 @@
+<?php
+
+$finder = Symfony\CS\Finder\DefaultFinder::create()
+    ->files()
+    ->name('*.php')
+    ->in(__DIR__.'/src')
+    ->in(__DIR__.'/tests')
+;
+
+return Symfony\CS\Config\Config::create()
+    ->fixers(array(
+        'psr0', 'encoding', 'short_tag', 'braces', 'elseif', 'eof_ending', 'function_declaration', 'indentation', 'line_after_namespace', 'linefeed', 'lowercase_constants', 'lowercase_keywords', 'multiple_use', 'php_closing_tag', 'trailing_spaces', 'visibility', 'duplicate_semicolon', 'extra_empty_lines', 'include', 'namespace_no_leading_whitespace', 'object_operator', 'operators_spaces', 'phpdoc_params', 'return', 'single_array_no_trailing_comma', 'spaces_cast', 'standardize_not_equal', 'ternary_spaces', 'unused_use', 'whitespacy_lines',
+    ))
+    ->finder($finder)
+;


[24/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/ircmaxell/password-compat/composer.json
----------------------------------------------------------------------
diff --git a/vendor/ircmaxell/password-compat/composer.json b/vendor/ircmaxell/password-compat/composer.json
new file mode 100644
index 0000000..822fd1f
--- /dev/null
+++ b/vendor/ircmaxell/password-compat/composer.json
@@ -0,0 +1,20 @@
+{
+    "name": "ircmaxell/password-compat",
+    "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash",
+    "keywords": ["password", "hashing"],
+    "homepage": "https://github.com/ircmaxell/password_compat",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Anthony Ferrara",
+            "email": "ircmaxell@php.net",
+            "homepage": "http://blog.ircmaxell.com"
+        }
+    ],
+    "require-dev": {
+        "phpunit/phpunit": "4.*"
+    },
+    "autoload": {
+        "files": ["lib/password.php"]
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/ircmaxell/password-compat/lib/password.php
----------------------------------------------------------------------
diff --git a/vendor/ircmaxell/password-compat/lib/password.php b/vendor/ircmaxell/password-compat/lib/password.php
new file mode 100644
index 0000000..cc6896c
--- /dev/null
+++ b/vendor/ircmaxell/password-compat/lib/password.php
@@ -0,0 +1,314 @@
+<?php
+/**
+ * A Compatibility library with PHP 5.5's simplified password hashing API.
+ *
+ * @author Anthony Ferrara <ir...@php.net>
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ * @copyright 2012 The Authors
+ */
+
+namespace {
+
+    if (!defined('PASSWORD_BCRYPT')) {
+        /**
+         * PHPUnit Process isolation caches constants, but not function declarations.
+         * So we need to check if the constants are defined separately from 
+         * the functions to enable supporting process isolation in userland
+         * code.
+         */
+        define('PASSWORD_BCRYPT', 1);
+        define('PASSWORD_DEFAULT', PASSWORD_BCRYPT);
+        define('PASSWORD_BCRYPT_DEFAULT_COST', 10);
+    }
+
+    if (!function_exists('password_hash')) {
+
+        /**
+         * Hash the password using the specified algorithm
+         *
+         * @param string $password The password to hash
+         * @param int    $algo     The algorithm to use (Defined by PASSWORD_* constants)
+         * @param array  $options  The options for the algorithm to use
+         *
+         * @return string|false The hashed password, or false on error.
+         */
+        function password_hash($password, $algo, array $options = array()) {
+            if (!function_exists('crypt')) {
+                trigger_error("Crypt must be loaded for password_hash to function", E_USER_WARNING);
+                return null;
+            }
+            if (is_null($password) || is_int($password)) {
+                $password = (string) $password;
+            }
+            if (!is_string($password)) {
+                trigger_error("password_hash(): Password must be a string", E_USER_WARNING);
+                return null;
+            }
+            if (!is_int($algo)) {
+                trigger_error("password_hash() expects parameter 2 to be long, " . gettype($algo) . " given", E_USER_WARNING);
+                return null;
+            }
+            $resultLength = 0;
+            switch ($algo) {
+                case PASSWORD_BCRYPT:
+                    $cost = PASSWORD_BCRYPT_DEFAULT_COST;
+                    if (isset($options['cost'])) {
+                        $cost = $options['cost'];
+                        if ($cost < 4 || $cost > 31) {
+                            trigger_error(sprintf("password_hash(): Invalid bcrypt cost parameter specified: %d", $cost), E_USER_WARNING);
+                            return null;
+                        }
+                    }
+                    // The length of salt to generate
+                    $raw_salt_len = 16;
+                    // The length required in the final serialization
+                    $required_salt_len = 22;
+                    $hash_format = sprintf("$2y$%02d$", $cost);
+                    // The expected length of the final crypt() output
+                    $resultLength = 60;
+                    break;
+                default:
+                    trigger_error(sprintf("password_hash(): Unknown password hashing algorithm: %s", $algo), E_USER_WARNING);
+                    return null;
+            }
+            $salt_requires_encoding = false;
+            if (isset($options['salt'])) {
+                switch (gettype($options['salt'])) {
+                    case 'NULL':
+                    case 'boolean':
+                    case 'integer':
+                    case 'double':
+                    case 'string':
+                        $salt = (string) $options['salt'];
+                        break;
+                    case 'object':
+                        if (method_exists($options['salt'], '__tostring')) {
+                            $salt = (string) $options['salt'];
+                            break;
+                        }
+                    case 'array':
+                    case 'resource':
+                    default:
+                        trigger_error('password_hash(): Non-string salt parameter supplied', E_USER_WARNING);
+                        return null;
+                }
+                if (PasswordCompat\binary\_strlen($salt) < $required_salt_len) {
+                    trigger_error(sprintf("password_hash(): Provided salt is too short: %d expecting %d", PasswordCompat\binary\_strlen($salt), $required_salt_len), E_USER_WARNING);
+                    return null;
+                } elseif (0 == preg_match('#^[a-zA-Z0-9./]+$#D', $salt)) {
+                    $salt_requires_encoding = true;
+                }
+            } else {
+                $buffer = '';
+                $buffer_valid = false;
+                if (function_exists('mcrypt_create_iv') && !defined('PHALANGER')) {
+                    $buffer = mcrypt_create_iv($raw_salt_len, MCRYPT_DEV_URANDOM);
+                    if ($buffer) {
+                        $buffer_valid = true;
+                    }
+                }
+                if (!$buffer_valid && function_exists('openssl_random_pseudo_bytes')) {
+                    $buffer = openssl_random_pseudo_bytes($raw_salt_len);
+                    if ($buffer) {
+                        $buffer_valid = true;
+                    }
+                }
+                if (!$buffer_valid && @is_readable('/dev/urandom')) {
+                    $f = fopen('/dev/urandom', 'r');
+                    $read = PasswordCompat\binary\_strlen($buffer);
+                    while ($read < $raw_salt_len) {
+                        $buffer .= fread($f, $raw_salt_len - $read);
+                        $read = PasswordCompat\binary\_strlen($buffer);
+                    }
+                    fclose($f);
+                    if ($read >= $raw_salt_len) {
+                        $buffer_valid = true;
+                    }
+                }
+                if (!$buffer_valid || PasswordCompat\binary\_strlen($buffer) < $raw_salt_len) {
+                    $bl = PasswordCompat\binary\_strlen($buffer);
+                    for ($i = 0; $i < $raw_salt_len; $i++) {
+                        if ($i < $bl) {
+                            $buffer[$i] = $buffer[$i] ^ chr(mt_rand(0, 255));
+                        } else {
+                            $buffer .= chr(mt_rand(0, 255));
+                        }
+                    }
+                }
+                $salt = $buffer;
+                $salt_requires_encoding = true;
+            }
+            if ($salt_requires_encoding) {
+                // encode string with the Base64 variant used by crypt
+                $base64_digits =
+                    'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+                $bcrypt64_digits =
+                    './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
+
+                $base64_string = base64_encode($salt);
+                $salt = strtr(rtrim($base64_string, '='), $base64_digits, $bcrypt64_digits);
+            }
+            $salt = PasswordCompat\binary\_substr($salt, 0, $required_salt_len);
+
+            $hash = $hash_format . $salt;
+
+            $ret = crypt($password, $hash);
+
+            if (!is_string($ret) || PasswordCompat\binary\_strlen($ret) != $resultLength) {
+                return false;
+            }
+
+            return $ret;
+        }
+
+        /**
+         * Get information about the password hash. Returns an array of the information
+         * that was used to generate the password hash.
+         *
+         * array(
+         *    'algo' => 1,
+         *    'algoName' => 'bcrypt',
+         *    'options' => array(
+         *        'cost' => PASSWORD_BCRYPT_DEFAULT_COST,
+         *    ),
+         * )
+         *
+         * @param string $hash The password hash to extract info from
+         *
+         * @return array The array of information about the hash.
+         */
+        function password_get_info($hash) {
+            $return = array(
+                'algo' => 0,
+                'algoName' => 'unknown',
+                'options' => array(),
+            );
+            if (PasswordCompat\binary\_substr($hash, 0, 4) == '$2y$' && PasswordCompat\binary\_strlen($hash) == 60) {
+                $return['algo'] = PASSWORD_BCRYPT;
+                $return['algoName'] = 'bcrypt';
+                list($cost) = sscanf($hash, "$2y$%d$");
+                $return['options']['cost'] = $cost;
+            }
+            return $return;
+        }
+
+        /**
+         * Determine if the password hash needs to be rehashed according to the options provided
+         *
+         * If the answer is true, after validating the password using password_verify, rehash it.
+         *
+         * @param string $hash    The hash to test
+         * @param int    $algo    The algorithm used for new password hashes
+         * @param array  $options The options array passed to password_hash
+         *
+         * @return boolean True if the password needs to be rehashed.
+         */
+        function password_needs_rehash($hash, $algo, array $options = array()) {
+            $info = password_get_info($hash);
+            if ($info['algo'] != $algo) {
+                return true;
+            }
+            switch ($algo) {
+                case PASSWORD_BCRYPT:
+                    $cost = isset($options['cost']) ? $options['cost'] : PASSWORD_BCRYPT_DEFAULT_COST;
+                    if ($cost != $info['options']['cost']) {
+                        return true;
+                    }
+                    break;
+            }
+            return false;
+        }
+
+        /**
+         * Verify a password against a hash using a timing attack resistant approach
+         *
+         * @param string $password The password to verify
+         * @param string $hash     The hash to verify against
+         *
+         * @return boolean If the password matches the hash
+         */
+        function password_verify($password, $hash) {
+            if (!function_exists('crypt')) {
+                trigger_error("Crypt must be loaded for password_verify to function", E_USER_WARNING);
+                return false;
+            }
+            $ret = crypt($password, $hash);
+            if (!is_string($ret) || PasswordCompat\binary\_strlen($ret) != PasswordCompat\binary\_strlen($hash) || PasswordCompat\binary\_strlen($ret) <= 13) {
+                return false;
+            }
+
+            $status = 0;
+            for ($i = 0; $i < PasswordCompat\binary\_strlen($ret); $i++) {
+                $status |= (ord($ret[$i]) ^ ord($hash[$i]));
+            }
+
+            return $status === 0;
+        }
+    }
+
+}
+
+namespace PasswordCompat\binary {
+
+    if (!function_exists('PasswordCompat\\binary\\_strlen')) {
+
+        /**
+         * Count the number of bytes in a string
+         *
+         * We cannot simply use strlen() for this, because it might be overwritten by the mbstring extension.
+         * In this case, strlen() will count the number of *characters* based on the internal encoding. A
+         * sequence of bytes might be regarded as a single multibyte character.
+         *
+         * @param string $binary_string The input string
+         *
+         * @internal
+         * @return int The number of bytes
+         */
+        function _strlen($binary_string) {
+            if (function_exists('mb_strlen')) {
+                return mb_strlen($binary_string, '8bit');
+            }
+            return strlen($binary_string);
+        }
+
+        /**
+         * Get a substring based on byte limits
+         *
+         * @see _strlen()
+         *
+         * @param string $binary_string The input string
+         * @param int    $start
+         * @param int    $length
+         *
+         * @internal
+         * @return string The substring
+         */
+        function _substr($binary_string, $start, $length) {
+            if (function_exists('mb_substr')) {
+                return mb_substr($binary_string, $start, $length, '8bit');
+            }
+            return substr($binary_string, $start, $length);
+        }
+
+        /**
+         * Check if current PHP version is compatible with the library
+         *
+         * @return boolean the check result
+         */
+        function check() {
+            static $pass = NULL;
+
+            if (is_null($pass)) {
+                if (function_exists('crypt')) {
+                    $hash = '$2y$04$usesomesillystringfore7hnbRJHxXVLeakoG8K30oukPsA.ztMG';
+                    $test = crypt("password", $hash);
+                    $pass = $test == $hash;
+                } else {
+                    $pass = false;
+                }
+            }
+            return $pass;
+        }
+
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/ircmaxell/password-compat/version-test.php
----------------------------------------------------------------------
diff --git a/vendor/ircmaxell/password-compat/version-test.php b/vendor/ircmaxell/password-compat/version-test.php
new file mode 100644
index 0000000..96f60ca
--- /dev/null
+++ b/vendor/ircmaxell/password-compat/version-test.php
@@ -0,0 +1,6 @@
+<?php
+
+require "lib/password.php";
+
+echo "Test for functionality of compat library: " . (PasswordCompat\binary\check() ? "Pass" : "Fail");
+echo "\n";
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/.gitignore
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/.gitignore b/vendor/jeremeamia/SuperClosure/.gitignore
new file mode 100644
index 0000000..d378671
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/.gitignore
@@ -0,0 +1,8 @@
+.idea/*
+vendor/*
+build/*
+.DS_Store
+cache.properties
+phpunit.xml
+composer.phar
+composer.lock

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/.travis.yml
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/.travis.yml b/vendor/jeremeamia/SuperClosure/.travis.yml
new file mode 100644
index 0000000..77b95e0
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/.travis.yml
@@ -0,0 +1,20 @@
+language: php
+
+php:
+  - 5.3
+  - 5.4
+  - 5.5
+  - hhvm
+
+before_script:
+  - composer self-update
+  - composer install --no-interaction --prefer-source --dev
+  - cp phpunit.xml.dist phpunit.xml
+
+script:
+  - phpunit --coverage-text
+
+matrix:
+  allow_failures:
+    - php: hhvm
+  fast_finish: true

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/LICENSE.md
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/LICENSE.md b/vendor/jeremeamia/SuperClosure/LICENSE.md
new file mode 100644
index 0000000..51411b8
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/LICENSE.md
@@ -0,0 +1,18 @@
+# MIT License
+
+Copyright (c) 2010-2013 Jeremy Lindblom
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute,
+sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial
+portions of the Software.
+
+**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
+NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.**

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/README.md
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/README.md b/vendor/jeremeamia/SuperClosure/README.md
new file mode 100644
index 0000000..4d2fe44
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/README.md
@@ -0,0 +1,124 @@
+# PHP Super Closure
+
+[![Latest Stable Version](https://poser.pugx.org/jeremeamia/superclosure/v/stable.png)](https://packagist.org/packages/jeremeamia/superclosure)
+[![Total Downloads](https://poser.pugx.org/jeremeamia/superclosure/downloads.png)](https://packagist.org/packages/jeremeamia/superclosure)
+[![Build Status](https://travis-ci.org/jeremeamia/super_closure.svg?branch=multiple-parsers)][2]
+[![GitTip](http://img.shields.io/gittip/jeremeamia.svg)](https://www.gittip.com/jeremeamia)
+
+Have you ever seen this?
+
+> Uncaught exception 'Exception' with message 'Serialization of 'Closure' is not allowed'
+
+It's true! If you try to serialize a `Closure`, PHP will throw an exception and tell you that it is not allowed. But
+even though it is not "allowed" by PHP, the Super Closure library ([jeremeamia/superclosure][3] on Packagist) makes it
+**possible**.
+
+I'm not joking, *you really can serialize a PHP closure*!
+
+```php
+require 'vendor/autoload.php';
+
+use Jeremeamia\SuperClosure\SerializableClosure;
+
+$greeting = 'Hello';
+$helloWorld = new SerializableClosure(function ($name = 'World') use ($greeting) {
+    echo "{$greeting}, {$name}!\n";
+});
+
+$helloWorld();
+//> Hello, World!
+$helloWorld('Jeremy');
+//> Hello, Jeremy!
+
+$serialized = serialize($helloWorld);
+$unserialized = unserialize($serialized);
+
+$unserialized();
+//> Hello, World!
+$unserialized('Jeremy');
+//> Hello, Jeremy!
+```
+Yep, pretty cool huh?
+
+## Tell Me More!
+
+It all started way back in the beginning of 2010 when PHP 5.3 was starting to gain traction. I wrote a blog post called
+[Extending PHP 5.3 Closures with Serialization and Reflection][4] on my former employers' blog, [HTMList][5], showing
+how it can be done. Since then I've made a few iterations on the code, and this most recent iteration brings with it a
+generally more robust solution that takes advantage of the fabulous [nikic/php-parser][6] library.
+
+### Features
+
+* Grants the ability to serialize closures
+* Handles closures with used/inherited/imported variables
+* Handles closures that use other closures
+* Handles closures that reference class names in the parameters or body
+* Handles recursive closures (PHP 5.4+ only)
+* Allows you to get the code of a closure
+* Allows you to get the names and values of variables used by a closure
+* Allows you to get an Abstract Syntax Tree (AST) representing the code of a closure
+* Replaces magic constants with their expected values so that the closure behaves as expected after unserialization
+* Uses an accurate parsing method of a context-free grammar via the [nikic/php-parser][6] library
+* PSR-0 compliant and installable via Composer
+
+### Caveats
+
+1. For any variables used by reference (e.g., `function () use (&$vars, &$like, &$these) {…}`), the references are not
+   maintained after serialization/unserialization. The only exception is when (in PHP 5.4+ only) the used variable is a
+   reference to the `SerializableClosure` object being serialized, which is the case with a recursive function. For some
+   reason — *that I actually don't quite understand* — this works.
+2. If you have two closures defined on a single line (you shouldn't do this anyway), you will not be able to serialize
+   either one since it is ambiguous which closure's code should be parsed.
+3. Because the technique to acquire the code and context of the closure requires reflection and full AST-style parsing,
+   the performance of serializing a closure is likely not good.
+4. **Warning**: Both `eval()` and `extract()` are required to unserialize the closure. These functions are considered
+   dangerous by many, so you will have to evaluate whether or not you actual want to be using this library if these
+   functions concern you. These functions *must* be used to make this technique work.
+
+## Installation
+
+To install the Super Closure library in your project using Composer, first add the following to your `composer.json`
+config file.
+```javascript
+{
+    "require": {
+        "jeremeamia/superclosure": "~1.0"
+    }
+}
+```
+Then run Composer's install or update commands to complete installation. Please visit the [Composer homepage][7] for
+more information about how to use Composer.
+
+## Why Would I Need To Serialize Closures?
+
+Well, since you are here looking at this README, you may already have a use case in mind. Even though this concept began
+as an experiment, there have been some use cases that have come up in the wild.
+
+For example, in a [video about Laravel 4 and IronMQ][8] by [UserScape][9], at about the 7:50 mark they show how you can
+push a closure onto a queue as a job so that it can be executed by a worker. This is nice because you do not have to
+create a whole class for a job that might be really simple. The closure serialization is done by a [class in the Laravel
+4 framework][10] that is based on one of my older versions of SuperClosure.
+
+Essentially this library let's you create closures in one process and use them in another. It would even be possible to
+provide closures (or algorithms) as a service through an API.
+
+## Who Is Using Super Closure?
+
+- [Laravel 4](https://github.com/laravel/framework) - Serializes a closure to potentially push onto a job queue.
+- [HTTP Mock for PHP](https://github.com/InterNations/http-mock) - Serialize a closure to send to remote server within
+  a test workflow.
+- [Jumper](https://github.com/kakawait/Jumper) - Serialize a closure to run on remote host via SSH.
+- [nicmart/Benchmark](https://github.com/nicmart/Benchmark) - Uses the `ClosureParser` to display a benchmarked
+  Closure's code.
+- Please let me know if and how your project uses Super Closure.
+
+[1]:  https://secure.travis-ci.org/jeremeamia/super_closure.png?branch=master
+[2]:  http://travis-ci.org/#!/jeremeamia/super_closure
+[3]:  http://packagist.org/packages/jeremeamia/SuperClosure
+[4]:  http://www.htmlist.com/development/extending-php-5-3-closures-with-serialization-and-reflection/
+[5]:  http://www.htmlist.com
+[6]:  https://github.com/nikic/PHP-Parser
+[7]:  http://getcomposer.org
+[8]:  http://vimeo.com/64703617
+[9]:  http://www.userscape.com
+[10]: https://github.com/illuminate/support/blob/master/SerializableClosure.php

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/composer.json
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/composer.json b/vendor/jeremeamia/SuperClosure/composer.json
new file mode 100644
index 0000000..2477e38
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/composer.json
@@ -0,0 +1,23 @@
+{
+    "name": "jeremeamia/SuperClosure",
+    "type": "library",
+    "description": "Doing interesting things with closures like serialization.",
+    "keywords": ["closure", "serialize", "serializable", "function", "parser", "tokenizer"],
+    "homepage": "https://github.com/jeremeamia/super_closure",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Jeremy Lindblom"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.3",
+        "nikic/php-parser": "~0.9"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "~3.7"
+    },
+    "autoload": {
+        "psr-0": { "Jeremeamia\\SuperClosure": "src/" }
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/demo/factorial.php
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/demo/factorial.php b/vendor/jeremeamia/SuperClosure/demo/factorial.php
new file mode 100644
index 0000000..8dc8fbd
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/demo/factorial.php
@@ -0,0 +1,23 @@
+<?php
+
+if (version_compare(PHP_VERSION, '5.4', '<=')) {
+    throw new \RuntimeException('PHP 5.4+ is required for this example.');
+}
+
+require __DIR__ . '/../vendor/autoload.php';
+
+use Jeremeamia\SuperClosure\SerializableClosure;
+
+$factorial = new SerializableClosure(function ($n) use (&$factorial) {
+    return ($n <= 1) ? 1 : $n * $factorial($n - 1);
+});
+
+echo $factorial(5) . PHP_EOL;
+//> 120
+
+$serialized = serialize($factorial);
+$unserialized = unserialize($serialized);
+
+echo $unserialized(5) . PHP_EOL;
+//> 120
+

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/demo/hello-world.php
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/demo/hello-world.php b/vendor/jeremeamia/SuperClosure/demo/hello-world.php
new file mode 100644
index 0000000..ce54218
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/demo/hello-world.php
@@ -0,0 +1,23 @@
+<?php
+
+require __DIR__ . '/../vendor/autoload.php';
+
+use Jeremeamia\SuperClosure\SerializableClosure;
+
+$greeting = 'Hello';
+$helloWorld = new SerializableClosure(function ($name = 'World') use ($greeting) {
+    echo "{$greeting}, {$name}!\n";
+});
+
+$helloWorld();
+//> Hello, World!
+$helloWorld('Jeremy');
+//> Hello, Jeremy!
+
+$serialized = serialize($helloWorld);
+$unserialized = unserialize($serialized);
+
+$unserialized();
+//> Hello, World!
+$unserialized('Jeremy');
+//> Hello, Jeremy!

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/phpunit.xml.dist
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/phpunit.xml.dist b/vendor/jeremeamia/SuperClosure/phpunit.xml.dist
new file mode 100644
index 0000000..299507c
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/phpunit.xml.dist
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit
+  bootstrap="./tests/bootstrap.php"
+  processIsolation="false"
+  stopOnFailure="false"
+  syntaxCheck="false"
+  convertErrorsToExceptions="true"
+  convertNoticesToExceptions="true"
+  convertWarningsToExceptions="true"
+  testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"
+>
+
+  <testsuites>
+    <testsuite name="SuperClosure">
+      <directory>./tests/Jeremeamia/SuperClosure/Test</directory>
+    </testsuite>
+  </testsuites>
+
+  <filter>
+    <whitelist>
+      <directory suffix=".php">./src/Jeremeamia/SuperClosure</directory>
+    </whitelist>
+  </filter>
+
+  <logging>
+    <log type="coverage-html" target="./build/artifacts/coverage"
+         yui="true" highlight="false" charset="UTF-8"
+         lowUpperBound="35" highLowerBound="70"/>
+    <log type="coverage-clover" target="./build/artifacts/coverage.xml"/>
+    <log type="junit" target="./build/artifacts/log.xml" logIncompleteSkipped="false"/>
+    <log type="testdox-html" target="./build/artifacts/testdox.html"/>
+  </logging>
+
+</phpunit>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/ClosureLocation.php
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/ClosureLocation.php b/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/ClosureLocation.php
new file mode 100644
index 0000000..cbdbe0b
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/ClosureLocation.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace Jeremeamia\SuperClosure;
+
+/**
+ * Simple object for storing the location information of a closure (e.g., file, class, etc.)
+ *
+ * @copyright Jeremy Lindblom 2010-2013
+ */
+class ClosureLocation
+{
+    /** @var string */
+    protected $closureScopeClass;
+
+    /** @var string */
+    public $class;
+
+    /** @var string */
+    public $directory;
+
+    /** @var string */
+    public $file;
+
+    /** @var string */
+    public $function;
+
+    /** @var string */
+    public $line;
+
+    /** @var string */
+    public $method;
+
+    /** @var string */
+    public $namespace;
+
+    /** @var string */
+    public $trait;
+
+    /**
+     * Creates a ClosureLocation and seeds it with all the data that can be gleaned from the closure's reflection
+     *
+     * @param \ReflectionFunction $reflection The reflection of the closure that this ClosureLocation should represent
+     *
+     * @return ClosureLocation
+     */
+    public static function fromReflection(\ReflectionFunction $reflection)
+    {
+        $location = new self;
+        $location->directory = dirname($reflection->getFileName());
+        $location->file = $reflection->getFileName();
+        $location->function = $reflection->getName();
+        $location->line = $reflection->getStartLine();
+
+        // @codeCoverageIgnoreStart
+        if (version_compare(PHP_VERSION, '5.4', '>=')) {
+            $closureScopeClass = $reflection->getClosureScopeClass();
+            $location->closureScopeClass = $closureScopeClass ? $closureScopeClass->getName() : null;
+        }
+        // @codeCoverageIgnoreEnd
+
+        return $location;
+    }
+
+    public function finalize()
+    {
+        if ($this->class || $this->trait) {
+            $class = $this->class ?: $this->trait;
+            $this->method = "{$class}::{$this->function}";
+        }
+
+        if (!$this->class && $this->trait) {
+            $this->class = $this->closureScopeClass;
+        }
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/ClosureParser.php
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/ClosureParser.php b/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/ClosureParser.php
new file mode 100644
index 0000000..12b2a83
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/ClosureParser.php
@@ -0,0 +1,195 @@
+<?php
+
+namespace Jeremeamia\SuperClosure;
+
+use Jeremeamia\SuperClosure\Visitor\ClosureFinderVisitor;
+use Jeremeamia\SuperClosure\Visitor\MagicConstantVisitor;
+
+/**
+ * Parses a closure from its reflection such that the code and used (closed upon) variables are accessible. The
+ * ClosureParser uses the fabulous nikic/php-parser library which creates abstract syntax trees (AST) of the code.
+ *
+ * @copyright Jeremy Lindblom 2010-2013
+ */
+class ClosureParser
+{
+    /**
+     * @var array
+     */
+    protected static $cache = array();
+
+    /**
+     * @var \ReflectionFunction The reflection of the closure being parsed
+     */
+    protected $reflection;
+
+    /**
+     * @var \PHPParser_Node An abstract syntax tree defining the code of the closure
+     */
+    protected $abstractSyntaxTree;
+
+    /**
+     * @var array The variables used (closed upon) by the closure and their values
+     */
+    protected $usedVariables;
+
+    /**
+     * @var  string The closure's code
+     */
+    protected $code;
+
+    /**
+     * Creates a ClosureParser for the provided closure
+     *
+     * @param \Closure $closure
+     *
+     * @return ClosureParser
+     */
+    public static function fromClosure(\Closure $closure)
+    {
+        return new self(new \ReflectionFunction($closure));
+    }
+
+    /**
+     * Clears the internal cache of file ASTs.
+     *
+     * ASTs are stored for any file that is parsed to speed up multiple
+     * parsings of the same file. If you are worried about the memory consumption of files the ClosureParser has already
+     * parsed, you can call this function to clear the cache. The cache is not persistent and stores ASTs from the
+     * current process
+     */
+    public static function clearCache()
+    {
+        self::$cache = array();
+    }
+
+    /**
+     * @param \ReflectionFunction $reflection
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function __construct(\ReflectionFunction $reflection)
+    {
+        if (!$reflection->isClosure()) {
+            throw new \InvalidArgumentException('You must provide the reflection of a closure.');
+        }
+
+        $this->reflection = $reflection;
+    }
+
+    /**
+     * Returns the reflection of the closure
+     *
+     * @return \ReflectionFunction
+     */
+    public function getReflection()
+    {
+        return $this->reflection;
+    }
+
+    /**
+     * Returns the abstract syntax tree (AST) of the closure's code. Class names are resolved to their fully-qualified
+     * class names (FQCN) and magic constants are resolved to their values as they would be in the context of the
+     * closure.
+     *
+     * @return \PHPParser_Node_Expr_Closure
+     * @throws \InvalidArgumentException
+     */
+    public function getClosureAbstractSyntaxTree()
+    {
+        if (!$this->abstractSyntaxTree) {
+            try {
+                // Parse the code from the file containing the closure and create an AST with FQCN resolved
+                $fileAst = $this->getFileAbstractSyntaxTree();
+                $closureFinder = new ClosureFinderVisitor($this->reflection);
+                $fileTraverser = new \PHPParser_NodeTraverser();
+                $fileTraverser->addVisitor(new \PHPParser_NodeVisitor_NameResolver);
+                $fileTraverser->addVisitor($closureFinder);
+                $fileTraverser->traverse($fileAst);
+            } catch (\PHPParser_Error $e) {
+                // @codeCoverageIgnoreStart
+                throw new \InvalidArgumentException('There was an error parsing the file containing the closure.');
+                // @codeCoverageIgnoreEnd
+            }
+
+            // Find the first closure defined in the AST that is on the line where the closure is located
+            $closureAst = $closureFinder->getClosureNode();
+            if (!$closureAst) {
+                // @codeCoverageIgnoreStart
+                throw new \InvalidArgumentException('The closure was not found within the abstract syntax tree.');
+                // @codeCoverageIgnoreEnd
+            }
+
+            // Resolve additional nodes by making a second pass through just the closure's nodes
+            $closureTraverser = new \PHPParser_NodeTraverser();
+            $closureTraverser->addVisitor(new MagicConstantVisitor($closureFinder->getLocation()));
+            $closureAst = $closureTraverser->traverse(array($closureAst));
+            $this->abstractSyntaxTree = $closureAst[0];
+        }
+
+        return $this->abstractSyntaxTree;
+    }
+
+    /**
+     * Returns the variables that in the "use" clause of the closure definition. These are referred to as the "used
+     * variables", "static variables", or "closed upon variables", "context" of the closure.
+     *
+     * @return array
+     */
+    public function getUsedVariables()
+    {
+        if (!$this->usedVariables) {
+            // Get the variable names defined in the AST
+            $usedVarNames = array_map(function ($usedVar) {
+                return $usedVar->var;
+            }, $this->getClosureAbstractSyntaxTree()->uses);
+
+            // Get the variable names and values using reflection
+            $usedVarValues = $this->reflection->getStaticVariables();
+
+            // Combine the two arrays to create a canonical hash of variable names and values
+            $this->usedVariables = array();
+            foreach ($usedVarNames as $name) {
+                if (array_key_exists($name, $usedVarValues)) {
+                    $this->usedVariables[$name] = $usedVarValues[$name];
+                }
+            }
+        }
+
+        return $this->usedVariables;
+    }
+
+    /**
+     * Returns the formatted code of the closure
+     *
+     * @return string
+     */
+    public function getCode()
+    {
+        if (!$this->code) {
+            // Use the pretty printer to print the closure code from the AST
+            $printer = new \PHPParser_PrettyPrinter_Default();
+            $this->code = $printer->prettyPrint(array($this->getClosureAbstractSyntaxTree()));
+        }
+
+        return $this->code;
+    }
+
+    /**
+     * Loads the PHP file and produces an abstract syntax tree (AST) of the code. This is stored in an internal cache by
+     * the filename for memoization within the same process
+     *
+     * @return array
+     */
+    protected function getFileAbstractSyntaxTree()
+    {
+        $filename = $this->reflection->getFileName();
+
+        if (!isset(self::$cache[$filename])) {
+            $parser = new \PHPParser_Parser(new \PHPParser_Lexer_Emulative);
+            self::$cache[$filename] = $parser->parse(file_get_contents($filename));
+        }
+
+        return self::$cache[$filename];
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/SerializableClosure.php
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/SerializableClosure.php b/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/SerializableClosure.php
new file mode 100644
index 0000000..b3b9959
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/SerializableClosure.php
@@ -0,0 +1,114 @@
+<?php
+
+namespace Jeremeamia\SuperClosure;
+
+/**
+ * This class allows you to do the impossible - serialize closures! With the combined power of the nikic/php-parser
+ * library, the Reflection API, and infamous eval, you can serialize a closure, unserialize it in a different PHP
+ * process, and execute it. It's almost as cool as time travel!
+ *
+ * @copyright Jeremy Lindblom 2010-2013
+ */
+class SerializableClosure implements \Serializable
+{
+    /**
+     * @var \Closure The closure being made serializable
+     */
+    protected $closure;
+
+    /**
+     * @var \ReflectionFunction The reflected closure
+     */
+    protected $reflection;
+
+    /**
+     * @var array The calculated state to serialize
+     */
+    protected $state;
+
+    /**
+     * @param \Closure $closure
+     */
+    public function __construct(\Closure $closure)
+    {
+        $this->closure = $closure;
+    }
+
+    /**
+     * @return \ReflectionFunction
+     */
+    public function getReflection()
+    {
+        if (!$this->reflection) {
+            $this->reflection = new \ReflectionFunction($this->closure);
+        }
+
+        return $this->reflection;
+    }
+
+    /**
+     * @return \Closure
+     */
+    public function getClosure()
+    {
+        return $this->closure;
+    }
+
+    /**
+     * Invokes the original closure
+     *
+     * @return mixed
+     */
+    public function __invoke()
+    {
+        return $this->getReflection()->invokeArgs(func_get_args());
+    }
+
+    /**
+     * Serialize the code and of context of the closure
+     *
+     * @return string
+     */
+    public function serialize()
+    {
+        if (!$this->state) {
+            $this->createState();
+        }
+
+        return serialize($this->state);
+    }
+
+    /**
+     * Unserializes the closure data and recreates the closure. Attempts to recreate the closure's context as well by
+     * extracting the used variables into the scope. Variables names in this method are surrounded with underlines in
+     * order to prevent collisions with the variables in the context. NOTE: There be dragons here! Both `eval` and
+     * `extract` are used in this method
+     *
+     * @param string $__serialized__
+     */
+    public function unserialize($__serialized__)
+    {
+        // Unserialize the data we need to reconstruct the SuperClosure
+        $this->state = unserialize($__serialized__);
+        list($__code__, $__context__) = $this->state;
+
+        // Simulate the original context the Closure was created in
+        extract($__context__);
+
+        // Evaluate the code to recreate the Closure
+        eval("\$this->closure = {$__code__};");
+    }
+
+    /**
+     * Uses the closure parser to fetch the closure's code and context
+     */
+    protected function createState()
+    {
+        $parser = new ClosureParser($this->getReflection());
+        $this->state = array($parser->getCode());
+        // Add the used variables (context) to the state, but wrap all closures with SerializableClosure
+        $this->state[] = array_map(function ($var) {
+            return ($var instanceof \Closure) ? new self($var) : $var;
+        }, $parser->getUsedVariables());
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/Visitor/ClosureFinderVisitor.php
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/Visitor/ClosureFinderVisitor.php b/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/Visitor/ClosureFinderVisitor.php
new file mode 100644
index 0000000..56c0625
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/Visitor/ClosureFinderVisitor.php
@@ -0,0 +1,109 @@
+<?php
+
+namespace Jeremeamia\SuperClosure\Visitor;
+
+use Jeremeamia\SuperClosure\ClosureLocation;
+
+/**
+ * This is a visitor that extends the nikic/php-parser library and looks for a closure node and its location
+ *
+ * @copyright Jeremy Lindblom 2010-2013
+ */
+class ClosureFinderVisitor extends \PHPParser_NodeVisitorAbstract
+{
+    /**
+     * @var \ReflectionFunction
+     */
+    protected $reflection;
+
+    /**
+     * @var \PHPParser_Node_Expr_Closure
+     */
+    protected $closureNode;
+
+    /**
+     * @var ClosureLocation
+     */
+    protected $location;
+
+    /**
+     * @param \ReflectionFunction $reflection
+     */
+    public function __construct(\ReflectionFunction $reflection)
+    {
+        $this->reflection = $reflection;
+        $this->location = new ClosureLocation;
+    }
+
+    public function beforeTraverse(array $nodes)
+    {
+        $this->location = ClosureLocation::fromReflection($this->reflection);
+    }
+
+    public function afterTraverse(array $nodes)
+    {
+        $this->location->finalize();
+    }
+
+    public function enterNode(\PHPParser_Node $node)
+    {
+        // Determine information about the closure's location
+        if (!$this->closureNode) {
+            if ($node instanceof \PHPParser_Node_Stmt_Namespace) {
+                $this->location->namespace = is_array($node->name->parts) ? implode('\\', $node->name->parts) : null;
+            }
+            if ($node instanceof \PHPParser_Node_Stmt_Trait) {
+                $this->location->trait = $this->location->namespace . '\\' . $node->name;
+                $this->location->class = null;
+            }
+            elseif ($node instanceof \PHPParser_Node_Stmt_Class) {
+                $this->location->class = $this->location->namespace . '\\' . $node->name;
+                $this->location->trait = null;
+            }
+        }
+
+        // Locate the node of the closure
+        if ($node instanceof \PHPParser_Node_Expr_Closure) {
+            if ($node->getAttribute('startLine') == $this->reflection->getStartLine()) {
+                if ($this->closureNode) {
+                    throw new \RuntimeException('Two closures were declared on the same line of code. Cannot determine '
+                        . 'which closure was the intended target.');
+                } else {
+                    $this->closureNode = $node;
+                }
+            }
+        }
+    }
+
+    public function leaveNode(\PHPParser_Node $node)
+    {
+        // Determine information about the closure's location
+        if (!$this->closureNode) {
+            if ($node instanceof \PHPParser_Node_Stmt_Namespace) {
+                $this->location->namespace = null;
+            }
+            if ($node instanceof \PHPParser_Node_Stmt_Trait) {
+                $this->location->trait = null;
+            }
+            elseif ($node instanceof \PHPParser_Node_Stmt_Class) {
+                $this->location->class = null;
+            }
+        }
+    }
+
+    /**
+     * @return \PHPParser_Node_Expr_Closure
+     */
+    public function getClosureNode()
+    {
+        return $this->closureNode;
+    }
+
+    /**
+     * @return ClosureLocation
+     */
+    public function getLocation()
+    {
+        return $this->location;
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/Visitor/MagicConstantVisitor.php
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/Visitor/MagicConstantVisitor.php b/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/Visitor/MagicConstantVisitor.php
new file mode 100644
index 0000000..8a1846a
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/Visitor/MagicConstantVisitor.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace Jeremeamia\SuperClosure\Visitor;
+
+use Jeremeamia\SuperClosure\ClosureLocation;
+use PHPParser_Node_Scalar_LNumber as NumberNode;
+use PHPParser_Node_Scalar_String as StringNode;
+
+/**
+ * This is a visitor that resolves magic constants (e.g., __FILE__) to their intended values within a closure's AST
+ *
+ * @copyright Jeremy Lindblom 2010-2013
+ */
+class MagicConstantVisitor extends \PHPParser_NodeVisitorAbstract
+{
+    /**
+     * @var ClosureLocation
+     */
+    protected $location;
+
+    /**
+     * @param ClosureLocation $location
+     */
+    public function __construct(ClosureLocation $location)
+    {
+        $this->location = $location;
+    }
+
+    public function leaveNode(\PHPParser_Node $node)
+    {
+        switch ($node->getType()) {
+            case 'Scalar_LineConst' :
+                return new NumberNode($node->getAttribute('startLine'));
+            case 'Scalar_FileConst' :
+                return new StringNode($this->location->file);
+            case 'Scalar_DirConst' :
+                return new StringNode($this->location->directory);
+            case 'Scalar_FuncConst' :
+                return new StringNode($this->location->function);
+            case 'Scalar_NSConst' :
+                return new StringNode($this->location->namespace);
+            case 'Scalar_ClassConst' :
+                return new StringNode($this->location->class);
+            case 'Scalar_MethodConst' :
+                return new StringNode($this->location->method);
+            case 'Scalar_TraitConst' :
+                return new StringNode($this->location->trait);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/ClosureLocationTest.php
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/ClosureLocationTest.php b/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/ClosureLocationTest.php
new file mode 100644
index 0000000..4475248
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/ClosureLocationTest.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Jeremeamia\SuperClosure\Test;
+
+use Jeremeamia\SuperClosure\ClosureLocation;
+
+class ClosureLocationTest extends \PHPUnit_Framework_TestCase
+{
+    public function testCanCreateClosureLocationFromClosureReflection()
+    {
+        $reflection = new \ReflectionFunction(function () {});
+        $location = ClosureLocation::fromReflection($reflection);
+        $setProperties = array_filter(get_object_vars($location));
+
+        $this->assertEquals(array('directory', 'file', 'function', 'line'), array_keys($setProperties));
+    }
+
+    public function testCanFinalizeLocation()
+    {
+        $location = new ClosureLocation();
+        $location->function = '[function]';
+        $location->trait = '[trait]';
+
+        $r = new \ReflectionObject($location);
+        $p = $r->getProperty('closureScopeClass');
+        $p->setAccessible(true);
+        $p->setValue($location, '[class]');
+
+        $location->finalize();
+        $this->assertEquals('[trait]::[function]', $location->method);
+        $this->assertEquals('[class]', $location->class);
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/ClosureParserTest.php
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/ClosureParserTest.php b/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/ClosureParserTest.php
new file mode 100644
index 0000000..13abd16
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/ClosureParserTest.php
@@ -0,0 +1,115 @@
+<?php
+
+namespace Jeremeamia\SuperClosure\Test;
+
+use Jeremeamia\SuperClosure\ClosureParser;
+
+class ClosureParserTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @covers \Jeremeamia\SuperClosure\ClosureParser::__construct
+     * @covers \Jeremeamia\SuperClosure\ClosureParser::getReflection
+     */
+    public function testCanGetReflectionBackFromParser()
+    {
+        $closure = function () {};
+        $reflection = new \ReflectionFunction($closure);
+        $parser = new ClosureParser($reflection);
+
+        $this->assertSame($reflection, $parser->getReflection());
+    }
+
+    /**
+     * @covers \Jeremeamia\SuperClosure\ClosureParser::fromClosure
+     */
+    public function testCanUseFactoryMethodToCreateParser()
+    {
+        $parser = ClosureParser::fromClosure(function () {});
+
+        $this->assertInstanceOf('Jeremeamia\SuperClosure\ClosureParser', $parser);
+    }
+
+    /**
+     * @covers \Jeremeamia\SuperClosure\ClosureParser::__construct
+     */
+    public function testRaisesErrorWhenNonClosureIsProvided()
+    {
+        $this->setExpectedException('InvalidArgumentException');
+
+        $reflection = new \ReflectionFunction('strpos');
+        $parser = new ClosureParser($reflection);
+    }
+
+    /**
+     * @covers \Jeremeamia\SuperClosure\ClosureParser::getCode
+     */
+    public function testCanGetCodeFromParser()
+    {
+        $closure = function () {};
+        $expectedCode = "function () {\n    \n};";
+        $parser = new ClosureParser(new \ReflectionFunction($closure));
+        $actualCode = $parser->getCode();
+
+        $this->assertEquals($expectedCode, $actualCode);
+    }
+
+    /**
+     * @covers \Jeremeamia\SuperClosure\ClosureParser::getUsedVariables
+     */
+    public function testCanGetUsedVariablesFromParser()
+    {
+        $foo = 1;
+        $bar = 2;
+        $closure = function () use ($foo, $bar) {};
+        $expectedVars = array('foo' => 1, 'bar' => 2);
+        $parser = new ClosureParser(new \ReflectionFunction($closure));
+        $actualVars = $parser->getUsedVariables();
+
+        $this->assertEquals($expectedVars, $actualVars);
+    }
+
+    /**
+     * @covers \Jeremeamia\SuperClosure\ClosureParser::getUsedVariables
+     */
+    public function testCanGetUsedVariablesWhenOneIsNullFromParser()
+    {
+        $foo = null;
+        $bar = 2;
+        $closure = function () use ($foo, $bar) {};
+        $expectedVars = array('foo' => null, 'bar' => 2);
+        $parser = new ClosureParser(new \ReflectionFunction($closure));
+        $actualVars = $parser->getUsedVariables();
+
+        $this->assertEquals($expectedVars, $actualVars);
+    }
+
+    /**
+     * @covers \Jeremeamia\SuperClosure\ClosureParser::clearCache
+     */
+    public function testCanClearCache()
+    {
+        $parserClass = 'Jeremeamia\SuperClosure\ClosureParser';
+
+        $p = new \ReflectionProperty($parserClass, 'cache');
+        $p->setAccessible(true);
+        $p->setValue(null, array('foo' => 'bar'));
+
+        $this->assertEquals(array('foo' => 'bar'), $this->readAttribute($parserClass, 'cache'));
+
+        ClosureParser::clearCache();
+
+        $this->assertEquals(array(), $this->readAttribute($parserClass, 'cache'));
+    }
+
+    /**
+     * @covers \Jeremeamia\SuperClosure\ClosureParser::getClosureAbstractSyntaxTree
+     * @covers \Jeremeamia\SuperClosure\ClosureParser::getFileAbstractSyntaxTree
+     */
+    public function testCanGetClosureAst()
+    {
+        $closure = function () {};
+        $parser = new ClosureParser(new \ReflectionFunction($closure));
+        $ast = $parser->getClosureAbstractSyntaxTree();
+        $this->assertInstanceOf('PHPParser_Node_Expr_Closure', $ast);
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/SerializableClosureTest.php
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/SerializableClosureTest.php b/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/SerializableClosureTest.php
new file mode 100644
index 0000000..1beac8d
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/SerializableClosureTest.php
@@ -0,0 +1,115 @@
+<?php
+
+namespace Jeremeamia\SuperClosure\Test;
+
+use Jeremeamia\SuperClosure\SerializableClosure;
+
+/**
+ * @covers \Jeremeamia\SuperClosure\SerializableClosure
+ */
+class SerializableClosureTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var SerializableClosure
+     */
+    public $serializableClosure;
+
+    /**
+     * @var \Closure
+     */
+    public $originalClosure;
+
+    public function setup()
+    {
+        $base = 2;
+        $exp = function ($power) use ($base) {
+            return (int) pow($base, $power);
+        };
+
+        $this->originalClosure = $exp;
+        $this->serializableClosure = new SerializableClosure($exp);
+    }
+
+    public function testClosureProxiesToTheOriginalClosureWhenInvoked()
+    {
+        $this->assertInstanceOf('\Closure', $this->serializableClosure->getClosure());
+        $this->assertSame($this->originalClosure, $this->serializableClosure->getClosure());
+        $this->assertEquals(
+            call_user_func($this->originalClosure, 4),
+            call_user_func($this->serializableClosure, 4)
+        );
+    }
+
+    public function testClosureBehavesTheSameAfterSerializationProcess()
+    {
+        $originalReturnValue = call_user_func($this->serializableClosure, 4);
+        $serializedClosure = serialize($this->serializableClosure);
+        $unserializedClosure = unserialize($serializedClosure);
+        $finalReturnValue = call_user_func($unserializedClosure, 4);
+
+        $this->assertEquals($originalReturnValue, $finalReturnValue);
+    }
+
+    public function testCanSerializeRecursiveClosure()
+    {
+        if (version_compare(PHP_VERSION, '5.4', '<')) {
+            $this->markTestSkipped('Requires version 5.4+ of PHP');
+        }
+
+        $factorial = new SerializableClosure(function ($n) use (&$factorial) {
+            return ($n <= 1) ? 1 : $n * $factorial($n - 1);
+        });
+
+        $this->assertEquals(120, call_user_func($factorial, 5));
+    }
+
+    public function testCanSerializeMultipleTimes()
+    {
+        $result = call_user_func($this->serializableClosure, 5);
+        $this->assertEquals(32, $result);
+
+        $serializedOnce = unserialize(serialize($this->serializableClosure));
+        $this->assertEquals(32, call_user_func($serializedOnce, 5));
+        $internalState = $this->readAttribute($serializedOnce, 'state');
+        $this->assertCount(2, $internalState);
+
+        $serializedAgain = unserialize(serialize($this->serializableClosure));
+        $this->assertEquals(32, call_user_func($serializedAgain, 5));
+        $this->assertEquals($internalState, $this->readAttribute($serializedAgain, 'state'));
+
+        $serializedTwice = unserialize(serialize($serializedOnce));
+        $this->assertEquals(32, call_user_func($serializedTwice, 5));
+        $this->assertEquals($internalState, $this->readAttribute($serializedTwice, 'state'));
+    }
+
+    /**
+     * CAVEAT #1: Serializing a closure will sever relationships with things passed by reference
+     */
+    public function testDoesNotMaintainsReferencesEvenWhenVariablesAreStillInScope()
+    {
+        $num = 0;
+        $inc = new SerializableClosure(function () use (&$num) {
+            $num++;
+        });
+
+        $inc();
+        $inc();
+        $this->assertEquals(2, $num, '$num should be incremented twice because by reference');
+
+        $newInc = unserialize(serialize($inc));
+        /** @var $newInc \Closure */
+        $newInc();
+        $this->assertEquals(2, $num, '$num should not be incremented again because the reference is lost');
+    }
+
+    /**
+     * CAVEAT #2: You can't serialize a closure if there are two closures declared on one line
+     */
+    public function testCannotDetermineWhichClosureToUseIfTwoDeclaredOnTheSameLine()
+    {
+        $this->setExpectedException('Exception');
+
+        $add = function ($a, $b) {return $a + $b;}; $sub = function ($a, $b) {return $a - $b;};
+        $serialized = serialize(new SerializableClosure($sub));
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/Visitor/ClosureFinderVisitorTest.php
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/Visitor/ClosureFinderVisitorTest.php b/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/Visitor/ClosureFinderVisitorTest.php
new file mode 100644
index 0000000..b067cc7
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/Visitor/ClosureFinderVisitorTest.php
@@ -0,0 +1,57 @@
+<?php
+
+namespace Jeremeamia\SuperClosure\Test\Visitor;
+
+use Jeremeamia\SuperClosure\Visitor\ClosureFinderVisitor;
+
+/**
+ * @covers Jeremeamia\SuperClosure\Visitor\ClosureFinderVisitor
+ */
+class ClosureFinderVisitorTest extends \PHPUnit_Framework_TestCase
+{
+    public function testClosureNodeIsDiscoveredByVisitor()
+    {
+        $closure = function () {}; // Take the line number here and set it as the "startLine"
+        $reflectedClosure = new \ReflectionFunction($closure);
+        $closureFinder = new ClosureFinderVisitor($reflectedClosure);
+        $closureNode = new \PHPParser_Node_Expr_Closure(array(), array('startLine' => 14));
+        $closureFinder->enterNode($closureNode);
+
+        $this->assertSame($closureNode, $closureFinder->getClosureNode());
+    }
+
+    public function testClosureNodeIsAmbiguousIfMultipleClosuresOnLine()
+    {
+        $this->setExpectedException('RuntimeException');
+
+        $closure = function () {}; function () {}; // Take the line number here and set it as the "startLine"
+        $closureFinder = new ClosureFinderVisitor(new \ReflectionFunction($closure));
+        $closureFinder->enterNode(new \PHPParser_Node_Expr_Closure(array(), array('startLine' => 27)));
+        $closureFinder->enterNode(new \PHPParser_Node_Expr_Closure(array(), array('startLine' => 27)));
+    }
+
+    public function testCalculatesClosureLocation()
+    {
+        $closure = function () {}; // Take the line number here and set it as the "startLine"
+        $closureFinder = new ClosureFinderVisitor(new \ReflectionFunction($closure));
+
+        $closureFinder->beforeTraverse(array());
+
+        $node = new \PHPParser_Node_Stmt_Namespace(new \PHPParser_Node_Name(array('Foo', 'Bar')));
+        $closureFinder->enterNode($node);
+        $closureFinder->leaveNode($node);
+
+        $node = new \PHPParser_Node_Stmt_Trait('Fizz');
+        $closureFinder->enterNode($node);
+        $closureFinder->leaveNode($node);
+
+        $node = new \PHPParser_Node_Stmt_Class('Buzz');
+        $closureFinder->enterNode($node);
+        $closureFinder->leaveNode($node);
+
+        $closureFinder->afterTraverse(array());
+
+        $setProperties = array_filter(get_object_vars($closureFinder->getLocation()));
+        $this->assertEquals(array('directory', 'file', 'function', 'line'), array_keys($setProperties));
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/Visitor/MagicConstantVisitorTest.php
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/Visitor/MagicConstantVisitorTest.php b/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/Visitor/MagicConstantVisitorTest.php
new file mode 100644
index 0000000..48440c8
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/tests/Jeremeamia/SuperClosure/Test/Visitor/MagicConstantVisitorTest.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace Jeremeamia\SuperClosure\Test\Visitor;
+
+use Jeremeamia\SuperClosure\Visitor\MagicConstantVisitor;
+use Jeremeamia\SuperClosure\ClosureLocation;
+
+/**
+ * @covers Jeremeamia\SuperClosure\Visitor\MagicConstantVisitor
+ */
+class MagicConstantVisitorTest extends \PHPUnit_Framework_TestCase
+{
+    public function testDataFromClosureLocationGetsUsed()
+    {
+        $location = new ClosureLocation();
+        $location->class = '[class]';
+        $location->directory = '[directory]';
+        $location->file = '[file]';
+        $location->function = '[function]';
+        $location->line = '[line]';
+        $location->method = '[method]';
+        $location->namespace = '[namespace]';
+        $location->trait = '[trait]';
+
+        $nodes = array(
+            'PHPParser_Node_Scalar_LineConst'   => 'PHPParser_Node_Scalar_LNumber',
+            'PHPParser_Node_Scalar_FileConst'   => 'PHPParser_Node_Scalar_String',
+            'PHPParser_Node_Scalar_DirConst'    => 'PHPParser_Node_Scalar_String',
+            'PHPParser_Node_Scalar_FuncConst'   => 'PHPParser_Node_Scalar_String',
+            'PHPParser_Node_Scalar_NSConst'     => 'PHPParser_Node_Scalar_String',
+            'PHPParser_Node_Scalar_ClassConst'  => 'PHPParser_Node_Scalar_String',
+            'PHPParser_Node_Scalar_MethodConst' => 'PHPParser_Node_Scalar_String',
+            'PHPParser_Node_Scalar_TraitConst'  => 'PHPParser_Node_Scalar_String',
+            'PHPParser_Node_Scalar_String'      => 'PHPParser_Node_Scalar_String',
+
+        );
+
+        $visitor = new MagicConstantVisitor($location);
+        foreach ($nodes as $originalNodeName => $resultNodeName) {
+            $mockNode = $this->getMockBuilder($originalNodeName)
+                ->disableOriginalConstructor()
+                ->setMethods(array('getType', 'getAttribute'))
+                ->getMock();
+            $mockNode->expects($this->any())
+                ->method('getAttribute')
+                ->will($this->returnValue(1));
+            $mockNode->expects($this->any())
+                ->method('getType')
+                ->will($this->returnValue(substr($originalNodeName, 15)));
+            $resultNode = $visitor->leaveNode($mockNode) ?: $mockNode;
+            $this->assertInstanceOf($resultNodeName, $resultNode);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/jeremeamia/SuperClosure/tests/bootstrap.php
----------------------------------------------------------------------
diff --git a/vendor/jeremeamia/SuperClosure/tests/bootstrap.php b/vendor/jeremeamia/SuperClosure/tests/bootstrap.php
new file mode 100644
index 0000000..16fe799
--- /dev/null
+++ b/vendor/jeremeamia/SuperClosure/tests/bootstrap.php
@@ -0,0 +1,4 @@
+<?php
+
+date_default_timezone_set('America/Los_Angeles');
+require __DIR__ . '/../vendor/autoload.php';

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/.gitattributes
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/.gitattributes b/vendor/laravel/framework/.gitattributes
new file mode 100755
index 0000000..0c772b6
--- /dev/null
+++ b/vendor/laravel/framework/.gitattributes
@@ -0,0 +1,2 @@
+/build export-ignore
+/tests export-ignore

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/.gitignore
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/.gitignore b/vendor/laravel/framework/.gitignore
new file mode 100755
index 0000000..10a34bb
--- /dev/null
+++ b/vendor/laravel/framework/.gitignore
@@ -0,0 +1,5 @@
+/vendor
+composer.phar
+composer.lock
+.DS_Store
+Thumbs.db

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/.scrutinizer.yml
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/.scrutinizer.yml b/vendor/laravel/framework/.scrutinizer.yml
new file mode 100644
index 0000000..6c33c7b
--- /dev/null
+++ b/vendor/laravel/framework/.scrutinizer.yml
@@ -0,0 +1,55 @@
+filter:
+    excluded_paths: [tests/*]
+
+checks:
+    php:
+        code_rating: true
+        duplication: true
+        variable_existence: true
+        useless_calls: true
+        use_statement_alias_conflict: true
+        unused_variables: true
+        unused_properties: true
+        unused_parameters: true
+        unused_methods: true
+        unreachable_code: true
+        sql_injection_vulnerabilities: true
+        security_vulnerabilities: true
+        precedence_mistakes: true
+        precedence_in_conditions: true
+        parameter_non_unique: true
+        no_property_on_interface: true
+        no_non_implemented_abstract_methods: true
+        deprecated_code_usage: true
+        closure_use_not_conflicting: true
+        closure_use_modifiable: true
+        avoid_useless_overridden_methods: true
+        avoid_conflicting_incrementers: true
+        assignment_of_null_return: true
+        avoid_usage_of_logical_operators: true
+        ensure_lower_case_builtin_functions: true
+        foreach_traversable: true
+        function_in_camel_caps: true
+        instanceof_class_exists: true
+        lowercase_basic_constants: true
+        lowercase_php_keywords: true
+        missing_arguments: true
+        no_commented_out_code: true
+        no_duplicate_arguments: true
+        no_else_if_statements: true
+        no_space_between_concatenation_operator: true
+        no_space_inside_cast_operator: true
+        no_trailing_whitespace: true
+        no_underscore_prefix_in_properties: true
+        no_unnecessary_if: true
+        no_unnecessary_function_call_in_for_loop: true
+        non_commented_empty_catch_block: true
+        php5_style_constructor: true
+        parameters_in_camelcaps: true
+        prefer_while_loop_over_for_loop: true
+        properties_in_camelcaps: true
+        require_scope_for_methods: true
+        require_scope_for_properties: true
+        spacing_around_conditional_operators: true
+        spacing_around_non_conditional_operators: true
+        spacing_of_function_arguments: true

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/.travis.yml
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/.travis.yml b/vendor/laravel/framework/.travis.yml
new file mode 100755
index 0000000..cd31330
--- /dev/null
+++ b/vendor/laravel/framework/.travis.yml
@@ -0,0 +1,13 @@
+language: php
+
+php:
+  - 5.4
+  - 5.5
+  - 5.6
+  - hhvm
+
+sudo: false
+
+install: travis_retry composer install --no-interaction --prefer-source
+
+script: vendor/bin/phpunit

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/CONTRIBUTING.md
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/CONTRIBUTING.md b/vendor/laravel/framework/CONTRIBUTING.md
new file mode 100755
index 0000000..2cbf825
--- /dev/null
+++ b/vendor/laravel/framework/CONTRIBUTING.md
@@ -0,0 +1,3 @@
+# Laravel Contribution Guide
+
+Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](http://laravel.com/docs/contributions). Please review the entire guide before sending a pull request.

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/LICENSE.txt
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/LICENSE.txt b/vendor/laravel/framework/LICENSE.txt
new file mode 100644
index 0000000..1ce5963
--- /dev/null
+++ b/vendor/laravel/framework/LICENSE.txt
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) <Taylor Otwell>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/composer.json b/vendor/laravel/framework/composer.json
new file mode 100755
index 0000000..e18a3fa
--- /dev/null
+++ b/vendor/laravel/framework/composer.json
@@ -0,0 +1,96 @@
+{
+    "name": "laravel/framework",
+    "description": "The Laravel Framework.",
+    "keywords": ["framework", "laravel"],
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "classpreloader/classpreloader": "~1.0.2",
+        "d11wtq/boris": "~1.0",
+        "ircmaxell/password-compat": "~1.0",
+        "filp/whoops": "1.1.*",
+        "jeremeamia/superclosure": "~1.0.1",
+        "monolog/monolog": "~1.6",
+        "nesbot/carbon": "~1.0",
+        "patchwork/utf8": "~1.1",
+        "phpseclib/phpseclib": "0.3.*",
+        "predis/predis": "0.8.*",
+        "stack/builder": "~1.0",
+        "swiftmailer/swiftmailer": "~5.1",
+        "symfony/browser-kit": "2.5.*",
+        "symfony/console": "2.5.*",
+        "symfony/css-selector": "2.5.*",
+        "symfony/debug": "2.5.*",
+        "symfony/dom-crawler": "2.5.*",
+        "symfony/finder": "2.5.*",
+        "symfony/http-foundation": "2.5.*",
+        "symfony/http-kernel": "2.5.*",
+        "symfony/process": "2.5.*",
+        "symfony/routing": "2.5.*",
+        "symfony/security-core": "2.5.*",
+        "symfony/translation": "2.5.*"
+    },
+    "replace": {
+        "illuminate/auth": "self.version",
+        "illuminate/cache": "self.version",
+        "illuminate/config": "self.version",
+        "illuminate/console": "self.version",
+        "illuminate/container": "self.version",
+        "illuminate/cookie": "self.version",
+        "illuminate/database": "self.version",
+        "illuminate/encryption": "self.version",
+        "illuminate/events": "self.version",
+        "illuminate/exception": "self.version",
+        "illuminate/filesystem": "self.version",
+        "illuminate/foundation": "self.version",
+        "illuminate/hashing": "self.version",
+        "illuminate/http": "self.version",
+        "illuminate/html": "self.version",
+        "illuminate/log": "self.version",
+        "illuminate/mail": "self.version",
+        "illuminate/pagination": "self.version",
+        "illuminate/queue": "self.version",
+        "illuminate/redis": "self.version",
+        "illuminate/remote": "self.version",
+        "illuminate/routing": "self.version",
+        "illuminate/session": "self.version",
+        "illuminate/support": "self.version",
+        "illuminate/translation": "self.version",
+        "illuminate/validation": "self.version",
+        "illuminate/view": "self.version",
+        "illuminate/workbench": "self.version"
+    },
+    "require-dev": {
+        "aws/aws-sdk-php": "~2.6",
+        "iron-io/iron_mq": "~1.5",
+        "pda/pheanstalk": "~2.1",
+        "mockery/mockery": "~0.9",
+        "phpunit/phpunit": "~4.0"
+    },
+    "autoload": {
+        "classmap": [
+            "src/Illuminate/Queue/IlluminateQueueClosure.php"
+        ],
+        "files": [
+            "src/Illuminate/Support/helpers.php"
+        ],
+        "psr-0": {
+            "Illuminate": "src/"
+        }
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "suggest": {
+        "doctrine/dbal": "Allow renaming columns and dropping SQLite columns."
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/phpunit.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/phpunit.php b/vendor/laravel/framework/phpunit.php
new file mode 100755
index 0000000..7e0cfdd
--- /dev/null
+++ b/vendor/laravel/framework/phpunit.php
@@ -0,0 +1,30 @@
+<?php
+
+/*
+|--------------------------------------------------------------------------
+| Register The Composer Auto Loader
+|--------------------------------------------------------------------------
+|
+| Composer provides a convenient, automatically generated class loader
+| for our application. We just need to utilize it! We'll require it
+| into the script here so that we do not have to worry about the
+| loading of any our classes "manually". Feels great to relax.
+|
+*/
+
+require __DIR__.'/vendor/autoload.php';
+
+/*
+|--------------------------------------------------------------------------
+| Set The Default Timezone
+|--------------------------------------------------------------------------
+|
+| Here we will set the default timezone for PHP. PHP is notoriously mean
+| if the timezone is not explicitly set. This will be used by each of
+| the PHP date and date-time functions throughout the application.
+|
+*/
+
+date_default_timezone_set('UTC');
+
+Carbon\Carbon::setTestNow(Carbon\Carbon::now());

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/phpunit.xml
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/phpunit.xml b/vendor/laravel/framework/phpunit.xml
new file mode 100755
index 0000000..d52ff1b
--- /dev/null
+++ b/vendor/laravel/framework/phpunit.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit backupGlobals="false"
+         backupStaticAttributes="false"
+         bootstrap="phpunit.php"
+         colors="true"
+         convertErrorsToExceptions="true"
+         convertNoticesToExceptions="true"
+         convertWarningsToExceptions="true"
+         processIsolation="false"
+         stopOnError="false"
+         stopOnFailure="false"
+         syntaxCheck="true"
+         verbose="true"
+>
+    <testsuites>
+        <testsuite name="Laravel Test Suite">
+            <directory suffix="Test.php">./tests</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./src</directory>
+            <exclude>
+                <file>./src/Illuminate/Foundation/start.php</file>
+                <file>./src/Illuminate/Foundation/Console/Optimize/config.php</file>
+                <directory>./src/Illuminate/Pagination/views</directory>
+            </exclude>
+        </whitelist>
+    </filter>
+</phpunit>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/readme.md
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/readme.md b/vendor/laravel/framework/readme.md
new file mode 100755
index 0000000..a29c616
--- /dev/null
+++ b/vendor/laravel/framework/readme.md
@@ -0,0 +1,27 @@
+## Laravel Framework (Kernel)
+
+[![Build Status](https://travis-ci.org/laravel/framework.svg)](https://travis-ci.org/laravel/framework)
+[![Total Downloads](https://poser.pugx.org/laravel/framework/downloads.svg)](https://packagist.org/packages/laravel/framework)
+[![Latest Stable Version](https://poser.pugx.org/laravel/framework/v/stable.svg)](https://packagist.org/packages/laravel/framework)
+[![Latest Unstable Version](https://poser.pugx.org/laravel/framework/v/unstable.svg)](https://packagist.org/packages/laravel/framework)
+[![License](https://poser.pugx.org/laravel/framework/license.svg)](https://packagist.org/packages/laravel/framework)
+
+> **Note:** This repository contains the core code of the Laravel framework. If you want to build an application using Laravel 4, visit the main [Laravel repository](https://github.com/laravel/laravel).
+
+## Laravel PHP Framework
+
+Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable, creative experience to be truly fulfilling. Laravel attempts to take the pain out of development by easing common tasks used in the majority of web projects, such as authentication, routing, sessions, queueing, and caching.
+
+Laravel is accessible, yet powerful, providing powerful tools needed for large, robust applications. A superb inversion of control container, expressive migration system, and tightly integrated unit testing support give you the tools you need to build any application with which you are tasked.
+
+## Official Documentation
+
+Documentation for the framework can be found on the [Laravel website](http://laravel.com/docs).
+
+## Contributing
+
+Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](http://laravel.com/docs/contributions).
+
+### License
+
+The Laravel framework is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT)

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php b/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php
new file mode 100755
index 0000000..7f7bad2
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php
@@ -0,0 +1,116 @@
+<?php namespace Illuminate\Auth;
+
+use Illuminate\Support\Manager;
+
+class AuthManager extends Manager {
+
+	/**
+	 * Create a new driver instance.
+	 *
+	 * @param  string  $driver
+	 * @return mixed
+	 */
+	protected function createDriver($driver)
+	{
+		$guard = parent::createDriver($driver);
+
+		// When using the remember me functionality of the authentication services we
+		// will need to be set the encryption instance of the guard, which allows
+		// secure, encrypted cookie values to get generated for those cookies.
+		$guard->setCookieJar($this->app['cookie']);
+
+		$guard->setDispatcher($this->app['events']);
+
+		return $guard->setRequest($this->app->refresh('request', $guard, 'setRequest'));
+	}
+
+	/**
+	 * Call a custom driver creator.
+	 *
+	 * @param  string  $driver
+	 * @return \Illuminate\Auth\Guard
+	 */
+	protected function callCustomCreator($driver)
+	{
+		$custom = parent::callCustomCreator($driver);
+
+		if ($custom instanceof Guard) return $custom;
+
+		return new Guard($custom, $this->app['session.store']);
+	}
+
+	/**
+	 * Create an instance of the database driver.
+	 *
+	 * @return \Illuminate\Auth\Guard
+	 */
+	public function createDatabaseDriver()
+	{
+		$provider = $this->createDatabaseProvider();
+
+		return new Guard($provider, $this->app['session.store']);
+	}
+
+	/**
+	 * Create an instance of the database user provider.
+	 *
+	 * @return \Illuminate\Auth\DatabaseUserProvider
+	 */
+	protected function createDatabaseProvider()
+	{
+		$connection = $this->app['db']->connection();
+
+		// When using the basic database user provider, we need to inject the table we
+		// want to use, since this is not an Eloquent model we will have no way to
+		// know without telling the provider, so we'll inject the config value.
+		$table = $this->app['config']['auth.table'];
+
+		return new DatabaseUserProvider($connection, $this->app['hash'], $table);
+	}
+
+	/**
+	 * Create an instance of the Eloquent driver.
+	 *
+	 * @return \Illuminate\Auth\Guard
+	 */
+	public function createEloquentDriver()
+	{
+		$provider = $this->createEloquentProvider();
+
+		return new Guard($provider, $this->app['session.store']);
+	}
+
+	/**
+	 * Create an instance of the Eloquent user provider.
+	 *
+	 * @return \Illuminate\Auth\EloquentUserProvider
+	 */
+	protected function createEloquentProvider()
+	{
+		$model = $this->app['config']['auth.model'];
+
+		return new EloquentUserProvider($this->app['hash'], $model);
+	}
+
+	/**
+	 * Get the default authentication driver name.
+	 *
+	 * @return string
+	 */
+	public function getDefaultDriver()
+	{
+		return $this->app['config']['auth.driver'];
+	}
+
+	/**
+	 * Set the default authentication driver name.
+	 *
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function setDefaultDriver($name)
+	{
+		$this->app['config']['auth.driver'] = $name;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/AuthServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/AuthServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Auth/AuthServiceProvider.php
new file mode 100755
index 0000000..a8a8024
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/AuthServiceProvider.php
@@ -0,0 +1,42 @@
+<?php namespace Illuminate\Auth;
+
+use Illuminate\Support\ServiceProvider;
+
+class AuthServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('auth', function($app)
+		{
+			// Once the authentication service has actually been requested by the developer
+			// we will set a variable in the application indicating such. This helps us
+			// know that we need to set any queued cookies in the after event later.
+			$app['auth.loaded'] = true;
+
+			return new AuthManager($app);
+		});
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('auth');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/Console/ClearRemindersCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Console/ClearRemindersCommand.php b/vendor/laravel/framework/src/Illuminate/Auth/Console/ClearRemindersCommand.php
new file mode 100644
index 0000000..8bb5cb2
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/Console/ClearRemindersCommand.php
@@ -0,0 +1,33 @@
+<?php namespace Illuminate\Auth\Console;
+
+use Illuminate\Console\Command;
+
+class ClearRemindersCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'auth:clear-reminders';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Flush expired reminders.';
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$this->laravel['auth.reminder.repository']->deleteExpired();
+
+		$this->info('Expired reminders cleared!');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/Console/RemindersControllerCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Console/RemindersControllerCommand.php b/vendor/laravel/framework/src/Illuminate/Auth/Console/RemindersControllerCommand.php
new file mode 100644
index 0000000..b465aec
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/Console/RemindersControllerCommand.php
@@ -0,0 +1,93 @@
+<?php namespace Illuminate\Auth\Console;
+
+use Illuminate\Console\Command;
+use Illuminate\Filesystem\Filesystem;
+use Symfony\Component\Console\Input\InputOption;
+
+class RemindersControllerCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'auth:reminders-controller';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Create a stub password reminder controller';
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * Create a new reminder table command instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @return void
+	 */
+	public function __construct(Filesystem $files)
+	{
+		parent::__construct();
+
+		$this->files = $files;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$destination = $this->getPath() . '/RemindersController.php';
+
+		if ( ! $this->files->exists($destination))
+		{
+			$this->files->copy(__DIR__.'/stubs/controller.stub', $destination);
+
+			$this->info('Password reminders controller created successfully!');
+
+			$this->comment("Route: Route::controller('password', 'RemindersController');");
+		}
+		else
+		{
+			$this->error('Password reminders controller already exists!');
+		}
+	}
+
+	/**
+	 * Get the path to the migration directory.
+	 *
+	 * @return string
+	 */
+	private function getPath()
+	{
+		if ( ! $path = $this->input->getOption('path'))
+		{
+			$path = $this->laravel['path'].'/controllers';
+		}
+
+		return rtrim($path, '/');
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('path', null, InputOption::VALUE_OPTIONAL, 'The directory where the controller should be placed.', null),
+		);
+	}
+
+}


[21/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Container/Container.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Container/Container.php b/vendor/laravel/framework/src/Illuminate/Container/Container.php
new file mode 100755
index 0000000..84b606e
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Container/Container.php
@@ -0,0 +1,866 @@
+<?php namespace Illuminate\Container;
+
+use Closure;
+use ArrayAccess;
+use ReflectionClass;
+use ReflectionParameter;
+
+class Container implements ArrayAccess {
+
+	/**
+	 * An array of the types that have been resolved.
+	 *
+	 * @var array
+	 */
+	protected $resolved = array();
+
+	/**
+	 * The container's bindings.
+	 *
+	 * @var array
+	 */
+	protected $bindings = array();
+
+	/**
+	 * The container's shared instances.
+	 *
+	 * @var array
+	 */
+	protected $instances = array();
+
+	/**
+	 * The registered type aliases.
+	 *
+	 * @var array
+	 */
+	protected $aliases = array();
+
+	/**
+	 * All of the registered rebound callbacks.
+	 *
+	 * @var array
+	 */
+	protected $reboundCallbacks = array();
+
+	/**
+	 * All of the registered resolving callbacks.
+	 *
+	 * @var array
+	 */
+	protected $resolvingCallbacks = array();
+
+	/**
+	 * All of the global resolving callbacks.
+	 *
+	 * @var array
+	 */
+	protected $globalResolvingCallbacks = array();
+
+	/**
+	 * Determine if a given string is resolvable.
+	 *
+	 * @param  string  $abstract
+	 * @return bool
+	 */
+	protected function resolvable($abstract)
+	{
+		return $this->bound($abstract) || $this->isAlias($abstract);
+	}
+
+	/**
+	 * Determine if the given abstract type has been bound.
+	 *
+	 * @param  string  $abstract
+	 * @return bool
+	 */
+	public function bound($abstract)
+	{
+		return isset($this->bindings[$abstract]) || isset($this->instances[$abstract]);
+	}
+
+	/**
+	 * Determine if the given abstract type has been resolved.
+	 *
+	 * @param  string  $abstract
+	 * @return bool
+	 */
+	public function resolved($abstract)
+	{
+		return isset($this->resolved[$abstract]) || isset($this->instances[$abstract]);
+	}
+
+	/**
+	 * Determine if a given string is an alias.
+	 *
+	 * @param  string  $name
+	 * @return bool
+	 */
+	public function isAlias($name)
+	{
+		return isset($this->aliases[$name]);
+	}
+
+	/**
+	 * Register a binding with the container.
+	 *
+	 * @param  string|array  $abstract
+	 * @param  \Closure|string|null  $concrete
+	 * @param  bool  $shared
+	 * @return void
+	 */
+	public function bind($abstract, $concrete = null, $shared = false)
+	{
+		// If the given types are actually an array, we will assume an alias is being
+		// defined and will grab this "real" abstract class name and register this
+		// alias with the container so that it can be used as a shortcut for it.
+		if (is_array($abstract))
+		{
+			list($abstract, $alias) = $this->extractAlias($abstract);
+
+			$this->alias($abstract, $alias);
+		}
+
+		// If no concrete type was given, we will simply set the concrete type to the
+		// abstract type. This will allow concrete type to be registered as shared
+		// without being forced to state their classes in both of the parameter.
+		$this->dropStaleInstances($abstract);
+
+		if (is_null($concrete))
+		{
+			$concrete = $abstract;
+		}
+
+		// If the factory is not a Closure, it means it is just a class name which is
+		// is bound into this container to the abstract type and we will just wrap
+		// it up inside a Closure to make things more convenient when extending.
+		if ( ! $concrete instanceof Closure)
+		{
+			$concrete = $this->getClosure($abstract, $concrete);
+		}
+
+		$this->bindings[$abstract] = compact('concrete', 'shared');
+
+		// If the abstract type was already resolved in this container we'll fire the
+		// rebound listener so that any objects which have already gotten resolved
+		// can have their copy of the object updated via the listener callbacks.
+		if ($this->resolved($abstract))
+		{
+			$this->rebound($abstract);
+		}
+	}
+
+	/**
+	 * Get the Closure to be used when building a type.
+	 *
+	 * @param  string  $abstract
+	 * @param  string  $concrete
+	 * @return \Closure
+	 */
+	protected function getClosure($abstract, $concrete)
+	{
+		return function($c, $parameters = array()) use ($abstract, $concrete)
+		{
+			$method = ($abstract == $concrete) ? 'build' : 'make';
+
+			return $c->$method($concrete, $parameters);
+		};
+	}
+
+	/**
+	 * Register a binding if it hasn't already been registered.
+	 *
+	 * @param  string  $abstract
+	 * @param  \Closure|string|null  $concrete
+	 * @param  bool  $shared
+	 * @return void
+	 */
+	public function bindIf($abstract, $concrete = null, $shared = false)
+	{
+		if ( ! $this->bound($abstract))
+		{
+			$this->bind($abstract, $concrete, $shared);
+		}
+	}
+
+	/**
+	 * Register a shared binding in the container.
+	 *
+	 * @param  string  $abstract
+	 * @param  \Closure|string|null  $concrete
+	 * @return void
+	 */
+	public function singleton($abstract, $concrete = null)
+	{
+		$this->bind($abstract, $concrete, true);
+	}
+
+	/**
+	 * Wrap a Closure such that it is shared.
+	 *
+	 * @param  \Closure  $closure
+	 * @return \Closure
+	 */
+	public function share(Closure $closure)
+	{
+		return function($container) use ($closure)
+		{
+			// We'll simply declare a static variable within the Closures and if it has
+			// not been set we will execute the given Closures to resolve this value
+			// and return it back to these consumers of the method as an instance.
+			static $object;
+
+			if (is_null($object))
+			{
+				$object = $closure($container);
+			}
+
+			return $object;
+		};
+	}
+
+	/**
+	 * Bind a shared Closure into the container.
+	 *
+	 * @param  string    $abstract
+	 * @param  \Closure  $closure
+	 * @return void
+	 */
+	public function bindShared($abstract, Closure $closure)
+	{
+		$this->bind($abstract, $this->share($closure), true);
+	}
+
+	/**
+	 * "Extend" an abstract type in the container.
+	 *
+	 * @param  string    $abstract
+	 * @param  \Closure  $closure
+	 * @return void
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	public function extend($abstract, Closure $closure)
+	{
+		if ( ! isset($this->bindings[$abstract]))
+		{
+			throw new \InvalidArgumentException("Type {$abstract} is not bound.");
+		}
+
+		if (isset($this->instances[$abstract]))
+		{
+			$this->instances[$abstract] = $closure($this->instances[$abstract], $this);
+
+			$this->rebound($abstract);
+		}
+		else
+		{
+			$extender = $this->getExtender($abstract, $closure);
+
+			$this->bind($abstract, $extender, $this->isShared($abstract));
+		}
+	}
+
+	/**
+	 * Get an extender Closure for resolving a type.
+	 *
+	 * @param  string    $abstract
+	 * @param  \Closure  $closure
+	 * @return \Closure
+	 */
+	protected function getExtender($abstract, Closure $closure)
+	{
+		// To "extend" a binding, we will grab the old "resolver" Closure and pass it
+		// into a new one. The old resolver will be called first and the result is
+		// handed off to the "new" resolver, along with this container instance.
+		$resolver = $this->bindings[$abstract]['concrete'];
+
+		return function($container) use ($resolver, $closure)
+		{
+			return $closure($resolver($container), $container);
+		};
+	}
+
+	/**
+	 * Register an existing instance as shared in the container.
+	 *
+	 * @param  string  $abstract
+	 * @param  mixed   $instance
+	 * @return void
+	 */
+	public function instance($abstract, $instance)
+	{
+		// First, we will extract the alias from the abstract if it is an array so we
+		// are using the correct name when binding the type. If we get an alias it
+		// will be registered with the container so we can resolve it out later.
+		if (is_array($abstract))
+		{
+			list($abstract, $alias) = $this->extractAlias($abstract);
+
+			$this->alias($abstract, $alias);
+		}
+
+		unset($this->aliases[$abstract]);
+
+		// We'll check to determine if this type has been bound before, and if it has
+		// we will fire the rebound callbacks registered with the container and it
+		// can be updated with consuming classes that have gotten resolved here.
+		$bound = $this->bound($abstract);
+
+		$this->instances[$abstract] = $instance;
+
+		if ($bound)
+		{
+			$this->rebound($abstract);
+		}
+	}
+
+	/**
+	 * Alias a type to a shorter name.
+	 *
+	 * @param  string  $abstract
+	 * @param  string  $alias
+	 * @return void
+	 */
+	public function alias($abstract, $alias)
+	{
+		$this->aliases[$alias] = $abstract;
+	}
+
+	/**
+	 * Extract the type and alias from a given definition.
+	 *
+	 * @param  array  $definition
+	 * @return array
+	 */
+	protected function extractAlias(array $definition)
+	{
+		return array(key($definition), current($definition));
+	}
+
+	/**
+	 * Bind a new callback to an abstract's rebind event.
+	 *
+	 * @param  string    $abstract
+	 * @param  \Closure  $callback
+	 * @return mixed
+	 */
+	public function rebinding($abstract, Closure $callback)
+	{
+		$this->reboundCallbacks[$abstract][] = $callback;
+
+		if ($this->bound($abstract)) return $this->make($abstract);
+	}
+
+	/**
+	 * Refresh an instance on the given target and method.
+	 *
+	 * @param  string  $abstract
+	 * @param  mixed   $target
+	 * @param  string  $method
+	 * @return mixed
+	 */
+	public function refresh($abstract, $target, $method)
+	{
+		return $this->rebinding($abstract, function($app, $instance) use ($target, $method)
+		{
+			$target->{$method}($instance);
+		});
+	}
+
+	/**
+	 * Fire the "rebound" callbacks for the given abstract type.
+	 *
+	 * @param  string  $abstract
+	 * @return void
+	 */
+	protected function rebound($abstract)
+	{
+		$instance = $this->make($abstract);
+
+		foreach ($this->getReboundCallbacks($abstract) as $callback)
+		{
+			call_user_func($callback, $this, $instance);
+		}
+	}
+
+	/**
+	 * Get the rebound callbacks for a given type.
+	 *
+	 * @param  string  $abstract
+	 * @return array
+	 */
+	protected function getReboundCallbacks($abstract)
+	{
+		if (isset($this->reboundCallbacks[$abstract]))
+		{
+			return $this->reboundCallbacks[$abstract];
+		}
+
+		return array();
+	}
+
+	/**
+	 * Resolve the given type from the container.
+	 *
+	 * @param  string  $abstract
+	 * @param  array   $parameters
+	 * @return mixed
+	 */
+	public function make($abstract, $parameters = array())
+	{
+		$abstract = $this->getAlias($abstract);
+
+		// If an instance of the type is currently being managed as a singleton we'll
+		// just return an existing instance instead of instantiating new instances
+		// so the developer can keep using the same objects instance every time.
+		if (isset($this->instances[$abstract]))
+		{
+			return $this->instances[$abstract];
+		}
+
+		$concrete = $this->getConcrete($abstract);
+
+		// We're ready to instantiate an instance of the concrete type registered for
+		// the binding. This will instantiate the types, as well as resolve any of
+		// its "nested" dependencies recursively until all have gotten resolved.
+		if ($this->isBuildable($concrete, $abstract))
+		{
+			$object = $this->build($concrete, $parameters);
+		}
+		else
+		{
+			$object = $this->make($concrete, $parameters);
+		}
+
+		// If the requested type is registered as a singleton we'll want to cache off
+		// the instances in "memory" so we can return it later without creating an
+		// entirely new instance of an object on each subsequent request for it.
+		if ($this->isShared($abstract))
+		{
+			$this->instances[$abstract] = $object;
+		}
+
+		$this->fireResolvingCallbacks($abstract, $object);
+
+		$this->resolved[$abstract] = true;
+
+		return $object;
+	}
+
+	/**
+	 * Get the concrete type for a given abstract.
+	 *
+	 * @param  string  $abstract
+	 * @return mixed   $concrete
+	 */
+	protected function getConcrete($abstract)
+	{
+		// If we don't have a registered resolver or concrete for the type, we'll just
+		// assume each type is a concrete name and will attempt to resolve it as is
+		// since the container should be able to resolve concretes automatically.
+		if ( ! isset($this->bindings[$abstract]))
+		{
+			if ($this->missingLeadingSlash($abstract) && isset($this->bindings['\\'.$abstract]))
+			{
+				$abstract = '\\'.$abstract;
+			}
+
+			return $abstract;
+		}
+
+		return $this->bindings[$abstract]['concrete'];
+	}
+
+	/**
+	 * Determine if the given abstract has a leading slash.
+	 *
+	 * @param  string  $abstract
+	 * @return bool
+	 */
+	protected function missingLeadingSlash($abstract)
+	{
+		return is_string($abstract) && strpos($abstract, '\\') !== 0;
+	}
+
+	/**
+	 * Instantiate a concrete instance of the given type.
+	 *
+	 * @param  string  $concrete
+	 * @param  array   $parameters
+	 * @return mixed
+	 *
+	 * @throws BindingResolutionException
+	 */
+	public function build($concrete, $parameters = array())
+	{
+		// If the concrete type is actually a Closure, we will just execute it and
+		// hand back the results of the functions, which allows functions to be
+		// used as resolvers for more fine-tuned resolution of these objects.
+		if ($concrete instanceof Closure)
+		{
+			return $concrete($this, $parameters);
+		}
+
+		$reflector = new ReflectionClass($concrete);
+
+		// If the type is not instantiable, the developer is attempting to resolve
+		// an abstract type such as an Interface of Abstract Class and there is
+		// no binding registered for the abstractions so we need to bail out.
+		if ( ! $reflector->isInstantiable())
+		{
+			$message = "Target [$concrete] is not instantiable.";
+
+			throw new BindingResolutionException($message);
+		}
+
+		$constructor = $reflector->getConstructor();
+
+		// If there are no constructors, that means there are no dependencies then
+		// we can just resolve the instances of the objects right away, without
+		// resolving any other types or dependencies out of these containers.
+		if (is_null($constructor))
+		{
+			return new $concrete;
+		}
+
+		$dependencies = $constructor->getParameters();
+
+		// Once we have all the constructor's parameters we can create each of the
+		// dependency instances and then use the reflection instances to make a
+		// new instance of this class, injecting the created dependencies in.
+		$parameters = $this->keyParametersByArgument(
+			$dependencies, $parameters
+		);
+
+		$instances = $this->getDependencies(
+			$dependencies, $parameters
+		);
+
+		return $reflector->newInstanceArgs($instances);
+	}
+
+	/**
+	 * Resolve all of the dependencies from the ReflectionParameters.
+	 *
+	 * @param  array  $parameters
+	 * @param  array  $primitives
+	 * @return array
+	 */
+	protected function getDependencies($parameters, array $primitives = array())
+	{
+		$dependencies = array();
+
+		foreach ($parameters as $parameter)
+		{
+			$dependency = $parameter->getClass();
+
+			// If the class is null, it means the dependency is a string or some other
+			// primitive type which we can not resolve since it is not a class and
+			// we will just bomb out with an error since we have no-where to go.
+			if (array_key_exists($parameter->name, $primitives))
+			{
+				$dependencies[] = $primitives[$parameter->name];
+			}
+			elseif (is_null($dependency))
+			{
+				$dependencies[] = $this->resolveNonClass($parameter);
+			}
+			else
+			{
+				$dependencies[] = $this->resolveClass($parameter);
+			}
+		}
+
+		return (array) $dependencies;
+	}
+
+	/**
+	 * Resolve a non-class hinted dependency.
+	 *
+	 * @param  \ReflectionParameter  $parameter
+	 * @return mixed
+	 *
+	 * @throws BindingResolutionException
+	 */
+	protected function resolveNonClass(ReflectionParameter $parameter)
+	{
+		if ($parameter->isDefaultValueAvailable())
+		{
+			return $parameter->getDefaultValue();
+		}
+
+		$message = "Unresolvable dependency resolving [$parameter] in class {$parameter->getDeclaringClass()->getName()}";
+
+		throw new BindingResolutionException($message);
+	}
+
+	/**
+	 * Resolve a class based dependency from the container.
+	 *
+	 * @param  \ReflectionParameter  $parameter
+	 * @return mixed
+	 *
+	 * @throws BindingResolutionException
+	 */
+	protected function resolveClass(ReflectionParameter $parameter)
+	{
+		try
+		{
+			return $this->make($parameter->getClass()->name);
+		}
+
+		// If we can not resolve the class instance, we will check to see if the value
+		// is optional, and if it is we will return the optional parameter value as
+		// the value of the dependency, similarly to how we do this with scalars.
+		catch (BindingResolutionException $e)
+		{
+			if ($parameter->isOptional())
+			{
+				return $parameter->getDefaultValue();
+			}
+
+			throw $e;
+		}
+	}
+
+	/**
+	 * If extra parameters are passed by numeric ID, rekey them by argument name.
+	 *
+	 * @param  array  $dependencies
+	 * @param  array  $parameters
+	 * @return array
+	 */
+	protected function keyParametersByArgument(array $dependencies, array $parameters)
+	{
+		foreach ($parameters as $key => $value)
+		{
+			if (is_numeric($key))
+			{
+				unset($parameters[$key]);
+
+				$parameters[$dependencies[$key]->name] = $value;
+			}
+		}
+
+		return $parameters;
+	}
+
+	/**
+	 * Register a new resolving callback.
+	 *
+	 * @param  string    $abstract
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function resolving($abstract, Closure $callback)
+	{
+		$this->resolvingCallbacks[$abstract][] = $callback;
+	}
+
+	/**
+	 * Register a new resolving callback for all types.
+	 *
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function resolvingAny(Closure $callback)
+	{
+		$this->globalResolvingCallbacks[] = $callback;
+	}
+
+	/**
+	 * Fire all of the resolving callbacks.
+	 *
+	 * @param  string  $abstract
+	 * @param  mixed   $object
+	 * @return void
+	 */
+	protected function fireResolvingCallbacks($abstract, $object)
+	{
+		if (isset($this->resolvingCallbacks[$abstract]))
+		{
+			$this->fireCallbackArray($object, $this->resolvingCallbacks[$abstract]);
+		}
+
+		$this->fireCallbackArray($object, $this->globalResolvingCallbacks);
+	}
+
+	/**
+	 * Fire an array of callbacks with an object.
+	 *
+	 * @param  mixed  $object
+	 * @param  array  $callbacks
+	 */
+	protected function fireCallbackArray($object, array $callbacks)
+	{
+		foreach ($callbacks as $callback)
+		{
+			call_user_func($callback, $object, $this);
+		}
+	}
+
+	/**
+	 * Determine if a given type is shared.
+	 *
+	 * @param  string  $abstract
+	 * @return bool
+	 */
+	public function isShared($abstract)
+	{
+		if (isset($this->bindings[$abstract]['shared']))
+		{
+			$shared = $this->bindings[$abstract]['shared'];
+		}
+		else
+		{
+			$shared = false;
+		}
+
+		return isset($this->instances[$abstract]) || $shared === true;
+	}
+
+	/**
+	 * Determine if the given concrete is buildable.
+	 *
+	 * @param  mixed   $concrete
+	 * @param  string  $abstract
+	 * @return bool
+	 */
+	protected function isBuildable($concrete, $abstract)
+	{
+		return $concrete === $abstract || $concrete instanceof Closure;
+	}
+
+	/**
+	 * Get the alias for an abstract if available.
+	 *
+	 * @param  string  $abstract
+	 * @return string
+	 */
+	protected function getAlias($abstract)
+	{
+		return isset($this->aliases[$abstract]) ? $this->aliases[$abstract] : $abstract;
+	}
+
+	/**
+	 * Get the container's bindings.
+	 *
+	 * @return array
+	 */
+	public function getBindings()
+	{
+		return $this->bindings;
+	}
+
+	/**
+	 * Drop all of the stale instances and aliases.
+	 *
+	 * @param  string  $abstract
+	 * @return void
+	 */
+	protected function dropStaleInstances($abstract)
+	{
+		unset($this->instances[$abstract], $this->aliases[$abstract]);
+	}
+
+	/**
+	 * Remove a resolved instance from the instance cache.
+	 *
+	 * @param  string  $abstract
+	 * @return void
+	 */
+	public function forgetInstance($abstract)
+	{
+		unset($this->instances[$abstract]);
+	}
+
+	/**
+	 * Clear all of the instances from the container.
+	 *
+	 * @return void
+	 */
+	public function forgetInstances()
+	{
+		$this->instances = array();
+	}
+
+	/**
+	 * Determine if a given offset exists.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function offsetExists($key)
+	{
+		return isset($this->bindings[$key]);
+	}
+
+	/**
+	 * Get the value at a given offset.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function offsetGet($key)
+	{
+		return $this->make($key);
+	}
+
+	/**
+	 * Set the value at a given offset.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function offsetSet($key, $value)
+	{
+		// If the value is not a Closure, we will make it one. This simply gives
+		// more "drop-in" replacement functionality for the Pimple which this
+		// container's simplest functions are base modeled and built after.
+		if ( ! $value instanceof Closure)
+		{
+			$value = function() use ($value)
+			{
+				return $value;
+			};
+		}
+
+		$this->bind($key, $value);
+	}
+
+	/**
+	 * Unset the value at a given offset.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function offsetUnset($key)
+	{
+		unset($this->bindings[$key], $this->instances[$key], $this->resolved[$key]);
+	}
+
+	/**
+	 * Dynamically access container services.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function __get($key)
+	{
+		return $this[$key];
+	}
+
+	/**
+	 * Dynamically set container services.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function __set($key, $value)
+	{
+		$this[$key] = $value;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Container/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Container/composer.json b/vendor/laravel/framework/src/Illuminate/Container/composer.json
new file mode 100755
index 0000000..a2445f1
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Container/composer.json
@@ -0,0 +1,25 @@
+{
+    "name": "illuminate/container",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Container": ""
+        }
+    },
+    "target-dir": "Illuminate/Container",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cookie/CookieJar.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cookie/CookieJar.php b/vendor/laravel/framework/src/Illuminate/Cookie/CookieJar.php
new file mode 100755
index 0000000..56e531a
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cookie/CookieJar.php
@@ -0,0 +1,167 @@
+<?php namespace Illuminate\Cookie;
+
+use Symfony\Component\HttpFoundation\Cookie;
+
+class CookieJar {
+
+	/**
+	 * The default path (if specified).
+	 *
+	 * @var string
+	 */
+	protected $path = '/';
+
+	/**
+	 * The default domain (if specified).
+	 *
+	 * @var string
+	 */
+	protected $domain = null;
+
+	/**
+	 * All of the cookies queued for sending.
+	 *
+	 * @var array
+	 */
+	protected $queued = array();
+
+	/**
+	 * Create a new cookie instance.
+	 *
+	 * @param  string  $name
+	 * @param  string  $value
+	 * @param  int     $minutes
+	 * @param  string  $path
+	 * @param  string  $domain
+	 * @param  bool    $secure
+	 * @param  bool    $httpOnly
+	 * @return \Symfony\Component\HttpFoundation\Cookie
+	 */
+	public function make($name, $value, $minutes = 0, $path = null, $domain = null, $secure = false, $httpOnly = true)
+	{
+		list($path, $domain) = $this->getPathAndDomain($path, $domain);
+
+		$time = ($minutes == 0) ? 0 : time() + ($minutes * 60);
+
+		return new Cookie($name, $value, $time, $path, $domain, $secure, $httpOnly);
+	}
+
+	/**
+	 * Create a cookie that lasts "forever" (five years).
+	 *
+	 * @param  string  $name
+	 * @param  string  $value
+	 * @param  string  $path
+	 * @param  string  $domain
+	 * @param  bool    $secure
+	 * @param  bool    $httpOnly
+	 * @return \Symfony\Component\HttpFoundation\Cookie
+	 */
+	public function forever($name, $value, $path = null, $domain = null, $secure = false, $httpOnly = true)
+	{
+		return $this->make($name, $value, 2628000, $path, $domain, $secure, $httpOnly);
+	}
+
+	/**
+	 * Expire the given cookie.
+	 *
+	 * @param  string  $name
+	 * @param  string  $path
+	 * @param  string  $domain
+	 * @return \Symfony\Component\HttpFoundation\Cookie
+	 */
+	public function forget($name, $path = null, $domain = null)
+	{
+		return $this->make($name, null, -2628000, $path, $domain);
+	}
+
+	/**
+	 * Determine if a cookie has been queued.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function hasQueued($key)
+	{
+		return ! is_null($this->queued($key));
+	}
+
+	/**
+	 * Get a queued cookie instance.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return \Symfony\Component\HttpFoundation\Cookie
+	 */
+	public function queued($key, $default = null)
+	{
+		return array_get($this->queued, $key, $default);
+	}
+
+	/**
+	 * Queue a cookie to send with the next response.
+	 *
+	 * @param  mixed
+	 * @return void
+	 */
+	public function queue()
+	{
+		if (head(func_get_args()) instanceof Cookie)
+		{
+			$cookie = head(func_get_args());
+		}
+		else
+		{
+			$cookie = call_user_func_array(array($this, 'make'), func_get_args());
+		}
+
+		$this->queued[$cookie->getName()] = $cookie;
+	}
+
+	/**
+	 * Remove a cookie from the queue.
+	 *
+	 * @param  string  $name
+	 */
+	public function unqueue($name)
+	{
+		unset($this->queued[$name]);
+	}
+
+	/**
+	 * Get the path and domain, or the default values.
+	 *
+	 * @param  string  $path
+	 * @param  string  $domain
+	 * @return array
+	 */
+	protected function getPathAndDomain($path, $domain)
+	{
+		return array($path ?: $this->path, $domain ?: $this->domain);
+	}
+
+	/**
+	 * Set the default path and domain for the jar.
+	 *
+	 * @param  string  $path
+	 * @param  string  $domain
+	 * @return $this
+	 */
+	public function setDefaultPathAndDomain($path, $domain)
+	{
+		list($this->path, $this->domain) = array($path, $domain);
+
+		return $this;
+	}
+
+	/**
+	 * Get the cookies which have been queued for the next request
+	 *
+	 * @return array
+	 */
+	public function getQueuedCookies()
+	{
+		return $this->queued;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cookie/CookieServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cookie/CookieServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Cookie/CookieServiceProvider.php
new file mode 100755
index 0000000..1c7b9d0
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cookie/CookieServiceProvider.php
@@ -0,0 +1,22 @@
+<?php namespace Illuminate\Cookie;
+
+use Illuminate\Support\ServiceProvider;
+
+class CookieServiceProvider extends ServiceProvider {
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('cookie', function($app)
+		{
+			$config = $app['config']['session'];
+
+			return (new CookieJar)->setDefaultPathAndDomain($config['path'], $config['domain']);
+		});
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cookie/Guard.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cookie/Guard.php b/vendor/laravel/framework/src/Illuminate/Cookie/Guard.php
new file mode 100644
index 0000000..1aafbef
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cookie/Guard.php
@@ -0,0 +1,141 @@
+<?php namespace Illuminate\Cookie;
+
+use Illuminate\Encryption\Encrypter;
+use Illuminate\Encryption\DecryptException;
+use Symfony\Component\HttpFoundation\Cookie;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpKernel\HttpKernelInterface;
+
+class Guard implements HttpKernelInterface {
+
+	/**
+	 * The wrapped kernel implementation.
+	 *
+	 * @var \Symfony\Component\HttpKernel\HttpKernelInterface
+	 */
+	protected $app;
+
+	/**
+	 * The encrypter instance.
+	 *
+	 * @var \Illuminate\Encryption\Encrypter
+	 */
+	protected $encrypter;
+
+	/**
+	 * Create a new CookieGuard instance.
+	 *
+	 * @param  \Symfony\Component\HttpKernel\HttpKernelInterface  $app
+	 * @param  \Illuminate\Encryption\Encrypter  $encrypter
+	 * @return void
+	 */
+	public function __construct(HttpKernelInterface $app, Encrypter $encrypter)
+	{
+		$this->app = $app;
+		$this->encrypter = $encrypter;
+	}
+
+	/**
+	 * Handle the given request and get the response.
+	 *
+	 * @implements HttpKernelInterface::handle
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @param  int   $type
+	 * @param  bool  $catch
+	 * @return \Symfony\Component\HttpFoundation\Response
+	 */
+	public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
+	{
+		return $this->encrypt($this->app->handle($this->decrypt($request), $type, $catch));
+	}
+
+	/**
+	 * Decrypt the cookies on the request.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @return \Symfony\Component\HttpFoundation\Request
+	 */
+	protected function decrypt(Request $request)
+	{
+		foreach ($request->cookies as $key => $c)
+		{
+			try
+			{
+				$request->cookies->set($key, $this->decryptCookie($c));
+			}
+			catch (DecryptException $e)
+			{
+				$request->cookies->set($key, null);
+			}
+		}
+
+		return $request;
+	}
+
+	/**
+	 * Decrypt the given cookie and return the value.
+	 *
+	 * @param  string|array  $cookie
+	 * @return string|array
+	 */
+	protected function decryptCookie($cookie)
+	{
+		return is_array($cookie)
+						? $this->decryptArray($cookie)
+						: $this->encrypter->decrypt($cookie);
+	}
+
+	/**
+	 * Decrypt an array based cookie.
+	 *
+	 * @param  array  $cookie
+	 * @return array
+	 */
+	protected function decryptArray(array $cookie)
+	{
+		$decrypted = array();
+
+		foreach ($cookie as $key => $value)
+		{
+			$decrypted[$key] = $this->encrypter->decrypt($value);
+		}
+
+		return $decrypted;
+	}
+
+	/**
+	 * Encrypt the cookies on an outgoing response.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Response  $response
+	 * @return \Symfony\Component\HttpFoundation\Response
+	 */
+	protected function encrypt(Response $response)
+	{
+		foreach ($response->headers->getCookies() as $key => $c)
+		{
+			$encrypted = $this->encrypter->encrypt($c->getValue());
+
+			$response->headers->setCookie($this->duplicate($c, $encrypted));
+		}
+
+		return $response;
+	}
+
+	/**
+	 * Duplicate a cookie with a new value.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Cookie  $c
+	 * @param  mixed  $value
+	 * @return \Symfony\Component\HttpFoundation\Cookie
+	 */
+	protected function duplicate(Cookie $c, $value)
+	{
+		return new Cookie(
+			$c->getName(), $value, $c->getExpiresTime(), $c->getPath(),
+			$c->getDomain(), $c->isSecure(), $c->isHttpOnly()
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cookie/Queue.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cookie/Queue.php b/vendor/laravel/framework/src/Illuminate/Cookie/Queue.php
new file mode 100644
index 0000000..65354cb
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cookie/Queue.php
@@ -0,0 +1,57 @@
+<?php namespace Illuminate\Cookie;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpKernel\HttpKernelInterface;
+
+class Queue implements HttpKernelInterface {
+
+	/**
+	 * The wrapped kernel implementation.
+	 *
+	 * @var \Symfony\Component\HttpKernel\HttpKernelInterface
+	 */
+	protected $app;
+
+	/**
+	 * The cookie jar instance.
+	 *
+	 * @var \Illuminate\Cookie\CookieJar
+	 */
+	protected $cookies;
+
+	/**
+	 * Create a new CookieQueue instance.
+	 *
+	 * @param  \Symfony\Component\HttpKernel\HttpKernelInterface  $app
+	 * @param  \Illuminate\Cookie\CookieJar  $cookies
+	 * @return void
+	 */
+	public function __construct(HttpKernelInterface $app, CookieJar $cookies)
+	{
+		$this->app = $app;
+		$this->cookies = $cookies;
+	}
+
+	/**
+	 * Handle the given request and get the response.
+	 *
+	 * @implements HttpKernelInterface::handle
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @param  int   $type
+	 * @param  bool  $catch
+	 * @return \Symfony\Component\HttpFoundation\Response
+	 */
+	public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
+	{
+		$response = $this->app->handle($request, $type, $catch);
+
+		foreach ($this->cookies->getQueuedCookies() as $cookie)
+		{
+			$response->headers->setCookie($cookie);
+		}
+
+		return $response;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cookie/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cookie/composer.json b/vendor/laravel/framework/src/Illuminate/Cookie/composer.json
new file mode 100755
index 0000000..aa9559d
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cookie/composer.json
@@ -0,0 +1,29 @@
+{
+    "name": "illuminate/cookie",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/encryption": "4.2.*",
+        "illuminate/support": "4.2.*",
+        "symfony/http-kernel": "2.5.*",
+        "symfony/http-foundation": "2.5.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Cookie": ""
+        }
+    },
+    "target-dir": "Illuminate/Cookie",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Capsule/Manager.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Capsule/Manager.php b/vendor/laravel/framework/src/Illuminate/Database/Capsule/Manager.php
new file mode 100755
index 0000000..408e563
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Capsule/Manager.php
@@ -0,0 +1,227 @@
+<?php namespace Illuminate\Database\Capsule;
+
+use PDO;
+use Illuminate\Events\Dispatcher;
+use Illuminate\Cache\CacheManager;
+use Illuminate\Container\Container;
+use Illuminate\Database\DatabaseManager;
+use Illuminate\Database\Eloquent\Model as Eloquent;
+use Illuminate\Database\Connectors\ConnectionFactory;
+use Illuminate\Support\Traits\CapsuleManagerTrait;
+
+class Manager {
+
+	use CapsuleManagerTrait;
+
+	/**
+	 * The database manager instance.
+	 *
+	 * @var \Illuminate\Database\DatabaseManager
+	 */
+	protected $manager;
+
+	/**
+	 * Create a new database capsule manager.
+	 *
+	 * @param  \Illuminate\Container\Container|null  $container
+	 * @return void
+	 */
+	public function __construct(Container $container = null)
+	{
+		$this->setupContainer($container);
+
+		// Once we have the container setup, we will setup the default configuration
+		// options in the container "config" binding. This will make the database
+		// manager behave correctly since all the correct binding are in place.
+		$this->setupDefaultConfiguration();
+
+		$this->setupManager();
+	}
+
+	/**
+	 * Setup the default database configuration options.
+	 *
+	 * @return void
+	 */
+	protected function setupDefaultConfiguration()
+	{
+		$this->container['config']['database.fetch'] = PDO::FETCH_ASSOC;
+
+		$this->container['config']['database.default'] = 'default';
+	}
+
+	/**
+	 * Build the database manager instance.
+	 *
+	 * @return void
+	 */
+	protected function setupManager()
+	{
+		$factory = new ConnectionFactory($this->container);
+
+		$this->manager = new DatabaseManager($this->container, $factory);
+	}
+
+	/**
+	 * Get a connection instance from the global manager.
+	 *
+	 * @param  string  $connection
+	 * @return \Illuminate\Database\Connection
+	 */
+	public static function connection($connection = null)
+	{
+		return static::$instance->getConnection($connection);
+	}
+
+	/**
+	 * Get a fluent query builder instance.
+	 *
+	 * @param  string  $table
+	 * @param  string  $connection
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	public static function table($table, $connection = null)
+	{
+		return static::$instance->connection($connection)->table($table);
+	}
+
+	/**
+	 * Get a schema builder instance.
+	 *
+	 * @param  string  $connection
+	 * @return \Illuminate\Database\Schema\Builder
+	 */
+	public static function schema($connection = null)
+	{
+		return static::$instance->connection($connection)->getSchemaBuilder();
+	}
+
+	/**
+	 * Get a registered connection instance.
+	 *
+	 * @param  string  $name
+	 * @return \Illuminate\Database\Connection
+	 */
+	public function getConnection($name = null)
+	{
+		return $this->manager->connection($name);
+	}
+
+	/**
+	 * Register a connection with the manager.
+	 *
+	 * @param  array   $config
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function addConnection(array $config, $name = 'default')
+	{
+		$connections = $this->container['config']['database.connections'];
+
+		$connections[$name] = $config;
+
+		$this->container['config']['database.connections'] = $connections;
+	}
+
+	/**
+	 * Bootstrap Eloquent so it is ready for usage.
+	 *
+	 * @return void
+	 */
+	public function bootEloquent()
+	{
+		Eloquent::setConnectionResolver($this->manager);
+
+		// If we have an event dispatcher instance, we will go ahead and register it
+		// with the Eloquent ORM, allowing for model callbacks while creating and
+		// updating "model" instances; however, if it not necessary to operate.
+		if ($dispatcher = $this->getEventDispatcher())
+		{
+			Eloquent::setEventDispatcher($dispatcher);
+		}
+	}
+
+	/**
+	 * Set the fetch mode for the database connections.
+	 *
+	 * @param  int  $fetchMode
+	 * @return $this
+	 */
+	public function setFetchMode($fetchMode)
+	{
+		$this->container['config']['database.fetch'] = $fetchMode;
+
+		return $this;
+	}
+
+	/**
+	 * Get the database manager instance.
+	 *
+	 * @return \Illuminate\Database\DatabaseManager
+	 */
+	public function getDatabaseManager()
+	{
+		return $this->manager;
+	}
+
+	/**
+	 * Get the current event dispatcher instance.
+	 *
+	 * @return \Illuminate\Events\Dispatcher
+	 */
+	public function getEventDispatcher()
+	{
+		if ($this->container->bound('events'))
+		{
+			return $this->container['events'];
+		}
+	}
+
+	/**
+	 * Set the event dispatcher instance to be used by connections.
+	 *
+	 * @param  \Illuminate\Events\Dispatcher  $dispatcher
+	 * @return void
+	 */
+	public function setEventDispatcher(Dispatcher $dispatcher)
+	{
+		$this->container->instance('events', $dispatcher);
+	}
+
+	/**
+	 * Get the current cache manager instance.
+	 *
+	 * @return \Illuminate\Cache\CacheManager
+	 */
+	public function getCacheManager()
+	{
+		if ($this->container->bound('cache'))
+		{
+			return $this->container['cache'];
+		}
+	}
+
+	/**
+	 * Set the cache manager to be used by connections.
+	 *
+	 * @param  \Illuminate\Cache\CacheManager  $cache
+	 * @return void
+	 */
+	public function setCacheManager(CacheManager $cache)
+	{
+		$this->container->instance('cache', $cache);
+	}
+
+	/**
+	 * Dynamically pass methods to the default connection.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 */
+	public static function __callStatic($method, $parameters)
+	{
+		return call_user_func_array(array(static::connection(), $method), $parameters);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Connection.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Connection.php b/vendor/laravel/framework/src/Illuminate/Database/Connection.php
new file mode 100755
index 0000000..fd09205
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Connection.php
@@ -0,0 +1,1173 @@
+<?php namespace Illuminate\Database;
+
+use PDO;
+use Closure;
+use DateTime;
+use Illuminate\Events\Dispatcher;
+use Illuminate\Database\Query\Processors\Processor;
+use Doctrine\DBAL\Connection as DoctrineConnection;
+
+class Connection implements ConnectionInterface {
+
+	/**
+	 * The active PDO connection.
+	 *
+	 * @var PDO
+	 */
+	protected $pdo;
+
+	/**
+	 * The active PDO connection used for reads.
+	 *
+	 * @var PDO
+	 */
+	protected $readPdo;
+
+	/**
+	 * The reconnector instance for the connection.
+	 *
+	 * @var callable
+	 */
+	protected $reconnector;
+
+	/**
+	 * The query grammar implementation.
+	 *
+	 * @var \Illuminate\Database\Query\Grammars\Grammar
+	 */
+	protected $queryGrammar;
+
+	/**
+	 * The schema grammar implementation.
+	 *
+	 * @var \Illuminate\Database\Schema\Grammars\Grammar
+	 */
+	protected $schemaGrammar;
+
+	/**
+	 * The query post processor implementation.
+	 *
+	 * @var \Illuminate\Database\Query\Processors\Processor
+	 */
+	protected $postProcessor;
+
+	/**
+	 * The event dispatcher instance.
+	 *
+	 * @var \Illuminate\Events\Dispatcher
+	 */
+	protected $events;
+
+	/**
+	 * The paginator environment instance.
+	 *
+	 * @var \Illuminate\Pagination\Paginator
+	 */
+	protected $paginator;
+
+	/**
+	 * The cache manager instance.
+	 *
+	 * @var \Illuminate\Cache\CacheManager
+	 */
+	protected $cache;
+
+	/**
+	 * The default fetch mode of the connection.
+	 *
+	 * @var int
+	 */
+	protected $fetchMode = PDO::FETCH_ASSOC;
+
+	/**
+	 * The number of active transactions.
+	 *
+	 * @var int
+	 */
+	protected $transactions = 0;
+
+	/**
+	 * All of the queries run against the connection.
+	 *
+	 * @var array
+	 */
+	protected $queryLog = array();
+
+	/**
+	 * Indicates whether queries are being logged.
+	 *
+	 * @var bool
+	 */
+	protected $loggingQueries = true;
+
+	/**
+	 * Indicates if the connection is in a "dry run".
+	 *
+	 * @var bool
+	 */
+	protected $pretending = false;
+
+	/**
+	 * The name of the connected database.
+	 *
+	 * @var string
+	 */
+	protected $database;
+
+	/**
+	 * The table prefix for the connection.
+	 *
+	 * @var string
+	 */
+	protected $tablePrefix = '';
+
+	/**
+	 * The database connection configuration options.
+	 *
+	 * @var array
+	 */
+	protected $config = array();
+
+	/**
+	 * Create a new database connection instance.
+	 *
+	 * @param  \PDO     $pdo
+	 * @param  string   $database
+	 * @param  string   $tablePrefix
+	 * @param  array    $config
+	 * @return void
+	 */
+	public function __construct(PDO $pdo, $database = '', $tablePrefix = '', array $config = array())
+	{
+		$this->pdo = $pdo;
+
+		// First we will setup the default properties. We keep track of the DB
+		// name we are connected to since it is needed when some reflective
+		// type commands are run such as checking whether a table exists.
+		$this->database = $database;
+
+		$this->tablePrefix = $tablePrefix;
+
+		$this->config = $config;
+
+		// We need to initialize a query grammar and the query post processors
+		// which are both very important parts of the database abstractions
+		// so we initialize these to their default values while starting.
+		$this->useDefaultQueryGrammar();
+
+		$this->useDefaultPostProcessor();
+	}
+
+	/**
+	 * Set the query grammar to the default implementation.
+	 *
+	 * @return void
+	 */
+	public function useDefaultQueryGrammar()
+	{
+		$this->queryGrammar = $this->getDefaultQueryGrammar();
+	}
+
+	/**
+	 * Get the default query grammar instance.
+	 *
+	 * @return \Illuminate\Database\Query\Grammars\Grammar
+	 */
+	protected function getDefaultQueryGrammar()
+	{
+		return new Query\Grammars\Grammar;
+	}
+
+	/**
+	 * Set the schema grammar to the default implementation.
+	 *
+	 * @return void
+	 */
+	public function useDefaultSchemaGrammar()
+	{
+		$this->schemaGrammar = $this->getDefaultSchemaGrammar();
+	}
+
+	/**
+	 * Get the default schema grammar instance.
+	 *
+	 * @return \Illuminate\Database\Schema\Grammars\Grammar
+	 */
+	protected function getDefaultSchemaGrammar() {}
+
+	/**
+	 * Set the query post processor to the default implementation.
+	 *
+	 * @return void
+	 */
+	public function useDefaultPostProcessor()
+	{
+		$this->postProcessor = $this->getDefaultPostProcessor();
+	}
+
+	/**
+	 * Get the default post processor instance.
+	 *
+	 * @return \Illuminate\Database\Query\Processors\Processor
+	 */
+	protected function getDefaultPostProcessor()
+	{
+		return new Query\Processors\Processor;
+	}
+
+	/**
+	 * Get a schema builder instance for the connection.
+	 *
+	 * @return \Illuminate\Database\Schema\Builder
+	 */
+	public function getSchemaBuilder()
+	{
+		if (is_null($this->schemaGrammar)) { $this->useDefaultSchemaGrammar(); }
+
+		return new Schema\Builder($this);
+	}
+
+	/**
+	 * Begin a fluent query against a database table.
+	 *
+	 * @param  string  $table
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	public function table($table)
+	{
+		$processor = $this->getPostProcessor();
+
+		$query = new Query\Builder($this, $this->getQueryGrammar(), $processor);
+
+		return $query->from($table);
+	}
+
+	/**
+	 * Get a new raw query expression.
+	 *
+	 * @param  mixed  $value
+	 * @return \Illuminate\Database\Query\Expression
+	 */
+	public function raw($value)
+	{
+		return new Query\Expression($value);
+	}
+
+	/**
+	 * Run a select statement and return a single result.
+	 *
+	 * @param  string  $query
+	 * @param  array   $bindings
+	 * @return mixed
+	 */
+	public function selectOne($query, $bindings = array())
+	{
+		$records = $this->select($query, $bindings);
+
+		return count($records) > 0 ? reset($records) : null;
+	}
+
+	/**
+	 * Run a select statement against the database.
+	 *
+	 * @param  string  $query
+	 * @param  array   $bindings
+	 * @return array
+	 */
+	public function selectFromWriteConnection($query, $bindings = array())
+	{
+		return $this->select($query, $bindings, false);
+	}
+
+	/**
+	 * Run a select statement against the database.
+	 *
+	 * @param  string  $query
+	 * @param  array  $bindings
+	 * @param  bool  $useReadPdo
+	 * @return array
+	 */
+	public function select($query, $bindings = array(), $useReadPdo = true)
+	{
+		return $this->run($query, $bindings, function($me, $query, $bindings) use ($useReadPdo)
+		{
+			if ($me->pretending()) return array();
+
+			// For select statements, we'll simply execute the query and return an array
+			// of the database result set. Each element in the array will be a single
+			// row from the database table, and will either be an array or objects.
+			$statement = $this->getPdoForSelect($useReadPdo)->prepare($query);
+
+			$statement->execute($me->prepareBindings($bindings));
+
+			return $statement->fetchAll($me->getFetchMode());
+		});
+	}
+
+	/**
+	 * Get the PDO connection to use for a select query.
+	 *
+	 * @param  bool  $useReadPdo
+	 * @return \PDO
+	 */
+	protected function getPdoForSelect($useReadPdo = true)
+	{
+		return $useReadPdo ? $this->getReadPdo() : $this->getPdo();
+	}
+
+	/**
+	 * Run an insert statement against the database.
+	 *
+	 * @param  string  $query
+	 * @param  array   $bindings
+	 * @return bool
+	 */
+	public function insert($query, $bindings = array())
+	{
+		return $this->statement($query, $bindings);
+	}
+
+	/**
+	 * Run an update statement against the database.
+	 *
+	 * @param  string  $query
+	 * @param  array   $bindings
+	 * @return int
+	 */
+	public function update($query, $bindings = array())
+	{
+		return $this->affectingStatement($query, $bindings);
+	}
+
+	/**
+	 * Run a delete statement against the database.
+	 *
+	 * @param  string  $query
+	 * @param  array   $bindings
+	 * @return int
+	 */
+	public function delete($query, $bindings = array())
+	{
+		return $this->affectingStatement($query, $bindings);
+	}
+
+	/**
+	 * Execute an SQL statement and return the boolean result.
+	 *
+	 * @param  string  $query
+	 * @param  array   $bindings
+	 * @return bool
+	 */
+	public function statement($query, $bindings = array())
+	{
+		return $this->run($query, $bindings, function($me, $query, $bindings)
+		{
+			if ($me->pretending()) return true;
+
+			$bindings = $me->prepareBindings($bindings);
+
+			return $me->getPdo()->prepare($query)->execute($bindings);
+		});
+	}
+
+	/**
+	 * Run an SQL statement and get the number of rows affected.
+	 *
+	 * @param  string  $query
+	 * @param  array   $bindings
+	 * @return int
+	 */
+	public function affectingStatement($query, $bindings = array())
+	{
+		return $this->run($query, $bindings, function($me, $query, $bindings)
+		{
+			if ($me->pretending()) return 0;
+
+			// For update or delete statements, we want to get the number of rows affected
+			// by the statement and return that back to the developer. We'll first need
+			// to execute the statement and then we'll use PDO to fetch the affected.
+			$statement = $me->getPdo()->prepare($query);
+
+			$statement->execute($me->prepareBindings($bindings));
+
+			return $statement->rowCount();
+		});
+	}
+
+	/**
+	 * Run a raw, unprepared query against the PDO connection.
+	 *
+	 * @param  string  $query
+	 * @return bool
+	 */
+	public function unprepared($query)
+	{
+		return $this->run($query, array(), function($me, $query)
+		{
+			if ($me->pretending()) return true;
+
+			return (bool) $me->getPdo()->exec($query);
+		});
+	}
+
+	/**
+	 * Prepare the query bindings for execution.
+	 *
+	 * @param  array  $bindings
+	 * @return array
+	 */
+	public function prepareBindings(array $bindings)
+	{
+		$grammar = $this->getQueryGrammar();
+
+		foreach ($bindings as $key => $value)
+		{
+			// We need to transform all instances of the DateTime class into an actual
+			// date string. Each query grammar maintains its own date string format
+			// so we'll just ask the grammar for the format to get from the date.
+			if ($value instanceof DateTime)
+			{
+				$bindings[$key] = $value->format($grammar->getDateFormat());
+			}
+			elseif ($value === false)
+			{
+				$bindings[$key] = 0;
+			}
+		}
+
+		return $bindings;
+	}
+
+	/**
+	 * Execute a Closure within a transaction.
+	 *
+	 * @param  \Closure  $callback
+	 * @return mixed
+	 *
+	 * @throws \Exception
+	 */
+	public function transaction(Closure $callback)
+	{
+		$this->beginTransaction();
+
+		// We'll simply execute the given callback within a try / catch block
+		// and if we catch any exception we can rollback the transaction
+		// so that none of the changes are persisted to the database.
+		try
+		{
+			$result = $callback($this);
+
+			$this->commit();
+		}
+
+		// If we catch an exception, we will roll back so nothing gets messed
+		// up in the database. Then we'll re-throw the exception so it can
+		// be handled how the developer sees fit for their applications.
+		catch (\Exception $e)
+		{
+			$this->rollBack();
+
+			throw $e;
+		}
+
+		return $result;
+	}
+
+	/**
+	 * Start a new database transaction.
+	 *
+	 * @return void
+	 */
+	public function beginTransaction()
+	{
+		++$this->transactions;
+
+		if ($this->transactions == 1)
+		{
+			$this->pdo->beginTransaction();
+		}
+
+		$this->fireConnectionEvent('beganTransaction');
+	}
+
+	/**
+	 * Commit the active database transaction.
+	 *
+	 * @return void
+	 */
+	public function commit()
+	{
+		if ($this->transactions == 1) $this->pdo->commit();
+
+		--$this->transactions;
+
+		$this->fireConnectionEvent('committed');
+	}
+
+	/**
+	 * Rollback the active database transaction.
+	 *
+	 * @return void
+	 */
+	public function rollBack()
+	{
+		if ($this->transactions == 1)
+		{
+			$this->transactions = 0;
+
+			$this->pdo->rollBack();
+		}
+		else
+		{
+			--$this->transactions;
+		}
+
+		$this->fireConnectionEvent('rollingBack');
+	}
+
+	/**
+	 * Get the number of active transactions.
+	 *
+	 * @return int
+	 */
+	public function transactionLevel()
+	{
+		return $this->transactions;
+	}
+
+	/**
+	 * Execute the given callback in "dry run" mode.
+	 *
+	 * @param  \Closure  $callback
+	 * @return array
+	 */
+	public function pretend(Closure $callback)
+	{
+		$this->pretending = true;
+
+		$this->queryLog = array();
+
+		// Basically to make the database connection "pretend", we will just return
+		// the default values for all the query methods, then we will return an
+		// array of queries that were "executed" within the Closure callback.
+		$callback($this);
+
+		$this->pretending = false;
+
+		return $this->queryLog;
+	}
+
+	/**
+	 * Run a SQL statement and log its execution context.
+	 *
+	 * @param  string    $query
+	 * @param  array     $bindings
+	 * @param  \Closure  $callback
+	 * @return mixed
+	 *
+	 * @throws \Illuminate\Database\QueryException
+	 */
+	protected function run($query, $bindings, Closure $callback)
+	{
+		$this->reconnectIfMissingConnection();
+
+		$start = microtime(true);
+
+		// Here we will run this query. If an exception occurs we'll determine if it was
+		// caused by a connection that has been lost. If that is the cause, we'll try
+		// to re-establish connection and re-run the query with a fresh connection.
+		try
+		{
+			$result = $this->runQueryCallback($query, $bindings, $callback);
+		}
+		catch (QueryException $e)
+		{
+			$result = $this->tryAgainIfCausedByLostConnection(
+				$e, $query, $bindings, $callback
+			);
+		}
+
+		// Once we have run the query we will calculate the time that it took to run and
+		// then log the query, bindings, and execution time so we will report them on
+		// the event that the developer needs them. We'll log time in milliseconds.
+		$time = $this->getElapsedTime($start);
+
+		$this->logQuery($query, $bindings, $time);
+
+		return $result;
+	}
+
+	/**
+	 * Run a SQL statement.
+	 *
+	 * @param  string    $query
+	 * @param  array     $bindings
+	 * @param  \Closure  $callback
+	 * @return mixed
+	 *
+	 * @throws \Illuminate\Database\QueryException
+	 */
+	protected function runQueryCallback($query, $bindings, Closure $callback)
+	{
+		// To execute the statement, we'll simply call the callback, which will actually
+		// run the SQL against the PDO connection. Then we can calculate the time it
+		// took to execute and log the query SQL, bindings and time in our memory.
+		try
+		{
+			$result = $callback($this, $query, $bindings);
+		}
+
+		// If an exception occurs when attempting to run a query, we'll format the error
+		// message to include the bindings with SQL, which will make this exception a
+		// lot more helpful to the developer instead of just the database's errors.
+		catch (\Exception $e)
+		{
+			throw new QueryException(
+				$query, $this->prepareBindings($bindings), $e
+			);
+		}
+
+		return $result;
+	}
+
+	/**
+	 * Handle a query exception that occurred during query execution.
+	 *
+	 * @param  \Illuminate\Database\QueryException  $e
+	 * @param  string    $query
+	 * @param  array     $bindings
+	 * @param  \Closure  $callback
+	 * @return mixed
+	 *
+	 * @throws \Illuminate\Database\QueryException
+	 */
+	protected function tryAgainIfCausedByLostConnection(QueryException $e, $query, $bindings, Closure $callback)
+	{
+		if ($this->causedByLostConnection($e))
+		{
+			$this->reconnect();
+
+			return $this->runQueryCallback($query, $bindings, $callback);
+		}
+
+		throw $e;
+	}
+
+	/**
+	 * Determine if the given exception was caused by a lost connection.
+	 *
+	 * @param  \Illuminate\Database\QueryException
+	 * @return bool
+	 */
+	protected function causedByLostConnection(QueryException $e)
+	{
+		return str_contains($e->getPrevious()->getMessage(), 'server has gone away');
+	}
+
+	/**
+	 * Disconnect from the underlying PDO connection.
+	 *
+	 * @return void
+	 */
+	public function disconnect()
+	{
+		$this->setPdo(null)->setReadPdo(null);
+	}
+
+	/**
+	 * Reconnect to the database.
+	 *
+	 * @return void
+	 *
+	 * @throws \LogicException
+	 */
+	public function reconnect()
+	{
+		if (is_callable($this->reconnector))
+		{
+			return call_user_func($this->reconnector, $this);
+		}
+
+		throw new \LogicException("Lost connection and no reconnector available.");
+	}
+
+	/**
+	 * Reconnect to the database if a PDO connection is missing.
+	 *
+	 * @return void
+	 */
+	protected function reconnectIfMissingConnection()
+	{
+		if (is_null($this->getPdo()) || is_null($this->getReadPdo()))
+		{
+			$this->reconnect();
+		}
+	}
+
+	/**
+	 * Log a query in the connection's query log.
+	 *
+	 * @param  string  $query
+	 * @param  array   $bindings
+	 * @param  float|null  $time
+	 * @return void
+	 */
+	public function logQuery($query, $bindings, $time = null)
+	{
+		if (isset($this->events))
+		{
+			$this->events->fire('illuminate.query', array($query, $bindings, $time, $this->getName()));
+		}
+
+		if ( ! $this->loggingQueries) return;
+
+		$this->queryLog[] = compact('query', 'bindings', 'time');
+	}
+
+	/**
+	 * Register a database query listener with the connection.
+	 *
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function listen(Closure $callback)
+	{
+		if (isset($this->events))
+		{
+			$this->events->listen('illuminate.query', $callback);
+		}
+	}
+
+	/**
+	 * Fire an event for this connection.
+	 *
+	 * @param  string  $event
+	 * @return void
+	 */
+	protected function fireConnectionEvent($event)
+	{
+		if (isset($this->events))
+		{
+			$this->events->fire('connection.'.$this->getName().'.'.$event, $this);
+		}
+	}
+
+	/**
+	 * Get the elapsed time since a given starting point.
+	 *
+	 * @param  int    $start
+	 * @return float
+	 */
+	protected function getElapsedTime($start)
+	{
+		return round((microtime(true) - $start) * 1000, 2);
+	}
+
+	/**
+	 * Get a Doctrine Schema Column instance.
+	 *
+	 * @param  string  $table
+	 * @param  string  $column
+	 * @return \Doctrine\DBAL\Schema\Column
+	 */
+	public function getDoctrineColumn($table, $column)
+	{
+		$schema = $this->getDoctrineSchemaManager();
+
+		return $schema->listTableDetails($table)->getColumn($column);
+	}
+
+	/**
+	 * Get the Doctrine DBAL schema manager for the connection.
+	 *
+	 * @return \Doctrine\DBAL\Schema\AbstractSchemaManager
+	 */
+	public function getDoctrineSchemaManager()
+	{
+		return $this->getDoctrineDriver()->getSchemaManager($this->getDoctrineConnection());
+	}
+
+	/**
+	 * Get the Doctrine DBAL database connection instance.
+	 *
+	 * @return \Doctrine\DBAL\Connection
+	 */
+	public function getDoctrineConnection()
+	{
+		$driver = $this->getDoctrineDriver();
+
+		$data = array('pdo' => $this->pdo, 'dbname' => $this->getConfig('database'));
+
+		return new DoctrineConnection($data, $driver);
+	}
+
+	/**
+	 * Get the current PDO connection.
+	 *
+	 * @return \PDO
+	 */
+	public function getPdo()
+	{
+		return $this->pdo;
+	}
+
+	/**
+	 * Get the current PDO connection used for reading.
+	 *
+	 * @return \PDO
+	 */
+	public function getReadPdo()
+	{
+		if ($this->transactions >= 1) return $this->getPdo();
+
+		return $this->readPdo ?: $this->pdo;
+	}
+
+	/**
+	 * Set the PDO connection.
+	 *
+	 * @param  \PDO|null  $pdo
+	 * @return $this
+	 */
+	public function setPdo($pdo)
+	{
+		if ($this->transactions >= 1)
+			throw new \RuntimeException("Can't swap PDO instance while within transaction.");
+
+		$this->pdo = $pdo;
+
+		return $this;
+	}
+
+	/**
+	 * Set the PDO connection used for reading.
+	 *
+	 * @param  \PDO|null  $pdo
+	 * @return $this
+	 */
+	public function setReadPdo($pdo)
+	{
+		$this->readPdo = $pdo;
+
+		return $this;
+	}
+
+	/**
+	 * Set the reconnect instance on the connection.
+	 *
+	 * @param  callable  $reconnector
+	 * @return $this
+	 */
+	public function setReconnector(callable $reconnector)
+	{
+		$this->reconnector = $reconnector;
+
+		return $this;
+	}
+
+	/**
+	 * Get the database connection name.
+	 *
+	 * @return string|null
+	 */
+	public function getName()
+	{
+		return $this->getConfig('name');
+	}
+
+	/**
+	 * Get an option from the configuration options.
+	 *
+	 * @param  string  $option
+	 * @return mixed
+	 */
+	public function getConfig($option)
+	{
+		return array_get($this->config, $option);
+	}
+
+	/**
+	 * Get the PDO driver name.
+	 *
+	 * @return string
+	 */
+	public function getDriverName()
+	{
+		return $this->pdo->getAttribute(\PDO::ATTR_DRIVER_NAME);
+	}
+
+	/**
+	 * Get the query grammar used by the connection.
+	 *
+	 * @return \Illuminate\Database\Query\Grammars\Grammar
+	 */
+	public function getQueryGrammar()
+	{
+		return $this->queryGrammar;
+	}
+
+	/**
+	 * Set the query grammar used by the connection.
+	 *
+	 * @param  \Illuminate\Database\Query\Grammars\Grammar
+	 * @return void
+	 */
+	public function setQueryGrammar(Query\Grammars\Grammar $grammar)
+	{
+		$this->queryGrammar = $grammar;
+	}
+
+	/**
+	 * Get the schema grammar used by the connection.
+	 *
+	 * @return \Illuminate\Database\Query\Grammars\Grammar
+	 */
+	public function getSchemaGrammar()
+	{
+		return $this->schemaGrammar;
+	}
+
+	/**
+	 * Set the schema grammar used by the connection.
+	 *
+	 * @param  \Illuminate\Database\Schema\Grammars\Grammar
+	 * @return void
+	 */
+	public function setSchemaGrammar(Schema\Grammars\Grammar $grammar)
+	{
+		$this->schemaGrammar = $grammar;
+	}
+
+	/**
+	 * Get the query post processor used by the connection.
+	 *
+	 * @return \Illuminate\Database\Query\Processors\Processor
+	 */
+	public function getPostProcessor()
+	{
+		return $this->postProcessor;
+	}
+
+	/**
+	 * Set the query post processor used by the connection.
+	 *
+	 * @param  \Illuminate\Database\Query\Processors\Processor
+	 * @return void
+	 */
+	public function setPostProcessor(Processor $processor)
+	{
+		$this->postProcessor = $processor;
+	}
+
+	/**
+	 * Get the event dispatcher used by the connection.
+	 *
+	 * @return \Illuminate\Events\Dispatcher
+	 */
+	public function getEventDispatcher()
+	{
+		return $this->events;
+	}
+
+	/**
+	 * Set the event dispatcher instance on the connection.
+	 *
+	 * @param  \Illuminate\Events\Dispatcher
+	 * @return void
+	 */
+	public function setEventDispatcher(Dispatcher $events)
+	{
+		$this->events = $events;
+	}
+
+	/**
+	 * Get the paginator environment instance.
+	 *
+	 * @return \Illuminate\Pagination\Factory
+	 */
+	public function getPaginator()
+	{
+		if ($this->paginator instanceof Closure)
+		{
+			$this->paginator = call_user_func($this->paginator);
+		}
+
+		return $this->paginator;
+	}
+
+	/**
+	 * Set the pagination environment instance.
+	 *
+	 * @param  \Illuminate\Pagination\Factory|\Closure  $paginator
+	 * @return void
+	 */
+	public function setPaginator($paginator)
+	{
+		$this->paginator = $paginator;
+	}
+
+	/**
+	 * Get the cache manager instance.
+	 *
+	 * @return \Illuminate\Cache\CacheManager
+	 */
+	public function getCacheManager()
+	{
+		if ($this->cache instanceof Closure)
+		{
+			$this->cache = call_user_func($this->cache);
+		}
+
+		return $this->cache;
+	}
+
+	/**
+	 * Set the cache manager instance on the connection.
+	 *
+	 * @param  \Illuminate\Cache\CacheManager|\Closure  $cache
+	 * @return void
+	 */
+	public function setCacheManager($cache)
+	{
+		$this->cache = $cache;
+	}
+
+	/**
+	 * Determine if the connection in a "dry run".
+	 *
+	 * @return bool
+	 */
+	public function pretending()
+	{
+		return $this->pretending === true;
+	}
+
+	/**
+	 * Get the default fetch mode for the connection.
+	 *
+	 * @return int
+	 */
+	public function getFetchMode()
+	{
+		return $this->fetchMode;
+	}
+
+	/**
+	 * Set the default fetch mode for the connection.
+	 *
+	 * @param  int  $fetchMode
+	 * @return int
+	 */
+	public function setFetchMode($fetchMode)
+	{
+		$this->fetchMode = $fetchMode;
+	}
+
+	/**
+	 * Get the connection query log.
+	 *
+	 * @return array
+	 */
+	public function getQueryLog()
+	{
+		return $this->queryLog;
+	}
+
+	/**
+	 * Clear the query log.
+	 *
+	 * @return void
+	 */
+	public function flushQueryLog()
+	{
+		$this->queryLog = array();
+	}
+
+	/**
+	 * Enable the query log on the connection.
+	 *
+	 * @return void
+	 */
+	public function enableQueryLog()
+	{
+		$this->loggingQueries = true;
+	}
+
+	/**
+	 * Disable the query log on the connection.
+	 *
+	 * @return void
+	 */
+	public function disableQueryLog()
+	{
+		$this->loggingQueries = false;
+	}
+
+	/**
+	 * Determine whether we're logging queries.
+	 *
+	 * @return bool
+	 */
+	public function logging()
+	{
+		return $this->loggingQueries;
+	}
+
+	/**
+	 * Get the name of the connected database.
+	 *
+	 * @return string
+	 */
+	public function getDatabaseName()
+	{
+		return $this->database;
+	}
+
+	/**
+	 * Set the name of the connected database.
+	 *
+	 * @param  string  $database
+	 * @return string
+	 */
+	public function setDatabaseName($database)
+	{
+		$this->database = $database;
+	}
+
+	/**
+	 * Get the table prefix for the connection.
+	 *
+	 * @return string
+	 */
+	public function getTablePrefix()
+	{
+		return $this->tablePrefix;
+	}
+
+	/**
+	 * Set the table prefix in use by the connection.
+	 *
+	 * @param  string  $prefix
+	 * @return void
+	 */
+	public function setTablePrefix($prefix)
+	{
+		$this->tablePrefix = $prefix;
+
+		$this->getQueryGrammar()->setTablePrefix($prefix);
+	}
+
+	/**
+	 * Set the table prefix and return the grammar.
+	 *
+	 * @param  \Illuminate\Database\Grammar  $grammar
+	 * @return \Illuminate\Database\Grammar
+	 */
+	public function withTablePrefix(Grammar $grammar)
+	{
+		$grammar->setTablePrefix($this->tablePrefix);
+
+		return $grammar;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/ConnectionInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/ConnectionInterface.php b/vendor/laravel/framework/src/Illuminate/Database/ConnectionInterface.php
new file mode 100755
index 0000000..48d69b3
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/ConnectionInterface.php
@@ -0,0 +1,148 @@
+<?php namespace Illuminate\Database;
+
+use Closure;
+
+interface ConnectionInterface {
+
+	/**
+	 * Begin a fluent query against a database table.
+	 *
+	 * @param  string  $table
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	public function table($table);
+
+	/**
+	 * Get a new raw query expression.
+	 *
+	 * @param  mixed  $value
+	 * @return \Illuminate\Database\Query\Expression
+	 */
+	public function raw($value);
+
+	/**
+	 * Run a select statement and return a single result.
+	 *
+	 * @param  string  $query
+	 * @param  array   $bindings
+	 * @return mixed
+	 */
+	public function selectOne($query, $bindings = array());
+
+	/**
+	 * Run a select statement against the database.
+	 *
+	 * @param  string  $query
+	 * @param  array   $bindings
+	 * @return array
+	 */
+	public function select($query, $bindings = array());
+
+	/**
+	 * Run an insert statement against the database.
+	 *
+	 * @param  string  $query
+	 * @param  array   $bindings
+	 * @return bool
+	 */
+	public function insert($query, $bindings = array());
+
+	/**
+	 * Run an update statement against the database.
+	 *
+	 * @param  string  $query
+	 * @param  array   $bindings
+	 * @return int
+	 */
+	public function update($query, $bindings = array());
+
+	/**
+	 * Run a delete statement against the database.
+	 *
+	 * @param  string  $query
+	 * @param  array   $bindings
+	 * @return int
+	 */
+	public function delete($query, $bindings = array());
+
+	/**
+	 * Execute an SQL statement and return the boolean result.
+	 *
+	 * @param  string  $query
+	 * @param  array   $bindings
+	 * @return bool
+	 */
+	public function statement($query, $bindings = array());
+
+	/**
+	 * Run an SQL statement and get the number of rows affected.
+	 *
+	 * @param  string  $query
+	 * @param  array   $bindings
+	 * @return int
+	 */
+	public function affectingStatement($query, $bindings = array());
+
+	/**
+	 * Run a raw, unprepared query against the PDO connection.
+	 *
+	 * @param  string  $query
+	 * @return bool
+	 */
+	public function unprepared($query);
+
+	/**
+	 * Prepare the query bindings for execution.
+	 *
+	 * @param  array  $bindings
+	 * @return array
+	 */
+	public function prepareBindings(array $bindings);
+
+	/**
+	 * Execute a Closure within a transaction.
+	 *
+	 * @param  \Closure  $callback
+	 * @return mixed
+	 *
+	 * @throws \Exception
+	 */
+	public function transaction(Closure $callback);
+
+	/**
+	 * Start a new database transaction.
+	 *
+	 * @return void
+	 */
+	public function beginTransaction();
+
+	/**
+	 * Commit the active database transaction.
+	 *
+	 * @return void
+	 */
+	public function commit();
+
+	/**
+	 * Rollback the active database transaction.
+	 *
+	 * @return void
+	 */
+	public function rollBack();
+
+	/**
+	 * Get the number of active transactions.
+	 *
+	 * @return int
+	 */
+	public function transactionLevel();
+
+	/**
+	 * Execute the given callback in "dry run" mode.
+	 *
+	 * @param  \Closure  $callback
+	 * @return array
+	 */
+	public function pretend(Closure $callback);
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/ConnectionResolver.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/ConnectionResolver.php b/vendor/laravel/framework/src/Illuminate/Database/ConnectionResolver.php
new file mode 100755
index 0000000..05c28e8
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/ConnectionResolver.php
@@ -0,0 +1,90 @@
+<?php namespace Illuminate\Database;
+
+class ConnectionResolver implements ConnectionResolverInterface {
+
+	/**
+	 * All of the registered connections.
+	 *
+	 * @var array
+	 */
+	protected $connections = array();
+
+	/**
+	 * The default connection name.
+	 *
+	 * @var string
+	 */
+	protected $default;
+
+	/**
+	 * Create a new connection resolver instance.
+	 *
+	 * @param  array  $connections
+	 * @return void
+	 */
+	public function __construct(array $connections = array())
+	{
+		foreach ($connections as $name => $connection)
+		{
+			$this->addConnection($name, $connection);
+		}
+	}
+
+	/**
+	 * Get a database connection instance.
+	 *
+	 * @param  string  $name
+	 * @return \Illuminate\Database\Connection
+	 */
+	public function connection($name = null)
+	{
+		if (is_null($name)) $name = $this->getDefaultConnection();
+
+		return $this->connections[$name];
+	}
+
+	/**
+	 * Add a connection to the resolver.
+	 *
+	 * @param  string  $name
+	 * @param  \Illuminate\Database\Connection  $connection
+	 * @return void
+	 */
+	public function addConnection($name, Connection $connection)
+	{
+		$this->connections[$name] = $connection;
+	}
+
+	/**
+	 * Check if a connection has been registered.
+	 *
+	 * @param  string  $name
+	 * @return bool
+	 */
+	public function hasConnection($name)
+	{
+		return isset($this->connections[$name]);
+	}
+
+	/**
+	 * Get the default connection name.
+	 *
+	 * @return string
+	 */
+	public function getDefaultConnection()
+	{
+		return $this->default;
+	}
+
+	/**
+	 * Set the default connection name.
+	 *
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function setDefaultConnection($name)
+	{
+		$this->default = $name;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/ConnectionResolverInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/ConnectionResolverInterface.php b/vendor/laravel/framework/src/Illuminate/Database/ConnectionResolverInterface.php
new file mode 100755
index 0000000..46abdc0
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/ConnectionResolverInterface.php
@@ -0,0 +1,28 @@
+<?php namespace Illuminate\Database;
+
+interface ConnectionResolverInterface {
+
+	/**
+	 * Get a database connection instance.
+	 *
+	 * @param  string  $name
+	 * @return \Illuminate\Database\Connection
+	 */
+	public function connection($name = null);
+
+	/**
+	 * Get the default connection name.
+	 *
+	 * @return string
+	 */
+	public function getDefaultConnection();
+
+	/**
+	 * Set the default connection name.
+	 *
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function setDefaultConnection($name);
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php b/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php
new file mode 100755
index 0000000..17df20c
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php
@@ -0,0 +1,230 @@
+<?php namespace Illuminate\Database\Connectors;
+
+use PDO;
+use Illuminate\Container\Container;
+use Illuminate\Database\MySqlConnection;
+use Illuminate\Database\SQLiteConnection;
+use Illuminate\Database\PostgresConnection;
+use Illuminate\Database\SqlServerConnection;
+
+class ConnectionFactory {
+
+	/**
+	 * The IoC container instance.
+	 *
+	 * @var \Illuminate\Container\Container
+	 */
+	protected $container;
+
+	/**
+	 * Create a new connection factory instance.
+	 *
+	 * @param  \Illuminate\Container\Container  $container
+	 * @return void
+	 */
+	public function __construct(Container $container)
+	{
+		$this->container = $container;
+	}
+
+	/**
+	 * Establish a PDO connection based on the configuration.
+	 *
+	 * @param  array   $config
+	 * @param  string  $name
+	 * @return \Illuminate\Database\Connection
+	 */
+	public function make(array $config, $name = null)
+	{
+		$config = $this->parseConfig($config, $name);
+
+		if (isset($config['read']))
+		{
+			return $this->createReadWriteConnection($config);
+		}
+
+		return $this->createSingleConnection($config);
+	}
+
+	/**
+	 * Create a single database connection instance.
+	 *
+	 * @param  array  $config
+	 * @return \Illuminate\Database\Connection
+	 */
+	protected function createSingleConnection(array $config)
+	{
+		$pdo = $this->createConnector($config)->connect($config);
+
+		return $this->createConnection($config['driver'], $pdo, $config['database'], $config['prefix'], $config);
+	}
+
+	/**
+	 * Create a single database connection instance.
+	 *
+	 * @param  array  $config
+	 * @return \Illuminate\Database\Connection
+	 */
+	protected function createReadWriteConnection(array $config)
+	{
+		$connection = $this->createSingleConnection($this->getWriteConfig($config));
+
+		return $connection->setReadPdo($this->createReadPdo($config));
+	}
+
+	/**
+	 * Create a new PDO instance for reading.
+	 *
+	 * @param  array  $config
+	 * @return \PDO
+	 */
+	protected function createReadPdo(array $config)
+	{
+		$readConfig = $this->getReadConfig($config);
+
+		return $this->createConnector($readConfig)->connect($readConfig);
+	}
+
+	/**
+	 * Get the read configuration for a read / write connection.
+	 *
+	 * @param  array  $config
+	 * @return array
+	 */
+	protected function getReadConfig(array $config)
+	{
+		$readConfig = $this->getReadWriteConfig($config, 'read');
+
+		return $this->mergeReadWriteConfig($config, $readConfig);
+	}
+
+	/**
+	 * Get the read configuration for a read / write connection.
+	 *
+	 * @param  array  $config
+	 * @return array
+	 */
+	protected function getWriteConfig(array $config)
+	{
+		$writeConfig = $this->getReadWriteConfig($config, 'write');
+
+		return $this->mergeReadWriteConfig($config, $writeConfig);
+	}
+
+	/**
+	 * Get a read / write level configuration.
+	 *
+	 * @param  array   $config
+	 * @param  string  $type
+	 * @return array
+	 */
+	protected function getReadWriteConfig(array $config, $type)
+	{
+		if (isset($config[$type][0]))
+		{
+			return $config[$type][array_rand($config[$type])];
+		}
+
+		return $config[$type];
+	}
+
+	/**
+	 * Merge a configuration for a read / write connection.
+	 *
+	 * @param  array  $config
+	 * @param  array  $merge
+	 * @return array
+	 */
+	protected function mergeReadWriteConfig(array $config, array $merge)
+	{
+		return array_except(array_merge($config, $merge), array('read', 'write'));
+	}
+
+	/**
+	 * Parse and prepare the database configuration.
+	 *
+	 * @param  array   $config
+	 * @param  string  $name
+	 * @return array
+	 */
+	protected function parseConfig(array $config, $name)
+	{
+		return array_add(array_add($config, 'prefix', ''), 'name', $name);
+	}
+
+	/**
+	 * Create a connector instance based on the configuration.
+	 *
+	 * @param  array  $config
+	 * @return \Illuminate\Database\Connectors\ConnectorInterface
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	public function createConnector(array $config)
+	{
+		if ( ! isset($config['driver']))
+		{
+			throw new \InvalidArgumentException("A driver must be specified.");
+		}
+
+		if ($this->container->bound($key = "db.connector.{$config['driver']}"))
+		{
+			return $this->container->make($key);
+		}
+
+		switch ($config['driver'])
+		{
+			case 'mysql':
+				return new MySqlConnector;
+
+			case 'pgsql':
+				return new PostgresConnector;
+
+			case 'sqlite':
+				return new SQLiteConnector;
+
+			case 'sqlsrv':
+				return new SqlServerConnector;
+		}
+
+		throw new \InvalidArgumentException("Unsupported driver [{$config['driver']}]");
+	}
+
+	/**
+	 * Create a new connection instance.
+	 *
+	 * @param  string   $driver
+	 * @param  \PDO     $connection
+	 * @param  string   $database
+	 * @param  string   $prefix
+	 * @param  array    $config
+	 * @return \Illuminate\Database\Connection
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	protected function createConnection($driver, PDO $connection, $database, $prefix = '', array $config = array())
+	{
+		if ($this->container->bound($key = "db.connection.{$driver}"))
+		{
+			return $this->container->make($key, array($connection, $database, $prefix, $config));
+		}
+
+		switch ($driver)
+		{
+			case 'mysql':
+				return new MySqlConnection($connection, $database, $prefix, $config);
+
+			case 'pgsql':
+				return new PostgresConnection($connection, $database, $prefix, $config);
+
+			case 'sqlite':
+				return new SQLiteConnection($connection, $database, $prefix, $config);
+
+			case 'sqlsrv':
+				return new SqlServerConnection($connection, $database, $prefix, $config);
+		}
+
+		throw new \InvalidArgumentException("Unsupported driver [$driver]");
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php b/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php
new file mode 100755
index 0000000..0c16093
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php
@@ -0,0 +1,71 @@
+<?php namespace Illuminate\Database\Connectors;
+
+use PDO;
+
+class Connector {
+
+	/**
+	 * The default PDO connection options.
+	 *
+	 * @var array
+	 */
+	protected $options = array(
+			PDO::ATTR_CASE => PDO::CASE_NATURAL,
+			PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+			PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
+			PDO::ATTR_STRINGIFY_FETCHES => false,
+			PDO::ATTR_EMULATE_PREPARES => false,
+	);
+
+	/**
+	 * Get the PDO options based on the configuration.
+	 *
+	 * @param  array  $config
+	 * @return array
+	 */
+	public function getOptions(array $config)
+	{
+		$options = array_get($config, 'options', array());
+
+		return array_diff_key($this->options, $options) + $options;
+	}
+
+	/**
+	 * Create a new PDO connection.
+	 *
+	 * @param  string  $dsn
+	 * @param  array   $config
+	 * @param  array   $options
+	 * @return \PDO
+	 */
+	public function createConnection($dsn, array $config, array $options)
+	{
+		$username = array_get($config, 'username');
+
+		$password = array_get($config, 'password');
+
+		return new PDO($dsn, $username, $password, $options);
+	}
+
+	/**
+	 * Get the default PDO connection options.
+	 *
+	 * @return array
+	 */
+	public function getDefaultOptions()
+	{
+		return $this->options;
+	}
+
+	/**
+	 * Set the default PDO connection options.
+	 *
+	 * @param  array  $options
+	 * @return void
+	 */
+	public function setDefaultOptions(array $options)
+	{
+		$this->options = $options;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectorInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectorInterface.php b/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectorInterface.php
new file mode 100755
index 0000000..c2c76a5
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectorInterface.php
@@ -0,0 +1,13 @@
+<?php namespace Illuminate\Database\Connectors;
+
+interface ConnectorInterface {
+
+	/**
+	 * Establish a database connection.
+	 *
+	 * @param  array  $config
+	 * @return \PDO
+	 */
+	public function connect(array $config);
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php b/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php
new file mode 100755
index 0000000..b1804ec
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php
@@ -0,0 +1,101 @@
+<?php namespace Illuminate\Database\Connectors;
+
+class MySqlConnector extends Connector implements ConnectorInterface {
+
+	/**
+	 * Establish a database connection.
+	 *
+	 * @param  array  $config
+	 * @return \PDO
+	 */
+	public function connect(array $config)
+	{
+		$dsn = $this->getDsn($config);
+
+		$options = $this->getOptions($config);
+
+		// We need to grab the PDO options that should be used while making the brand
+		// new connection instance. The PDO options control various aspects of the
+		// connection's behavior, and some might be specified by the developers.
+		$connection = $this->createConnection($dsn, $config, $options);
+
+		if (isset($config['unix_socket']))
+		{
+			$connection->exec("use `{$config['database']}`;");
+		}
+
+		$collation = $config['collation'];
+
+		// Next we will set the "names" and "collation" on the clients connections so
+		// a correct character set will be used by this client. The collation also
+		// is set on the server but needs to be set here on this client objects.
+		$charset = $config['charset'];
+
+		$names = "set names '$charset'".
+			( ! is_null($collation) ? " collate '$collation'" : '');
+
+		$connection->prepare($names)->execute();
+
+		// If the "strict" option has been configured for the connection we'll enable
+		// strict mode on all of these tables. This enforces some extra rules when
+		// using the MySQL database system and is a quicker way to enforce them.
+		if (isset($config['strict']) && $config['strict'])
+		{
+			$connection->prepare("set session sql_mode='STRICT_ALL_TABLES'")->execute();
+		}
+
+		return $connection;
+	}
+
+	/**
+	 * Create a DSN string from a configuration. Chooses socket or host/port based on
+	 * the 'unix_socket' config value
+	 *
+	 * @param  array   $config
+	 * @return string
+	 */
+	protected function getDsn(array $config)
+	{
+		return $this->configHasSocket($config) ? $this->getSocketDsn($config) : $this->getHostDsn($config);
+	}
+
+	/**
+	 * Determine if the given configuration array has a UNIX socket value.
+	 *
+	 * @param  array  $config
+	 * @return bool
+	 */
+	protected function configHasSocket(array $config)
+	{
+		return isset($config['unix_socket']) && ! empty($config['unix_socket']);
+	}
+
+	/**
+	 * Get the DSN string for a socket configuration.
+	 *
+	 * @param  array  $config
+	 * @return string
+	 */
+	protected function getSocketDsn(array $config)
+	{
+		extract($config);
+
+		return "mysql:unix_socket={$config['unix_socket']};dbname={$database}";
+	}
+
+	/**
+	 * Get the DSN string for a host / port configuration.
+	 *
+	 * @param  array  $config
+	 * @return string
+	 */
+	protected function getHostDsn(array $config)
+	{
+		extract($config);
+
+		return isset($config['port'])
+                        ? "mysql:host={$host};port={$port};dbname={$database}"
+                        : "mysql:host={$host};dbname={$database}";
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Connectors/PostgresConnector.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Connectors/PostgresConnector.php b/vendor/laravel/framework/src/Illuminate/Database/Connectors/PostgresConnector.php
new file mode 100755
index 0000000..39b50e3
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Connectors/PostgresConnector.php
@@ -0,0 +1,86 @@
+<?php namespace Illuminate\Database\Connectors;
+
+use PDO;
+
+class PostgresConnector extends Connector implements ConnectorInterface {
+
+	/**
+	 * The default PDO connection options.
+	 *
+	 * @var array
+	 */
+	protected $options = array(
+			PDO::ATTR_CASE => PDO::CASE_NATURAL,
+			PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+			PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
+			PDO::ATTR_STRINGIFY_FETCHES => false,
+	);
+
+	/**
+	 * Establish a database connection.
+	 *
+	 * @param  array  $config
+	 * @return \PDO
+	 */
+	public function connect(array $config)
+	{
+		// First we'll create the basic DSN and connection instance connecting to the
+		// using the configuration option specified by the developer. We will also
+		// set the default character set on the connections to UTF-8 by default.
+		$dsn = $this->getDsn($config);
+
+		$options = $this->getOptions($config);
+
+		$connection = $this->createConnection($dsn, $config, $options);
+
+		$charset = $config['charset'];
+
+		$connection->prepare("set names '$charset'")->execute();
+
+		// Unlike MySQL, Postgres allows the concept of "schema" and a default schema
+		// may have been specified on the connections. If that is the case we will
+		// set the default schema search paths to the specified database schema.
+		if (isset($config['schema']))
+		{
+			$schema = $config['schema'];
+
+			$connection->prepare("set search_path to {$schema}")->execute();
+		}
+
+		return $connection;
+	}
+
+	/**
+	 * Create a DSN string from a configuration.
+	 *
+	 * @param  array   $config
+	 * @return string
+	 */
+	protected function getDsn(array $config)
+	{
+		// First we will create the basic DSN setup as well as the port if it is in
+		// in the configuration options. This will give us the basic DSN we will
+		// need to establish the PDO connections and return them back for use.
+		extract($config);
+
+		$host = isset($host) ? "host={$host};" : '';
+
+		$dsn = "pgsql:{$host}dbname={$database}";
+
+		// If a port was specified, we will add it to this Postgres DSN connections
+		// format. Once we have done that we are ready to return this connection
+		// string back out for usage, as this has been fully constructed here.
+		if (isset($config['port']))
+		{
+			$dsn .= ";port={$port}";
+		}
+
+		if (isset($config['sslmode']))
+		{
+			$dsn .= ";sslmode={$sslmode}";
+		}
+
+		return $dsn;
+	}
+
+}


[31/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/js/datetimepicker.js
----------------------------------------------------------------------
diff --git a/public/js/datetimepicker.js b/public/js/datetimepicker.js
new file mode 100644
index 0000000..cdba4b1
--- /dev/null
+++ b/public/js/datetimepicker.js
@@ -0,0 +1 @@
+!function(a,b){"use strict";if("function"==typeof define&&define.amd)define(["jquery","moment"],b);else if("object"==typeof exports)b(require("jquery"),require("moment"));else{if(!jQuery)throw new Error("bootstrap-datetimepicker requires jQuery to be loaded first");if(!moment)throw new Error("bootstrap-datetimepicker requires moment.js to be loaded first");b(a.jQuery,moment)}}(this,function(a,b){"use strict";if("undefined"==typeof b)throw new Error("momentjs is required");var c=0,d=function(d,e){var f,g=a.fn.datetimepicker.defaults,h={time:"glyphicon glyphicon-time",date:"glyphicon glyphicon-calendar",up:"glyphicon glyphicon-chevron-up",down:"glyphicon glyphicon-chevron-down"},i=this,j=!1,k=function(){var f,j,k=!1;if(i.options=a.extend({},g,e),i.options.icons=a.extend({},h,i.options.icons),i.element=a(d),m(),!i.options.pickTime&&!i.options.pickDate)throw new Error("Must choose at least one picker");if(i.id=c++,b.locale(i.options.language),i.date=b(),i.unset=!1,i.isInput=i.element.is
 ("input"),i.component=!1,i.element.hasClass("input-group")&&(i.component=i.element.find(0===i.element.find(".datepickerbutton").size()?'[class^="input-group-"]':".datepickerbutton")),i.format=i.options.format,f=b().localeData(),i.format||(i.format=i.options.pickDate?f.longDateFormat("L"):"",i.options.pickDate&&i.options.pickTime&&(i.format+=" "),i.format+=i.options.pickTime?f.longDateFormat("LT"):"",i.options.useSeconds&&(-1!==f.longDateFormat("LT").indexOf(" A")?i.format=i.format.split(" A")[0]+":ss A":i.format+=":ss")),i.use24hours=i.format.toLowerCase().indexOf("a")<0&&i.format.indexOf("h")<0,i.component&&(k=i.component.find("span")),i.options.pickTime&&k&&k.addClass(i.options.icons.time),i.options.pickDate&&k&&(k.removeClass(i.options.icons.time),k.addClass(i.options.icons.date)),i.options.widgetParent="string"==typeof i.options.widgetParent&&i.options.widgetParent||i.element.parents().filter(function(){return"scroll"===a(this).css("overflow-y")}).get(0)||"body",i.widget=a(Q()).
 appendTo(i.options.widgetParent),i.minViewMode=i.options.minViewMode||0,"string"==typeof i.minViewMode)switch(i.minViewMode){case"months":i.minViewMode=1;break;case"years":i.minViewMode=2;break;default:i.minViewMode=0}if(i.viewMode=i.options.viewMode||0,"string"==typeof i.viewMode)switch(i.viewMode){case"months":i.viewMode=1;break;case"years":i.viewMode=2;break;default:i.viewMode=0}i.viewMode=Math.max(i.viewMode,i.minViewMode),i.options.disabledDates=O(i.options.disabledDates),i.options.enabledDates=O(i.options.enabledDates),i.startViewMode=i.viewMode,i.setMinDate(i.options.minDate),i.setMaxDate(i.options.maxDate),r(),s(),u(),v(),w(),q(),E(),l().prop("disabled")||F(),""!==i.options.defaultDate&&""===l().val()&&i.setValue(i.options.defaultDate),1!==i.options.minuteStepping&&(j=i.options.minuteStepping,i.date.minutes(Math.round(i.date.minutes()/j)*j%60).seconds(0))},l=function(){var a;if(i.isInput)return i.element;if(a=i.element.find(".datepickerinput"),0===a.size())a=i.element.find("
 input");else if(!a.is("input"))throw new Error('CSS class "datepickerinput" cannot be applied to non input element');return a},m=function(){var a;a=i.element.is("input")?i.element.data():i.element.find("input").data(),void 0!==a.dateFormat&&(i.options.format=a.dateFormat),void 0!==a.datePickdate&&(i.options.pickDate=a.datePickdate),void 0!==a.datePicktime&&(i.options.pickTime=a.datePicktime),void 0!==a.dateUseminutes&&(i.options.useMinutes=a.dateUseminutes),void 0!==a.dateUseseconds&&(i.options.useSeconds=a.dateUseseconds),void 0!==a.dateUsecurrent&&(i.options.useCurrent=a.dateUsecurrent),void 0!==a.calendarWeeks&&(i.options.calendarWeeks=a.calendarWeeks),void 0!==a.dateMinutestepping&&(i.options.minuteStepping=a.dateMinutestepping),void 0!==a.dateMindate&&(i.options.minDate=a.dateMindate),void 0!==a.dateMaxdate&&(i.options.maxDate=a.dateMaxdate),void 0!==a.dateShowtoday&&(i.options.showToday=a.dateShowtoday),void 0!==a.dateCollapse&&(i.options.collapse=a.dateCollapse),void 0!==a.da
 teLanguage&&(i.options.language=a.dateLanguage),void 0!==a.dateDefaultdate&&(i.options.defaultDate=a.dateDefaultdate),void 0!==a.dateDisableddates&&(i.options.disabledDates=a.dateDisableddates),void 0!==a.dateEnableddates&&(i.options.enabledDates=a.dateEnableddates),void 0!==a.dateIcons&&(i.options.icons=a.dateIcons),void 0!==a.dateUsestrict&&(i.options.useStrict=a.dateUsestrict),void 0!==a.dateDirection&&(i.options.direction=a.dateDirection),void 0!==a.dateSidebyside&&(i.options.sideBySide=a.dateSidebyside),void 0!==a.dateDaysofweekdisabled&&(i.options.daysOfWeekDisabled=a.dateDaysofweekdisabled)},n=function(){var b,c="absolute",d=i.component?i.component.offset():i.element.offset(),e=a(window);i.width=i.component?i.component.outerWidth():i.element.outerWidth(),d.top=d.top+i.element.outerHeight(),"up"===i.options.direction?b="top":"bottom"===i.options.direction?b="bottom":"auto"===i.options.direction&&(b=d.top+i.widget.height()>e.height()+e.scrollTop()&&i.widget.height()+i.element.o
 uterHeight()<d.top?"top":"bottom"),"top"===b?(d.bottom=e.height()-d.top+i.element.outerHeight()+3,i.widget.addClass("top").removeClass("bottom")):(d.top+=1,i.widget.addClass("bottom").removeClass("top")),void 0!==i.options.width&&i.widget.width(i.options.width),"left"===i.options.orientation&&(i.widget.addClass("left-oriented"),d.left=d.left-i.widget.width()+20),J()&&(c="fixed",d.top-=e.scrollTop(),d.left-=e.scrollLeft()),e.width()<d.left+i.widget.outerWidth()?(d.right=e.width()-d.left-i.width,d.left="auto",i.widget.addClass("pull-right")):(d.right="auto",i.widget.removeClass("pull-right")),i.widget.css("top"===b?{position:c,bottom:d.bottom,top:"auto",left:d.left,right:d.right}:{position:c,top:d.top,bottom:"auto",left:d.left,right:d.right})},o=function(a,c){(!b(i.date).isSame(b(a))||j)&&(j=!1,i.element.trigger({type:"dp.change",date:b(i.date),oldDate:b(a)}),"change"!==c&&i.element.change())},p=function(a){j=!0,i.element.trigger({type:"dp.error",date:b(a,i.format,i.options.useStrict)
 })},q=function(a){b.locale(i.options.language);var c=a;c||(c=l().val(),c&&(i.date=b(c,i.format,i.options.useStrict)),i.date||(i.date=b())),i.viewDate=b(i.date).startOf("month"),t(),x()},r=function(){b.locale(i.options.language);var c,d=a("<tr>"),e=b.weekdaysMin();if(i.options.calendarWeeks===!0&&d.append('<th class="cw">#</th>'),0===b().localeData()._week.dow)for(c=0;7>c;c++)d.append('<th class="dow">'+e[c]+"</th>");else for(c=1;8>c;c++)d.append(7===c?'<th class="dow">'+e[0]+"</th>":'<th class="dow">'+e[c]+"</th>");i.widget.find(".datepicker-days thead").append(d)},s=function(){b.locale(i.options.language);var a,c="",d=b.monthsShort();for(a=0;12>a;a++)c+='<span class="month">'+d[a]+"</span>";i.widget.find(".datepicker-months td").append(c)},t=function(){if(i.options.pickDate){b.locale(i.options.language);var c,d,e,f,g,h,j,k,l,m=i.viewDate.year(),n=i.viewDate.month(),o=i.options.minDate.year(),p=i.options.minDate.month(),q=i.options.maxDate.year(),r=i.options.maxDate.month(),s=[],t=b
 .months();for(i.widget.find(".datepicker-days").find(".disabled").removeClass("disabled"),i.widget.find(".datepicker-months").find(".disabled").removeClass("disabled"),i.widget.find(".datepicker-years").find(".disabled").removeClass("disabled"),i.widget.find(".datepicker-days th:eq(1)").text(t[n]+" "+m),d=b(i.viewDate,i.format,i.options.useStrict).subtract(1,"months"),j=d.daysInMonth(),d.date(j).startOf("week"),(m===o&&p>=n||o>m)&&i.widget.find(".datepicker-days th:eq(0)").addClass("disabled"),(m===q&&n>=r||m>q)&&i.widget.find(".datepicker-days th:eq(2)").addClass("disabled"),e=b(d).add(42,"d");d.isBefore(e);){if(d.weekday()===b().startOf("week").weekday()&&(f=a("<tr>"),s.push(f),i.options.calendarWeeks===!0&&f.append('<td class="cw">'+d.week()+"</td>")),g="",d.year()<m||d.year()===m&&d.month()<n?g+=" old":(d.year()>m||d.year()===m&&d.month()>n)&&(g+=" new"),d.isSame(b({y:i.date.year(),M:i.date.month(),d:i.date.date()}))&&(g+=" active"),(M(d,"day")||!N(d))&&(g+=" disabled"),i.option
 s.showToday===!0&&d.isSame(b(),"day")&&(g+=" today"),i.options.daysOfWeekDisabled)for(h=0;h<i.options.daysOfWeekDisabled.length;h++)if(d.day()===i.options.daysOfWeekDisabled[h]){g+=" disabled";break}f.append('<td class="day'+g+'">'+d.date()+"</td>"),c=d.date(),d.add(1,"d"),c===d.date()&&d.add(1,"d")}for(i.widget.find(".datepicker-days tbody").empty().append(s),l=i.date.year(),t=i.widget.find(".datepicker-months").find("th:eq(1)").text(m).end().find("span").removeClass("active"),l===m&&t.eq(i.date.month()).addClass("active"),o>m-1&&i.widget.find(".datepicker-months th:eq(0)").addClass("disabled"),m+1>q&&i.widget.find(".datepicker-months th:eq(2)").addClass("disabled"),h=0;12>h;h++)m===o&&p>h||o>m?a(t[h]).addClass("disabled"):(m===q&&h>r||m>q)&&a(t[h]).addClass("disabled");for(s="",m=10*parseInt(m/10,10),k=i.widget.find(".datepicker-years").find("th:eq(1)").text(m+"-"+(m+9)).parents("table").find("td"),i.widget.find(".datepicker-years").find("th").removeClass("disabled"),o>m&&i.widget
 .find(".datepicker-years").find("th:eq(0)").addClass("disabled"),m+9>q&&i.widget.find(".datepicker-years").find("th:eq(2)").addClass("disabled"),m-=1,h=-1;11>h;h++)s+='<span class="year'+(-1===h||10===h?" old":"")+(l===m?" active":"")+(o>m||m>q?" disabled":"")+'">'+m+"</span>",m+=1;k.html(s)}},u=function(){b.locale(i.options.language);var a,c,d,e=i.widget.find(".timepicker .timepicker-hours table"),f="";if(e.parent().hide(),i.use24hours)for(a=0,c=0;6>c;c+=1){for(f+="<tr>",d=0;4>d;d+=1)f+='<td class="hour">'+P(a.toString())+"</td>",a++;f+="</tr>"}else for(a=1,c=0;3>c;c+=1){for(f+="<tr>",d=0;4>d;d+=1)f+='<td class="hour">'+P(a.toString())+"</td>",a++;f+="</tr>"}e.html(f)},v=function(){var a,b,c=i.widget.find(".timepicker .timepicker-minutes table"),d="",e=0,f=i.options.minuteStepping;for(c.parent().hide(),1===f&&(f=5),a=0;a<Math.ceil(60/f/4);a++){for(d+="<tr>",b=0;4>b;b+=1)60>e?(d+='<td class="minute">'+P(e.toString())+"</td>",e+=f):d+="<td></td>";d+="</tr>"}c.html(d)},w=function(){va
 r a,b,c=i.widget.find(".timepicker .timepicker-seconds table"),d="",e=0;for(c.parent().hide(),a=0;3>a;a++){for(d+="<tr>",b=0;4>b;b+=1)d+='<td class="second">'+P(e.toString())+"</td>",e+=5;d+="</tr>"}c.html(d)},x=function(){if(i.date){var a=i.widget.find(".timepicker span[data-time-component]"),b=i.date.hours(),c=i.date.format("A");i.use24hours||(0===b?b=12:12!==b&&(b%=12),i.widget.find(".timepicker [data-action=togglePeriod]").text(c)),a.filter("[data-time-component=hours]").text(P(b)),a.filter("[data-time-component=minutes]").text(P(i.date.minutes())),a.filter("[data-time-component=seconds]").text(P(i.date.second()))}},y=function(c){c.stopPropagation(),c.preventDefault(),i.unset=!1;var d,e,f,g,h=a(c.target).closest("span, td, th"),j=b(i.date);if(1===h.length&&!h.is(".disabled"))switch(h[0].nodeName.toLowerCase()){case"th":switch(h[0].className){case"picker-switch":E(1);break;case"prev":case"next":f=R.modes[i.viewMode].navStep,"prev"===h[0].className&&(f=-1*f),i.viewDate.add(f,R.mod
 es[i.viewMode].navFnc),t()}break;case"span":h.is(".month")?(d=h.parent().find("span").index(h),i.viewDate.month(d)):(e=parseInt(h.text(),10)||0,i.viewDate.year(e)),i.viewMode===i.minViewMode&&(i.date=b({y:i.viewDate.year(),M:i.viewDate.month(),d:i.viewDate.date(),h:i.date.hours(),m:i.date.minutes(),s:i.date.seconds()}),K(),o(j,c.type)),E(-1),t();break;case"td":h.is(".day")&&(g=parseInt(h.text(),10)||1,d=i.viewDate.month(),e=i.viewDate.year(),h.is(".old")?0===d?(d=11,e-=1):d-=1:h.is(".new")&&(11===d?(d=0,e+=1):d+=1),i.date=b({y:e,M:d,d:g,h:i.date.hours(),m:i.date.minutes(),s:i.date.seconds()}),i.viewDate=b({y:e,M:d,d:Math.min(28,g)}),t(),K(),o(j,c.type))}},z={incrementHours:function(){L("add","hours",1)},incrementMinutes:function(){L("add","minutes",i.options.minuteStepping)},incrementSeconds:function(){L("add","seconds",1)},decrementHours:function(){L("subtract","hours",1)},decrementMinutes:function(){L("subtract","minutes",i.options.minuteStepping)},decrementSeconds:function(){L("s
 ubtract","seconds",1)},togglePeriod:function(){var a=i.date.hours();a>=12?a-=12:a+=12,i.date.hours(a)},showPicker:function(){i.widget.find(".timepicker > div:not(.timepicker-picker)").hide(),i.widget.find(".timepicker .timepicker-picker").show()},showHours:function(){i.widget.find(".timepicker .timepicker-picker").hide(),i.widget.find(".timepicker .timepicker-hours").show()},showMinutes:function(){i.widget.find(".timepicker .timepicker-picker").hide(),i.widget.find(".timepicker .timepicker-minutes").show()},showSeconds:function(){i.widget.find(".timepicker .timepicker-picker").hide(),i.widget.find(".timepicker .timepicker-seconds").show()},selectHour:function(b){var c=parseInt(a(b.target).text(),10);i.use24hours||(i.date.hours()>=12?12!==c&&(c+=12):12===c&&(c=0)),i.date.hours(c),z.showPicker.call(i)},selectMinute:function(b){i.date.minutes(parseInt(a(b.target).text(),10)),z.showPicker.call(i)},selectSecond:function(b){i.date.seconds(parseInt(a(b.target).text(),10)),z.showPicker.call
 (i)}},A=function(c){var d=b(i.date),e=a(c.currentTarget).data("action"),f=z[e].apply(i,arguments);return B(c),i.date||(i.date=b({y:1970})),K(),x(),o(d,c.type),f},B=function(a){a.stopPropagation(),a.preventDefault()},C=function(a){27===a.keyCode&&i.hide()},D=function(c){b.locale(i.options.language);var d=a(c.target),e=b(i.date),f=b(d.val(),i.format,i.options.useStrict);f.isValid()&&!M(f)&&N(f)?(q(),i.setValue(f),o(e,c.type),K()):(i.viewDate=e,i.unset=!0,o(e,c.type),p(f))},E=function(a){a&&(i.viewMode=Math.max(i.minViewMode,Math.min(2,i.viewMode+a))),i.widget.find(".datepicker > div").hide().filter(".datepicker-"+R.modes[i.viewMode].clsName).show()},F=function(){var b,c,d,e,f;i.widget.on("click",".datepicker *",a.proxy(y,this)),i.widget.on("click","[data-action]",a.proxy(A,this)),i.widget.on("mousedown",a.proxy(B,this)),i.element.on("keydown",a.proxy(C,this)),i.options.pickDate&&i.options.pickTime&&i.widget.on("click.togglePicker",".accordion-toggle",function(g){if(g.stopPropagation()
 ,b=a(this),c=b.closest("ul"),d=c.find(".in"),e=c.find(".collapse:not(.in)"),d&&d.length){if(f=d.data("collapse"),f&&f.transitioning)return;d.collapse("hide"),e.collapse("show"),b.find("span").toggleClass(i.options.icons.time+" "+i.options.icons.date),i.component&&i.component.find("span").toggleClass(i.options.icons.time+" "+i.options.icons.date)}}),i.isInput?i.element.on({click:a.proxy(i.show,this),focus:a.proxy(i.show,this),change:a.proxy(D,this),blur:a.proxy(i.hide,this)}):(i.element.on({change:a.proxy(D,this)},"input"),i.component?(i.component.on("click",a.proxy(i.show,this)),i.component.on("mousedown",a.proxy(B,this))):i.element.on("click",a.proxy(i.show,this)))},G=function(){a(window).on("resize.datetimepicker"+i.id,a.proxy(n,this)),i.isInput||a(document).on("mousedown.datetimepicker"+i.id,a.proxy(i.hide,this))},H=function(){i.widget.off("click",".datepicker *",i.click),i.widget.off("click","[data-action]"),i.widget.off("mousedown",i.stopEvent),i.options.pickDate&&i.options.pic
 kTime&&i.widget.off("click.togglePicker"),i.isInput?i.element.off({focus:i.show,change:D,click:i.show,blur:i.hide}):(i.element.off({change:D},"input"),i.component?(i.component.off("click",i.show),i.component.off("mousedown",i.stopEvent)):i.element.off("click",i.show))},I=function(){a(window).off("resize.datetimepicker"+i.id),i.isInput||a(document).off("mousedown.datetimepicker"+i.id)},J=function(){if(i.element){var b,c=i.element.parents(),d=!1;for(b=0;b<c.length;b++)if("fixed"===a(c[b]).css("position")){d=!0;break}return d}return!1},K=function(){b.locale(i.options.language);var a="";i.unset||(a=b(i.date).format(i.format)),l().val(a),i.element.data("date",a),i.options.pickTime||i.hide()},L=function(a,c,d){b.locale(i.options.language);var e;return"add"===a?(e=b(i.date),23===e.hours()&&e.add(d,c),e.add(d,c)):e=b(i.date).subtract(d,c),M(b(e.subtract(d,c)))||M(e)?void p(e.format(i.format)):("add"===a?i.date.add(d,c):i.date.subtract(d,c),void(i.unset=!1))},M=function(a,c){b.locale(i.optio
 ns.language);var d=b(i.options.maxDate,i.format,i.options.useStrict),e=b(i.options.minDate,i.format,i.options.useStrict);return c&&(d=d.endOf(c),e=e.startOf(c)),a.isAfter(d)||a.isBefore(e)?!0:i.options.disabledDates===!1?!1:i.options.disabledDates[a.format("YYYY-MM-DD")]===!0},N=function(a){return b.locale(i.options.language),i.options.enabledDates===!1?!0:i.options.enabledDates[a.format("YYYY-MM-DD")]===!0},O=function(a){var c,d={},e=0;for(c=0;c<a.length;c++)f=b.isMoment(a[c])||a[c]instanceof Date?b(a[c]):b(a[c],i.format,i.options.useStrict),f.isValid()&&(d[f.format("YYYY-MM-DD")]=!0,e++);return e>0?d:!1},P=function(a){return a=a.toString(),a.length>=2?a:"0"+a},Q=function(){var a='<thead><tr><th class="prev">&lsaquo;</th><th colspan="'+(i.options.calendarWeeks?"6":"5")+'" class="picker-switch"></th><th class="next">&rsaquo;</th></tr></thead>',b='<tbody><tr><td colspan="'+(i.options.calendarWeeks?"8":"7")+'"></td></tr></tbody>',c='<div class="datepicker-days"><table class="table-con
 densed">'+a+'<tbody></tbody></table></div><div class="datepicker-months"><table class="table-condensed">'+a+b+'</table></div><div class="datepicker-years"><table class="table-condensed">'+a+b+"</table></div>",d="";return i.options.pickDate&&i.options.pickTime?(d='<div class="bootstrap-datetimepicker-widget'+(i.options.sideBySide?" timepicker-sbs":"")+(i.use24hours?" usetwentyfour":"")+' dropdown-menu" style="z-index:9999 !important;">',d+=i.options.sideBySide?'<div class="row"><div class="col-sm-6 datepicker">'+c+'</div><div class="col-sm-6 timepicker">'+S.getTemplate()+"</div></div>":'<ul class="list-unstyled"><li'+(i.options.collapse?' class="collapse in"':"")+'><div class="datepicker">'+c+'</div></li><li class="picker-switch accordion-toggle"><a class="btn" style="width:100%"><span class="'+i.options.icons.time+'"></span></a></li><li'+(i.options.collapse?' class="collapse"':"")+'><div class="timepicker">'+S.getTemplate()+"</div></li></ul>",d+="</div>"):i.options.pickTime?'<div cl
 ass="bootstrap-datetimepicker-widget dropdown-menu"><div class="timepicker">'+S.getTemplate()+"</div></div>":'<div class="bootstrap-datetimepicker-widget dropdown-menu"><div class="datepicker">'+c+"</div></div>"},R={modes:[{clsName:"days",navFnc:"month",navStep:1},{clsName:"months",navFnc:"year",navStep:1},{clsName:"years",navFnc:"year",navStep:10}]},S={hourTemplate:'<span data-action="showHours"   data-time-component="hours"   class="timepicker-hour"></span>',minuteTemplate:'<span data-action="showMinutes" data-time-component="minutes" class="timepicker-minute"></span>',secondTemplate:'<span data-action="showSeconds"  data-time-component="seconds" class="timepicker-second"></span>'};S.getTemplate=function(){return'<div class="timepicker-picker"><table class="table-condensed"><tr><td><a href="#" class="btn" data-action="incrementHours"><span class="'+i.options.icons.up+'"></span></a></td><td class="separator"></td><td>'+(i.options.useMinutes?'<a href="#" class="btn" data-action="inc
 rementMinutes"><span class="'+i.options.icons.up+'"></span></a>':"")+"</td>"+(i.options.useSeconds?'<td class="separator"></td><td><a href="#" class="btn" data-action="incrementSeconds"><span class="'+i.options.icons.up+'"></span></a></td>':"")+(i.use24hours?"":'<td class="separator"></td>')+"</tr><tr><td>"+S.hourTemplate+'</td> <td class="separator">:</td><td>'+(i.options.useMinutes?S.minuteTemplate:'<span class="timepicker-minute">00</span>')+"</td> "+(i.options.useSeconds?'<td class="separator">:</td><td>'+S.secondTemplate+"</td>":"")+(i.use24hours?"":'<td class="separator"></td><td><button type="button" class="btn btn-primary" data-action="togglePeriod"></button></td>')+'</tr><tr><td><a href="#" class="btn" data-action="decrementHours"><span class="'+i.options.icons.down+'"></span></a></td><td class="separator"></td><td>'+(i.options.useMinutes?'<a href="#" class="btn" data-action="decrementMinutes"><span class="'+i.options.icons.down+'"></span></a>':"")+"</td>"+(i.options.useSec
 onds?'<td class="separator"></td><td><a href="#" class="btn" data-action="decrementSeconds"><span class="'+i.options.icons.down+'"></span></a></td>':"")+(i.use24hours?"":'<td class="separator"></td>')+'</tr></table></div><div class="timepicker-hours" data-action="selectHour"><table class="table-condensed"></table></div><div class="timepicker-minutes" data-action="selectMinute"><table class="table-condensed"></table></div>'+(i.options.useSeconds?'<div class="timepicker-seconds" data-action="selectSecond"><table class="table-condensed"></table></div>':"")},i.destroy=function(){H(),I(),i.widget.remove(),i.element.removeData("DateTimePicker"),i.component&&i.component.removeData("DateTimePicker")},i.show=function(a){if(!l().prop("disabled")){if(i.options.useCurrent&&""===l().val()){if(1!==i.options.minuteStepping){var c=b(),d=i.options.minuteStepping;c.minutes(Math.round(c.minutes()/d)*d%60).seconds(0),i.setValue(c.format(i.format))}else i.setValue(b().format(i.format));o("",a.type)}a&&"
 click"===a.type&&i.isInput&&i.widget.hasClass("picker-open")||(i.widget.hasClass("picker-open")?(i.widget.hide(),i.widget.removeClass("picker-open")):(i.widget.show(),i.widget.addClass("picker-open")),i.height=i.component?i.component.outerHeight():i.element.outerHeight(),n(),i.element.trigger({type:"dp.show",date:b(i.date)}),G(),a&&B(a))}},i.disable=function(){var a=l();a.prop("disabled")||(a.prop("disabled",!0),H())},i.enable=function(){var a=l();a.prop("disabled")&&(a.prop("disabled",!1),F())},i.hide=function(){var a,c,d=i.widget.find(".collapse");for(a=0;a<d.length;a++)if(c=d.eq(a).data("collapse"),c&&c.transitioning)return;i.widget.hide(),i.widget.removeClass("picker-open"),i.viewMode=i.startViewMode,E(),i.element.trigger({type:"dp.hide",date:b(i.date)}),I()},i.setValue=function(a){b.locale(i.options.language),a?i.unset=!1:(i.unset=!0,K()),a=b.isMoment(a)?a.locale(i.options.language):a instanceof Date?b(a):b(a,i.format,i.options.useStrict),a.isValid()?(i.date=a,K(),i.viewDate=b(
 {y:i.date.year(),M:i.date.month()}),t(),x()):p(a)},i.getDate=function(){return i.unset?null:b(i.date)},i.setDate=function(a){var c=b(i.date);i.setValue(a?a:null),o(c,"function")},i.setDisabledDates=function(a){i.options.disabledDates=O(a),i.viewDate&&q()},i.setEnabledDates=function(a){i.options.enabledDates=O(a),i.viewDate&&q()},i.setMaxDate=function(a){void 0!==a&&(i.options.maxDate=b.isMoment(a)||a instanceof Date?b(a):b(a,i.format,i.options.useStrict),i.viewDate&&q())},i.setMinDate=function(a){void 0!==a&&(i.options.minDate=b.isMoment(a)||a instanceof Date?b(a):b(a,i.format,i.options.useStrict),i.viewDate&&q())},k()};a.fn.datetimepicker=function(b){return this.each(function(){var c=a(this),e=c.data("DateTimePicker");e||c.data("DateTimePicker",new d(this,b))})},a.fn.datetimepicker.defaults={format:!1,pickDate:!0,pickTime:!0,useMinutes:!0,useSeconds:!1,useCurrent:!0,calendarWeeks:!1,minuteStepping:1,minDate:b({y:1900}),maxDate:b().add(100,"y"),showToday:!0,collapse:!0,language:b.lo
 cale(),defaultDate:"",disabledDates:!1,enabledDates:!1,icons:{},useStrict:!1,direction:"auto",sideBySide:!1,daysOfWeekDisabled:[],widgetParent:!1}});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/js/deployment.js
----------------------------------------------------------------------
diff --git a/public/js/deployment.js b/public/js/deployment.js
new file mode 100644
index 0000000..43bac43
--- /dev/null
+++ b/public/js/deployment.js
@@ -0,0 +1,86 @@
+
+$( document).ready( function(){
+
+	//show deployment options on hovering on it
+	$(".panel-title").hover( 
+		function(){
+			$(this).find(".deployment-options").addClass("in");
+		},
+		function(){
+			$(this).find(".deployment-options").removeClass("in");
+		}
+	);
+
+	$("body").on("click", ".add-load-cmd", function(){
+		$(this).parent().children(".show-load-cmds").append( $(".load-cmd-ui").html() );
+	});
+
+	$("body").on("click",".add-lib-prepend-path", function(){
+		$(this).parent().children(".show-lib-prepend-paths").append( $(".lib-prepend-path-ui").html() );
+	});
+
+	$("body").on("click",".add-lib-append-path", function(){
+		$(this).parent().children(".show-lib-append-paths").append( $(".lib-append-path-ui").html() );
+	});
+
+	$("body").on("click",".add-environment", function(){
+		$(this).parent().children(".show-environments").append( $(".environment-ui").html() );
+	});
+
+	$("body").on("click",".add-preJobCommand", function(){
+		$(this).parent().children(".show-preJobCommands").append( $(".pre-job-command-ui").html() );
+	});
+
+	$("body").on("click",".add-postJobCommand", function(){
+		$(this).parent().children(".show-postJobCommands").append( $(".post-job-command-ui").html() );
+	});
+
+	$('.filterinput').keyup(function() {
+        var a = $(this).val();
+        if (a.length > 0) {
+            children = ($("#accordion").children());
+
+            var containing = children.filter(function () {
+                var regex = new RegExp('\\b' + a, 'i');
+                return regex.test($('a', this).text());
+            }).slideDown();
+            children.not(containing).slideUp();
+        } else {
+            children.slideDown();
+        }
+        return false;
+    });
+
+    $(".edit-app-deployment").click( function(){
+    	var appDeploymentContent = $("<div></div>");
+    	appDeploymentContent.html( $(this).parent().parent().parent().parent().find(".app-deployment-block").html());
+    	clearInputs( appDeploymentContent, true);
+
+    	$(".app-deployment-form-content").html( appDeploymentContent.html() );
+    });
+
+    $(".create-app-deployment").click( function(){
+    	clearInputs( $(".create-app-deployment-block"));
+    	$("#create-app-deployment-block").modal("show");
+
+    });
+
+    $(".delete-app-deployment").click( function(){
+        	var deploymentId = $(this).data("deployment-id");
+        	$(".delete-deployment-id").html( $(this).parent().parent().find(".deployment-id").html() );
+        	$(".delete-deploymentId").val( deploymentId )
+        });
+});
+
+function clearInputs( elem, removeJustReadOnly){
+
+	if( !removeJustReadOnly)
+	{
+		elem.find("input").val("");
+		elem.find("textarea").html("");
+	}
+	elem.find("input").removeAttr("readonly");
+	elem.find("textarea").removeAttr("readonly");
+	elem.find("select").removeAttr("readonly");
+	elem.find(".hide").removeClass("hide");
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/js/gateway.js
----------------------------------------------------------------------
diff --git a/public/js/gateway.js b/public/js/gateway.js
new file mode 100644
index 0000000..5310435
--- /dev/null
+++ b/public/js/gateway.js
@@ -0,0 +1,66 @@
+$( document).ready( function(){
+	
+		//show options on hovering on a gateway
+		$(".panel-title").hover( 
+			function(){
+				$(this).find(".gateway-options").addClass("in");
+			},
+			function(){
+				$(this).find(".gateway-options").removeClass("in");
+			}
+		);
+
+		//search Gateway Profiles 
+		$('.filterinput').keyup(function() {
+	        var a = $(this).val();
+	        if (a.length > 0) {
+	            children = ($("#accordion1").children());
+
+	            var containing = children.filter(function () {
+	                var regex = new RegExp('\\b' + a, 'i');
+	                return regex.test($('a', this).text());
+	            }).slideDown();
+	            children.not(containing).slideUp();
+	        } else {
+	            children.slideDown();
+	        }
+	        return false;
+	    });
+
+	    //remove Compute Resource
+	    $("body").on("click", ".remove-cr", function(){
+			$(this).parent().remove();
+		});
+
+
+		$(".add-cr").click( function(){
+
+			$(".add-compute-resource-block").find("#gatewayId").val( $(this).data("gpid"));
+			$(this).after( $(".add-compute-resource-block").html() );
+		});
+
+		$("body").on("change", ".cr-select", function(){
+			crId = $(this).val();
+			//This is done as Jquery creates problems when using period(.) in id or class.
+			crId = crId.replace(/\./g,"_");
+			$(this).parent().parent().find(".pref-space").html( $("#cr-" + crId).html());
+		});
+
+		$(".edit-gateway").click( function(){
+			$(".edit-gp-name").val( $(this).data("gp-name") );
+			$(".edit-gp-desc").val( $(this).data("gp-desc") );
+			$(".edit-gpId").val( $(this).data("gp-id") );
+		});
+
+		$(".delete-gateway").click( function(){
+			$(".delete-gp-name").html( $(this).data("gp-name") );
+			$(".delete-gpId").val( $(this).data("gp-id") );
+		});
+
+		$(".remove-resource").click( function(){
+			$(".remove-cr-name").html( $(this).data("cr-name") );
+			$(".remove-crId").val( $(this).data("cr-id") );
+			$(".cr-gpId").val( $(this).data("gp-id") );
+		});
+
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/js/interface.js
----------------------------------------------------------------------
diff --git a/public/js/interface.js b/public/js/interface.js
new file mode 100644
index 0000000..f99a4b9
--- /dev/null
+++ b/public/js/interface.js
@@ -0,0 +1,135 @@
+$(document).ready( function(){
+
+	//show interface options on hovering on it
+	$(".panel-title").hover( 
+		function(){
+			$(this).find(".interface-options").addClass("in");
+		},
+		function(){
+			$(this).find(".interface-options").removeClass("in");
+		}
+	);
+	// add new input fields block.
+	$("body").on( "click", ".add-input", function(){
+		var appInputDiv = $('<div></div>');
+		appInputDiv.html( $(".app-input-block").html() );
+		clearInputs( appInputDiv);
+		$(".app-inputs").append(  appInputDiv );
+	});
+
+	// add new output fields block.
+	$("body").on( "click", ".add-output", function(){
+		var appOutputDiv = $('<div></div>');
+		appOutputDiv.html( $(".app-output-block").html() );
+		clearInputs( appOutputDiv);
+		$(".app-outputs").append( appOutputDiv );
+	});
+
+	// remove an input fields block
+	$("body").on("click", ".remove-input-space", function(){
+		$(this).parent().remove();
+	});
+
+	$("body").on("click", ".remove-input-space", function(){
+		$(this).parent().remove();
+	});
+
+	// remove an output fields block
+	$("body").on("click", ".remove-output-space", function(){
+		$(this).parent().remove();
+	});
+
+	$("body").on("click", ".add-app-module", function(){
+		$(this).parent().children(".app-modules").append( $(".app-module-block").html() );
+	});
+
+	$("body").on("click", ".remove-app-module", function(){
+		$(this).parent().remove();
+	});
+
+	$('.filterinput').keyup(function() {
+        var a = $(this).val();
+        if (a.length > 0) {
+            children = ($("#accordion").children());
+
+            var containing = children.filter(function () {
+                var regex = new RegExp('\\b' + a, 'i');
+                return regex.test($('a', this).text());
+            }).slideDown();
+            children.not(containing).slideUp();
+        } else {
+            children.slideDown();
+        }
+        return false;
+    });
+
+    $(".edit-app-interface").click( function(){
+    	var appInterfaceContent = $("<div></div>");
+    	appInterfaceContent.html( $(this).parent().parent().parent().parent().find(".app-interface-block").html());
+    	clearInputs( appInterfaceContent, true);
+
+    	$(".app-interface-form-content").html( appInterfaceContent.html() );
+    });
+
+    $(".create-app-interface").click( function(){
+    	clearInputs( $(".create-app-interface-block"));
+    	$("#create-app-interface-block").modal("show");
+        //checking if app module select option exist and if not add one.
+        if( $("#create-app-interface-block").find(".app-module-select").length == 0 )
+            $("#create-app-interface-block").find(".add-app-module").click();
+
+    });
+
+    $(".submit-create-app-interface-form").click( function(){
+    	//check if app interface contains atleast one app module selected.
+    	if( $(this).parent().parent().parent().find(".app-module-select").length)
+    	{
+    		//Using a dirty hack because jquery submit bypasses required field if directly submitted.
+    		//Need a better solution, but until then submitting via a hidden submit button.
+    		//$("#create-app-interface-form").submit();
+    		$(".really-submit-create-app-interface-form").click();
+    	}
+    	else
+    		alert("An Application Interface requires minimum one Application Module.");
+    });
+
+    $(".submit-edit-app-interface-form").click( function(){
+    	//check if app interface contains atleast one app module selected.
+    	if( $(this).parent().parent().parent().find(".app-module-select").length)
+    	{
+    		//Using a dirty hack because jquery submit bypasses required field if directly submitted.
+    		//Need a better solution, but until then submitting via a hidden submit button.
+    		//$("#create-app-interface-form").submit();
+    		//$("#edit-app-interface-form").submit();
+    		$(".really-submit-edit-app-interface-form").click();
+    	}
+    	else
+    		alert("An Application Interface requires minimum one Application Module.");
+    });
+
+    $(".delete-app-interface").click( function(){
+        	var interfaceId = $(this).data("interface-id");
+        	$(".delete-interface-name").html( $(this).parent().parent().find(".interface-name").html() );
+        	$(".delete-interfaceid").val( interfaceId )
+        });
+});
+
+function clearInputs( elem, removeJustReadOnly){
+
+	if( !removeJustReadOnly)
+	{
+        inputs = elem.find("input");
+        inputs.each( function(i, e){
+            if( $(e).attr("type") == "text")
+                $(e).val("");
+        });
+		elem.find("textarea").html("");
+	}
+	elem.find("input").removeAttr("readonly");
+	elem.find("textarea").removeAttr("readonly");
+	elem.find("select").removeAttr("readonly");
+	elem.find(".hide").removeClass("hide");
+    //remove previously created input/output blocks
+    elem.find(".app-inputs").html("");
+    elem.find(".app-outputs").html("");
+}
\ No newline at end of file


[28/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/composer/autoload_classmap.php
----------------------------------------------------------------------
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
new file mode 100644
index 0000000..734f4ee
--- /dev/null
+++ b/vendor/composer/autoload_classmap.php
@@ -0,0 +1,2121 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'AccountController' => $baseDir . '/app/controllers/AccountController.php',
+    'AddRole' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'AddUser' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'AddUserClaimValue' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'AddUserClaimValues' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'AdminController' => $baseDir . '/app/controllers/AdminController.php',
+    'Airavata\\API\\AiravataClient' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\AiravataIf' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addCloudJobSubmissionDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addCloudJobSubmissionDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addGatewayComputeResourcePreference_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addGatewayComputeResourcePreference_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addGateway_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addGateway_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addGridFTPDataMovementDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addGridFTPDataMovementDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addLocalDataMovementDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addLocalDataMovementDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addLocalSubmissionDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addLocalSubmissionDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addSCPDataMovementDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addSCPDataMovementDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addSSHJobSubmissionDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addSSHJobSubmissionDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addUNICOREJobSubmissionDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addUNICOREJobSubmissionDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addUnicoreDataMovementDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_addUnicoreDataMovementDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_changeDataMovementPriorities_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_changeDataMovementPriorities_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_changeDataMovementPriority_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_changeDataMovementPriority_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_changeJobSubmissionPriorities_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_changeJobSubmissionPriorities_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_changeJobSubmissionPriority_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_changeJobSubmissionPriority_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_cloneExperiment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_cloneExperiment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_createExperiment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_createExperiment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_createProject_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_createProject_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteApplicationDeployment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteApplicationDeployment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteApplicationInterface_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteApplicationInterface_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteApplicationModule_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteApplicationModule_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteBatchQueue_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteBatchQueue_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteComputeResource_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteComputeResource_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteDataMovementInterface_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteDataMovementInterface_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteGatewayComputeResourcePreference_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteGatewayComputeResourcePreference_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteGatewayResourceProfile_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteGatewayResourceProfile_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteGateway_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteGateway_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteJobSubmissionInterface_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteJobSubmissionInterface_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteProject_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteProject_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteResourceJobManager_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteResourceJobManager_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_deleteWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_generateAndRegisterSSHKeys_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_generateAndRegisterSSHKeys_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAPIVersion_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAPIVersion_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllAppModules_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllAppModules_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllApplicationDeployments_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllApplicationDeployments_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllApplicationInterfaceNames_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllApplicationInterfaceNames_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllApplicationInterfaces_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllApplicationInterfaces_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllComputeResourceNames_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllComputeResourceNames_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllExperimentsInProject_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllExperimentsInProject_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllGatewayComputeResourcePreferences_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllGatewayComputeResourcePreferences_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllGatewayComputeResources_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllGatewayComputeResources_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllGateways_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllGateways_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllUserExperiments_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllUserExperiments_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllUserProjects_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllUserProjects_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllUserSSHPubKeys_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllUserSSHPubKeys_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllWorkflows_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAllWorkflows_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAppModuleDeployedResources_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAppModuleDeployedResources_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getApplicationDeployment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getApplicationDeployment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getApplicationInputs_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getApplicationInputs_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getApplicationInterface_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getApplicationInterface_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getApplicationModule_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getApplicationModule_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getApplicationOutputs_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getApplicationOutputs_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAvailableAppInterfaceComputeResources_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getAvailableAppInterfaceComputeResources_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getCloudJobSubmission_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getCloudJobSubmission_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getComputeResource_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getComputeResource_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getDataTransferDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getDataTransferDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getExperimentOutputs_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getExperimentOutputs_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getExperimentStatus_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getExperimentStatus_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getExperiment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getExperiment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getGatewayComputeResourcePreference_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getGatewayComputeResourcePreference_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getGatewayResourceProfile_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getGatewayResourceProfile_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getGateway_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getGateway_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getGridFTPDataMovement_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getGridFTPDataMovement_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getIntermediateOutputs_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getIntermediateOutputs_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getJobDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getJobDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getJobStatuses_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getJobStatuses_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getLocalDataMovement_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getLocalDataMovement_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getLocalJobSubmission_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getLocalJobSubmission_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getProject_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getProject_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getResourceJobManager_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getResourceJobManager_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getSCPDataMovement_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getSCPDataMovement_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getSSHJobSubmission_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getSSHJobSubmission_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getSSHPubKey_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getSSHPubKey_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getUnicoreDataMovement_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getUnicoreDataMovement_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getUnicoreJobSubmission_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getUnicoreJobSubmission_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getWorkflowTemplateId_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getWorkflowTemplateId_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_getWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_isGatewayExist_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_isGatewayExist_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_isWorkflowExistWithName_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_isWorkflowExistWithName_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_launchExperiment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_launchExperiment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_registerApplicationDeployment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_registerApplicationDeployment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_registerApplicationInterface_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_registerApplicationInterface_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_registerApplicationModule_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_registerApplicationModule_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_registerComputeResource_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_registerComputeResource_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_registerGatewayResourceProfile_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_registerGatewayResourceProfile_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_registerResourceJobManager_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_registerResourceJobManager_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_registerWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_registerWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_searchExperimentsByApplication_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_searchExperimentsByApplication_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_searchExperimentsByCreationTime_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_searchExperimentsByCreationTime_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_searchExperimentsByDesc_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_searchExperimentsByDesc_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_searchExperimentsByName_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_searchExperimentsByName_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_searchExperimentsByStatus_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_searchExperimentsByStatus_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_searchProjectsByProjectDesc_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_searchProjectsByProjectDesc_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_searchProjectsByProjectName_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_searchProjectsByProjectName_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_terminateExperiment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_terminateExperiment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateApplicationDeployment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateApplicationDeployment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateApplicationInterface_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateApplicationInterface_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateApplicationModule_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateApplicationModule_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateCloudJobSubmissionDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateCloudJobSubmissionDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateComputeResource_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateComputeResource_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateExperimentConfiguration_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateExperimentConfiguration_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateExperiment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateExperiment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateGatewayComputeResourcePreference_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateGatewayComputeResourcePreference_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateGatewayResourceProfile_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateGatewayResourceProfile_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateGateway_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateGateway_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateGridFTPDataMovementDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateGridFTPDataMovementDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateLocalDataMovementDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateLocalDataMovementDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateLocalSubmissionDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateLocalSubmissionDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateProject_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateProject_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateResourceJobManager_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateResourceJobManager_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateResourceScheduleing_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateResourceScheduleing_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateSCPDataMovementDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateSCPDataMovementDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateSSHJobSubmissionDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateSSHJobSubmissionDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateUnicoreDataMovementDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateUnicoreDataMovementDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateUnicoreJobSubmissionDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateUnicoreJobSubmissionDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_updateWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_validateExperiment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Airavata_validateExperiment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
+    'Airavata\\API\\Error\\AiravataClientException' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
+    'Airavata\\API\\Error\\AiravataErrorType' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
+    'Airavata\\API\\Error\\AiravataSystemException' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
+    'Airavata\\API\\Error\\AuthenticationException' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
+    'Airavata\\API\\Error\\AuthorizationException' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
+    'Airavata\\API\\Error\\ExperimentNotFoundException' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
+    'Airavata\\API\\Error\\InvalidRequestException' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
+    'Airavata\\API\\Error\\LaunchValidationException' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
+    'Airavata\\API\\Error\\ProjectNotFoundException' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
+    'Airavata\\API\\Error\\TimedOutException' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
+    'Airavata\\API\\Error\\ValidationResults' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
+    'Airavata\\API\\Error\\ValidatorResult' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
+    'Airavata\\API\\WorkflowClient' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
+    'Airavata\\API\\WorkflowIf' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
+    'Airavata\\API\\Workflow\\WorkflowClient' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
+    'Airavata\\API\\Workflow\\WorkflowIf' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
+    'Airavata\\API\\Workflow\\Workflow_deleteWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
+    'Airavata\\API\\Workflow\\Workflow_deleteWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
+    'Airavata\\API\\Workflow\\Workflow_getAllWorkflows_args' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
+    'Airavata\\API\\Workflow\\Workflow_getAllWorkflows_result' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
+    'Airavata\\API\\Workflow\\Workflow_getWorkflowTemplateId_args' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
+    'Airavata\\API\\Workflow\\Workflow_getWorkflowTemplateId_result' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
+    'Airavata\\API\\Workflow\\Workflow_getWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
+    'Airavata\\API\\Workflow\\Workflow_getWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
+    'Airavata\\API\\Workflow\\Workflow_isWorkflowExistWithName_args' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
+    'Airavata\\API\\Workflow\\Workflow_isWorkflowExistWithName_result' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
+    'Airavata\\API\\Workflow\\Workflow_registerWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
+    'Airavata\\API\\Workflow\\Workflow_registerWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
+    'Airavata\\API\\Workflow\\Workflow_updateWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
+    'Airavata\\API\\Workflow\\Workflow_updateWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
+    'Airavata\\API\\Workflow_deleteWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
+    'Airavata\\API\\Workflow_deleteWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
+    'Airavata\\API\\Workflow_getAllWorkflows_args' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
+    'Airavata\\API\\Workflow_getAllWorkflows_result' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
+    'Airavata\\API\\Workflow_getWorkflowTemplateId_args' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
+    'Airavata\\API\\Workflow_getWorkflowTemplateId_result' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
+    'Airavata\\API\\Workflow_getWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
+    'Airavata\\API\\Workflow_getWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
+    'Airavata\\API\\Workflow_isWorkflowExistWithName_args' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
+    'Airavata\\API\\Workflow_isWorkflowExistWithName_result' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
+    'Airavata\\API\\Workflow_registerWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
+    'Airavata\\API\\Workflow_registerWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
+    'Airavata\\API\\Workflow_updateWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
+    'Airavata\\API\\Workflow_updateWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
+    'Airavata\\Client\\AiravataClientFactory' => $baseDir . '/app/libraries/AiravataClientFactory.php',
+    'Airavata\\Model\\AppCatalog\\AppDeployment\\ApplicationDeploymentDescription' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/AppDeployment/Types.php',
+    'Airavata\\Model\\AppCatalog\\AppDeployment\\ApplicationModule' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/AppDeployment/Types.php',
+    'Airavata\\Model\\AppCatalog\\AppDeployment\\ApplicationParallelismType' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/AppDeployment/Types.php',
+    'Airavata\\Model\\AppCatalog\\AppDeployment\\SetEnvPaths' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/AppDeployment/Types.php',
+    'Airavata\\Model\\AppCatalog\\AppInterface\\ApplicationInterfaceDescription' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/AppInterface/Types.php',
+    'Airavata\\Model\\AppCatalog\\AppInterface\\DataType' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/AppInterface/Types.php',
+    'Airavata\\Model\\AppCatalog\\AppInterface\\InputDataObjectType' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/AppInterface/Types.php',
+    'Airavata\\Model\\AppCatalog\\AppInterface\\OutputDataObjectType' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/AppInterface/Types.php',
+    'Airavata\\Model\\AppCatalog\\ApplicationDeployment' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
+    'Airavata\\Model\\AppCatalog\\ApplicationDescriptor' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
+    'Airavata\\Model\\AppCatalog\\ApplicationInterface' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResourceDescription' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\BatchQueue' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\CloudJobSubmission' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\ComputeResourceDescription' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\DataMovementInterface' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\DataMovementProtocol' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\FileSystems' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\GlobusJobSubmission' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\GridFTPDataMovement' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\JobManagerCommand' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\JobSubmissionInterface' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\JobSubmissionProtocol' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\LOCALDataMovement' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\LOCALSubmission' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\MonitorMode' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\ProviderName' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\ResourceJobManager' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\ResourceJobManagerType' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\SCPDataMovement' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\SSHJobSubmission' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\SecurityProtocol' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\UnicoreDataMovement' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\ComputeResource\\UnicoreJobSubmission' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
+    'Airavata\\Model\\AppCatalog\\DataMovementProtocol' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
+    'Airavata\\Model\\AppCatalog\\GSISSHJobSubmission' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
+    'Airavata\\Model\\AppCatalog\\GatewayProfile\\ComputeResourcePreference' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/GatewayProfile/Types.php',
+    'Airavata\\Model\\AppCatalog\\GatewayProfile\\GatewayResourceProfile' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/GatewayProfile/Types.php',
+    'Airavata\\Model\\AppCatalog\\GlobusJobSubmission' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
+    'Airavata\\Model\\AppCatalog\\GridFTPDataMovement' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
+    'Airavata\\Model\\AppCatalog\\JobSubmissionProtocol' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
+    'Airavata\\Model\\AppCatalog\\ResourceJobManager' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
+    'Airavata\\Model\\AppCatalog\\SCPDataMovement' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
+    'Airavata\\Model\\AppCatalog\\SSHJobSubmission' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
+    'Airavata\\Model\\AppCatalog\\SecurityProtocol' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
+    'Airavata\\Model\\Messaging\\Event\\ExperimentStatusChangeEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
+    'Airavata\\Model\\Messaging\\Event\\JobIdentifier' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
+    'Airavata\\Model\\Messaging\\Event\\JobStatusChangeEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
+    'Airavata\\Model\\Messaging\\Event\\JobStatusChangeRequestEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
+    'Airavata\\Model\\Messaging\\Event\\Message' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
+    'Airavata\\Model\\Messaging\\Event\\MessageLevel' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
+    'Airavata\\Model\\Messaging\\Event\\MessageType' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
+    'Airavata\\Model\\Messaging\\Event\\ProcessSubmitEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
+    'Airavata\\Model\\Messaging\\Event\\TaskIdentifier' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
+    'Airavata\\Model\\Messaging\\Event\\TaskOutputChangeEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
+    'Airavata\\Model\\Messaging\\Event\\TaskStatusChangeEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
+    'Airavata\\Model\\Messaging\\Event\\TaskStatusChangeRequestEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
+    'Airavata\\Model\\Messaging\\Event\\TaskSubmitEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
+    'Airavata\\Model\\Messaging\\Event\\TaskTerminateEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
+    'Airavata\\Model\\Messaging\\Event\\WorkflowIdentifier' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
+    'Airavata\\Model\\Messaging\\Event\\WorkflowNodeStatusChangeEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
+    'Airavata\\Model\\Workflow' => $baseDir . '/app/libraries/Airavata/Model/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\ActionableGroup' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\AdvancedInputDataHandling' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\AdvancedOutputDataHandling' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\ApplicationStatus' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\ComputationalResourceScheduling' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\CorrectiveAction' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\DataTransferDetails' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\ErrorCategory' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\ErrorDetails' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\ExecutionUnit' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\Experiment' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\ExperimentState' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\ExperimentStatus' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\ExperimentSummary' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\JobDetails' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\JobState' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\JobStatus' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\QualityOfServiceParams' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\TaskDetails' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\TaskState' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\TaskStatus' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\TransferState' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\TransferStatus' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\UserConfigurationData' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\ValidationResults' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\ValidatorResult' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\WorkflowNodeDetails' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\WorkflowNodeState' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Experiment\\WorkflowNodeStatus' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
+    'Airavata\\Model\\Workspace\\Gateway' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Types.php',
+    'Airavata\\Model\\Workspace\\Group' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Types.php',
+    'Airavata\\Model\\Workspace\\Project' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Types.php',
+    'Airavata\\Model\\Workspace\\User' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Types.php',
+    'AppUtilities' => $baseDir . '/app/libraries/AppUtilities.php',
+    'ApplicationController' => $baseDir . '/app/controllers/ApplicationController.php',
+    'Authenticate' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'AuthenticateResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'BaseController' => $baseDir . '/app/controllers/BaseController.php',
+    'Boris\\Boris' => $vendorDir . '/d11wtq/boris/lib/Boris/Boris.php',
+    'Boris\\CLIOptionsHandler' => $vendorDir . '/d11wtq/boris/lib/Boris/CLIOptionsHandler.php',
+    'Boris\\ColoredInspector' => $vendorDir . '/d11wtq/boris/lib/Boris/ColoredInspector.php',
+    'Boris\\Config' => $vendorDir . '/d11wtq/boris/lib/Boris/Config.php',
+    'Boris\\DumpInspector' => $vendorDir . '/d11wtq/boris/lib/Boris/DumpInspector.php',
+    'Boris\\EvalWorker' => $vendorDir . '/d11wtq/boris/lib/Boris/EvalWorker.php',
+    'Boris\\ExportInspector' => $vendorDir . '/d11wtq/boris/lib/Boris/ExportInspector.php',
+    'Boris\\Inspector' => $vendorDir . '/d11wtq/boris/lib/Boris/Inspector.php',
+    'Boris\\ReadlineClient' => $vendorDir . '/d11wtq/boris/lib/Boris/ReadlineClient.php',
+    'Boris\\ShallowParser' => $vendorDir . '/d11wtq/boris/lib/Boris/ShallowParser.php',
+    'CRUtilities' => $baseDir . '/app/libraries/CRUtilities.php',
+    'Carbon\\Carbon' => $vendorDir . '/nesbot/carbon/src/Carbon/Carbon.php',
+    'ClaimDTO' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'ClaimValue' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'ClassPreloader\\Application' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/Application.php',
+    'ClassPreloader\\ClassList' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/ClassList.php',
+    'ClassPreloader\\ClassLoader' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/ClassLoader.php',
+    'ClassPreloader\\ClassNode' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/ClassNode.php',
+    'ClassPreloader\\Command\\PreCompileCommand' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/Command/PreCompileCommand.php',
+    'ClassPreloader\\Config' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/Config.php',
+    'ClassPreloader\\Parser\\AbstractNodeVisitor' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/Parser/AbstractNodeVisitor.php',
+    'ClassPreloader\\Parser\\DirVisitor' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/Parser/DirVisitor.php',
+    'ClassPreloader\\Parser\\FileVisitor' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/Parser/FileVisitor.php',
+    'ClassPreloader\\Parser\\NodeTraverser' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/Parser/NodeTraverser.php',
+    'ComputeResource' => $baseDir . '/app/controllers/ComputeResource.php',
+    'Constant' => $baseDir . '/app/models/Constant.php',
+    'Crypt_AES' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/AES.php',
+    'Crypt_Base' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Base.php',
+    'Crypt_Blowfish' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php',
+    'Crypt_DES' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/DES.php',
+    'Crypt_Hash' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Hash.php',
+    'Crypt_RC2' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/RC2.php',
+    'Crypt_RC4' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/RC4.php',
+    'Crypt_RSA' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/RSA.php',
+    'Crypt_Rijndael' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php',
+    'Crypt_TripleDES' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.php',
+    'Crypt_Twofish' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php',
+    'DatabaseSeeder' => $baseDir . '/app/database/seeds/DatabaseSeeder.php',
+    'DeleteRole' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'DeleteUser' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'DeleteUserClaimValue' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'DeleteUserClaimValues' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'ExpUtilities' => $baseDir . '/app/libraries/ExpUtilities.php',
+    'ExperimentController' => $baseDir . '/app/controllers/ExperimentController.php',
+    'File_ANSI' => $vendorDir . '/phpseclib/phpseclib/phpseclib/File/ANSI.php',
+    'File_ASN1' => $vendorDir . '/phpseclib/phpseclib/phpseclib/File/ASN1.php',
+    'File_ASN1_Element' => $vendorDir . '/phpseclib/phpseclib/phpseclib/File/ASN1.php',
+    'File_X509' => $vendorDir . '/phpseclib/phpseclib/phpseclib/File/X509.php',
+    'GatewayprofileController' => $baseDir . '/app/controllers/GatewayprofileController.php',
+    'GetAllProfileNames' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetAllProfileNamesResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetHybridRoles' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetHybridRolesResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetPasswordExpirationTime' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetPasswordExpirationTimeResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetProfileNames' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetProfileNamesResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetProperties' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetPropertiesResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetRoleListOfUser' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetRoleNames' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetRoleNamesResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetTenantId' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetTenantIdResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetTenantIdofUser' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetTenantIdofUserResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetUserClaimValue' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetUserClaimValueResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetUserClaimValues' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetUserClaimValuesForClaims' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetUserClaimValuesForClaimsResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetUserClaimValuesResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetUserId' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetUserIdResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetUserList' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetUserListOfRole' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetUserListOfRoleResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'GetUserListResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
+    'HomeController' => $baseDir . '/app/controllers/HomeController.php',
+    'IdUtilities' => $baseDir . '/app/libraries/id_utilities.php',
+    'IlluminateQueueClosure' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/IlluminateQueueClosure.php',
+    'Illuminate\\Auth\\AuthManager' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/AuthManager.php',
+    'Illuminate\\Auth\\AuthServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/AuthServiceProvider.php',
+    'Illuminate\\Auth\\Console\\ClearRemindersCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Console/ClearRemindersCommand.php',
+    'Illuminate\\Auth\\Console\\RemindersControllerCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Console/RemindersControllerCommand.php',
+    'Illuminate\\Auth\\Console\\RemindersTableCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Console/RemindersTableCommand.php',
+    'Illuminate\\Auth\\DatabaseUserProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/DatabaseUserProvider.php',
+    'Illuminate\\Auth\\EloquentUserProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php',
+    'Illuminate\\Auth\\GenericUser' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/GenericUser.php',
+    'Illuminate\\Auth\\Guard' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Guard.php',
+    'Illuminate\\Auth\\Reminders\\DatabaseReminderRepository' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Reminders/DatabaseReminderRepository.php',
+    'Illuminate\\Auth\\Reminders\\PasswordBroker' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Reminders/PasswordBroker.php',
+    'Illuminate\\Auth\\Reminders\\RemindableInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Reminders/RemindableInterface.php',
+    'Illuminate\\Auth\\Reminders\\RemindableTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Reminders/RemindableTrait.php',
+    'Illuminate\\Auth\\Reminders\\ReminderRepositoryInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Reminders/ReminderRepositoryInterface.php',
+    'Illuminate\\Auth\\Reminders\\ReminderServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Reminders/ReminderServiceProvider.php',
+    'Illuminate\\Auth\\UserInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/UserInterface.php',
+    'Illuminate\\Auth\\UserProviderInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/UserProviderInterface.php',
+    'Illuminate\\Auth\\UserTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/UserTrait.php',
+    'Illuminate\\Cache\\ApcStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/ApcStore.php',
+    'Illuminate\\Cache\\ApcWrapper' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/ApcWrapper.php',
+    'Illuminate\\Cache\\ArrayStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/ArrayStore.php',
+    'Illuminate\\Cache\\CacheManager' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/CacheManager.php',
+    'Illuminate\\Cache\\CacheServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php',
+    'Illuminate\\Cache\\Console\\CacheTableCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/Console/CacheTableCommand.php',
+    'Illuminate\\Cache\\Console\\ClearCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/Console/ClearCommand.php',
+    'Illuminate\\Cache\\DatabaseStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/DatabaseStore.php',
+    'Illuminate\\Cache\\FileStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/FileStore.php',
+    'Illuminate\\Cache\\MemcachedConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/MemcachedConnector.php',
+    'Illuminate\\Cache\\MemcachedStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/MemcachedStore.php',
+    'Illuminate\\Cache\\NullStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/NullStore.php',
+    'Illuminate\\Cache\\RedisStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/RedisStore.php',
+    'Illuminate\\Cache\\RedisTaggedCache' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/RedisTaggedCache.php',
+    'Illuminate\\Cache\\Repository' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/Repository.php',
+    'Illuminate\\Cache\\StoreInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/StoreInterface.php',
+    'Illuminate\\Cache\\TagSet' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/TagSet.php',
+    'Illuminate\\Cache\\TaggableStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/TaggableStore.php',
+    'Illuminate\\Cache\\TaggedCache' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/TaggedCache.php',
+    'Illuminate\\Cache\\WinCacheStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/WinCacheStore.php',
+    'Illuminate\\Cache\\XCacheStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/XCacheStore.php',
+    'Illuminate\\Config\\EnvironmentVariables' => $vendorDir . '/laravel/framework/src/Illuminate/Config/EnvironmentVariables.php',
+    'Illuminate\\Config\\EnvironmentVariablesLoaderInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Config/EnvironmentVariablesLoaderInterface.php',
+    'Illuminate\\Config\\FileEnvironmentVariablesLoader' => $vendorDir . '/laravel/framework/src/Illuminate/Config/FileEnvironmentVariablesLoader.php',
+    'Illuminate\\Config\\FileLoader' => $vendorDir . '/laravel/framework/src/Illuminate/Config/FileLoader.php',
+    'Illuminate\\Config\\LoaderInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Config/LoaderInterface.php',
+    'Illuminate\\Config\\Repository' => $vendorDir . '/laravel/framework/src/Illuminate/Config/Repository.php',
+    'Illuminate\\Console\\Application' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Application.php',
+    'Illuminate\\Console\\Command' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Command.php',
+    'Illuminate\\Console\\ConfirmableTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Console/ConfirmableTrait.php',
+    'Illuminate\\Container\\BindingResolutionException' => $vendorDir . '/laravel/framework/src/Illuminate/Container/BindingResolutionException.php',
+    'Illuminate\\Container\\Container' => $vendorDir . '/laravel/framework/src/Illuminate/Container/Container.php',
+    'Illuminate\\Cookie\\CookieJar' => $vendorDir . '/laravel/framework/src/Illuminate/Cookie/CookieJar.php',
+    'Illuminate\\Cookie\\CookieServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Cookie/CookieServiceProvider.php',
+    'Illuminate\\Cookie\\Guard' => $vendorDir . '/laravel/framework/src/Illuminate/Cookie/Guard.php',
+    'Illuminate\\Cookie\\Queue' => $vendorDir . '/laravel/framework/src/Illuminate/Cookie/Queue.php',
+    'Illuminate\\Database\\Capsule\\Manager' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Capsule/Manager.php',
+    'Illuminate\\Database\\Connection' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Connection.php',
+    'Illuminate\\Database\\ConnectionInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Database/ConnectionInterface.php',
+    'Illuminate\\Database\\ConnectionResolver' => $vendorDir . '/laravel/framework/src/Illuminate/Database/ConnectionResolver.php',
+    'Illuminate\\Database\\ConnectionResolverInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Database/ConnectionResolverInterface.php',
+    'Illuminate\\Database\\Connectors\\ConnectionFactory' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php',
+    'Illuminate\\Database\\Connectors\\Connector' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Connectors/Connector.php',
+    'Illuminate\\Database\\Connectors\\ConnectorInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Connectors/ConnectorInterface.php',
+    'Illuminate\\Database\\Connectors\\MySqlConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php',
+    'Illuminate\\Database\\Connectors\\PostgresConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Connectors/PostgresConnector.php',
+    'Illuminate\\Database\\Connectors\\SQLiteConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Connectors/SQLiteConnector.php',
+    'Illuminate\\Database\\Connectors\\SqlServerConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Connectors/SqlServerConnector.php',
+    'Illuminate\\Database\\Console\\Migrations\\BaseCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Migrations/BaseCommand.php',
+    'Illuminate\\Database\\Console\\Migrations\\InstallCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Migrations/InstallCommand.php',
+    'Illuminate\\Database\\Console\\Migrations\\MigrateCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php',
+    'Illuminate\\Database\\Console\\Migrations\\MigrateMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php',
+    'Illuminate\\Database\\Console\\Migrations\\RefreshCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Migrations/RefreshCommand.php',
+    'Illuminate\\Database\\Console\\Migrations\\ResetCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Migrations/ResetCommand.php',
+    'Illuminate\\Database\\Console\\Migrations\\RollbackCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Migrations/RollbackCommand.php',
+    'Illuminate\\Database\\Console\\SeedCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/SeedCommand.php',
+    'Illuminate\\Database\\DatabaseManager' => $vendorDir . '/laravel/framework/src/Illuminate/Database/DatabaseManager.php',
+    'Illuminate\\Database\\DatabaseServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Database/DatabaseServiceProvider.php',
+    'Illuminate\\Database\\Eloquent\\Builder' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php',
+    'Illuminate\\Database\\Eloquent\\Collection' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php',
+    'Illuminate\\Database\\Eloquent\\MassAssignmentException' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/MassAssignmentException.php',
+    'Illuminate\\Database\\Eloquent\\Model' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Model.php',
+    'Illuminate\\Database\\Eloquent\\ModelNotFoundException' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/ModelNotFoundException.php',
+    'Illuminate\\Database\\Eloquent\\Relations\\BelongsTo' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php',
+    'Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php',
+    'Illuminate\\Database\\Eloquent\\Relations\\HasMany' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasMany.php',
+    'Illuminate\\Database\\Eloquent\\Relations\\HasManyThrough' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasManyThrough.php',
+    'Illuminate\\Database\\Eloquent\\Relations\\HasOne' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOne.php',
+    'Illuminate\\Database\\Eloquent\\Relations\\HasOneOrMany' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php',
+    'Illuminate\\Database\\Eloquent\\Relations\\MorphMany' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphMany.php',
+    'Illuminate\\Database\\Eloquent\\Relations\\MorphOne' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOne.php',
+    'Illuminate\\Database\\Eloquent\\Relations\\MorphOneOrMany' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOneOrMany.php',
+    'Illuminate\\Database\\Eloquent\\Relations\\MorphPivot' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphPivot.php',
+    'Illuminate\\Database\\Eloquent\\Relations\\MorphTo' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphTo.php',
+    'Illuminate\\Database\\Eloquent\\Relations\\MorphToMany' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphToMany.php',
+    'Illuminate\\Database\\Eloquent\\Relations\\Pivot' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Pivot.php',
+    'Illuminate\\Database\\Eloquent\\Relations\\Relation' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Relation.php',
+    'Illuminate\\Database\\Eloquent\\ScopeInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/ScopeInterface.php',
+    'Illuminate\\Database\\Eloquent\\SoftDeletingScope' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingScope.php',
+    'Illuminate\\Database\\Eloquent\\SoftDeletingTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingTrait.php',
+    'Illuminate\\Database\\Grammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Grammar.php',
+    'Illuminate\\Database\\MigrationServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Database/MigrationServiceProvider.php',
+    'Illuminate\\Database\\Migrations\\DatabaseMigrationRepository' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Migrations/DatabaseMigrationRepository.php',
+    'Illuminate\\Database\\Migrations\\Migration' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Migrations/Migration.php',
+    'Illuminate\\Database\\Migrations\\MigrationCreator' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Migrations/MigrationCreator.php',
+    'Illuminate\\Database\\Migrations\\MigrationRepositoryInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Migrations/MigrationRepositoryInterface.php',
+    'Illuminate\\Database\\Migrations\\Migrator' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php',
+    'Illuminate\\Database\\MySqlConnection' => $vendorDir . '/laravel/framework/src/Illuminate/Database/MySqlConnection.php',
+    'Illuminate\\Database\\PostgresConnection' => $vendorDir . '/laravel/framework/src/Illuminate/Database/PostgresConnection.php',
+    'Illuminate\\Database\\QueryException' => $vendorDir . '/laravel/framework/src/Illuminate/Database/QueryException.php',
+    'Illuminate\\Database\\Query\\Builder' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Builder.php',
+    'Illuminate\\Database\\Query\\Expression' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Expression.php',
+    'Illuminate\\Database\\Query\\Grammars\\Grammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php',
+    'Illuminate\\Database\\Query\\Grammars\\MySqlGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php',
+    'Illuminate\\Database\\Query\\Grammars\\PostgresGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php',
+    'Illuminate\\Database\\Query\\Grammars\\SQLiteGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php',
+    'Illuminate\\Database\\Query\\Grammars\\SqlServerGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php',
+    'Illuminate\\Database\\Query\\JoinClause' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/JoinClause.php',
+    'Illuminate\\Database\\Query\\Processors\\MySqlProcessor' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Processors/MySqlProcessor.php',
+    'Illuminate\\Database\\Query\\Processors\\PostgresProcessor' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Processors/PostgresProcessor.php',
+    'Illuminate\\Database\\Query\\Processors\\Processor' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php',
+    'Illuminate\\Database\\Query\\Processors\\SQLiteProcessor' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Processors/SQLiteProcessor.php',
+    'Illuminate\\Database\\Query\\Processors\\SqlServerProcessor' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Processors/SqlServerProcessor.php',
+    'Illuminate\\Database\\SQLiteConnection' => $vendorDir . '/laravel/framework/src/Illuminate/Database/SQLiteConnection.php',
+    'Illuminate\\Database\\Schema\\Blueprint' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php',
+    'Illuminate\\Database\\Schema\\Builder' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Builder.php',
+    'Illuminate\\Database\\Schema\\Grammars\\Grammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/Grammar.php',
+    'Illuminate\\Database\\Schema\\Grammars\\MySqlGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php',
+    'Illuminate\\Database\\Schema\\Grammars\\PostgresGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php',
+    'Illuminate\\Database\\Schema\\Grammars\\SQLiteGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/SQLiteGrammar.php',
+    'Illuminate\\Database\\Schema\\Grammars\\SqlServerGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php',
+    'Illuminate\\Database\\Schema\\MySqlBuilder' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/MySqlBuilder.php',
+    'Illuminate\\Database\\SeedServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Database/SeedServiceProvider.php',
+    'Illuminate\\Database\\Seeder' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Seeder.php',
+    'Illuminate\\Database\\SqlServerConnection' => $vendorDir . '/laravel/framework/src/Illuminate/Database/SqlServerConnection.php',
+    'Illuminate\\Encryption\\DecryptException' => $vendorDir . '/laravel/framework/src/Illuminate/Encryption/DecryptException.php',
+    'Illuminate\\Encryption\\Encrypter' => $vendorDir . '/laravel/framework/src/Illuminate/Encryption/Encrypter.php',
+    'Illuminate\\Encryption\\EncryptionServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php',
+    'Illuminate\\Encryption\\InvalidKeyException' => $vendorDir . '/laravel/framework/src/Illuminate/Encryption/InvalidKeyException.php',
+    'Illuminate\\Events\\Dispatcher' => $vendorDir . '/laravel/framework/src/Illuminate/Events/Dispatcher.php',
+    'Illuminate\\Events\\EventServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Events/EventServiceProvider.php',
+    'Illuminate\\Exception\\ExceptionDisplayerInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Exception/ExceptionDisplayerInterface.php',
+    'Illuminate\\Exception\\ExceptionServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Exception/ExceptionServiceProvider.php',
+    'Illuminate\\Exception\\Handler' => $vendorDir . '/laravel/framework/src/Illuminate/Exception/Handler.php',
+    'Illuminate\\Exception\\PlainDisplayer' => $vendorDir . '/laravel/framework/src/Illuminate/Exception/PlainDisplayer.php',
+    'Illuminate\\Exception\\SymfonyDisplayer' => $vendorDir . '/laravel/framework/src/Illuminate/Exception/SymfonyDisplayer.php',
+    'Illuminate\\Exception\\WhoopsDisplayer' => $vendorDir . '/laravel/framework/src/Illuminate/Exception/WhoopsDisplayer.php',
+    'Illuminate\\Filesystem\\FileNotFoundException' => $vendorDir . '/laravel/framework/src/Illuminate/Filesystem/FileNotFoundException.php',
+    'Illuminate\\Filesystem\\Filesystem' => $vendorDir . '/laravel/framework/src/Illuminate/Filesystem/Filesystem.php',
+    'Illuminate\\Filesystem\\FilesystemServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php',
+    'Illuminate\\Foundation\\AliasLoader' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/AliasLoader.php',
+    'Illuminate\\Foundation\\Application' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Application.php',
+    'Illuminate\\Foundation\\Artisan' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Artisan.php',
+    'Illuminate\\Foundation\\AssetPublisher' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/AssetPublisher.php',
+    'Illuminate\\Foundation\\Composer' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Composer.php',
+    'Illuminate\\Foundation\\ConfigPublisher' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/ConfigPublisher.php',
+    'Illuminate\\Foundation\\Console\\AssetPublishCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/AssetPublishCommand.php',
+    'Illuminate\\Foundation\\Console\\AutoloadCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/AutoloadCommand.php',
+    'Illuminate\\Foundation\\Console\\ChangesCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ChangesCommand.php',
+    'Illuminate\\Foundation\\Console\\ClearCompiledCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ClearCompiledCommand.php',
+    'Illuminate\\Foundation\\Console\\CommandMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/CommandMakeCommand.php',
+    'Illuminate\\Foundation\\Console\\ConfigPublishCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ConfigPublishCommand.php',
+    'Illuminate\\Foundation\\Console\\DownCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/DownCommand.php',
+    'Illuminate\\Foundation\\Console\\EnvironmentCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/EnvironmentCommand.php',
+    'Illuminate\\Foundation\\Console\\KeyGenerateCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/KeyGenerateCommand.php',
+    'Illuminate\\Foundation\\Console\\MigratePublishCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/MigratePublishCommand.php',
+    'Illuminate\\Foundation\\Console\\OptimizeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/OptimizeCommand.php',
+    'Illuminate\\Foundation\\Console\\RoutesCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/RoutesCommand.php',
+    'Illuminate\\Foundation\\Console\\ServeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php',
+    'Illuminate\\Foundation\\Console\\TailCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/TailCommand.php',
+    'Illuminate\\Foundation\\Console\\TinkerCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/TinkerCommand.php',
+    'Illuminate\\Foundation\\Console\\UpCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/UpCommand.php',
+    'Illuminate\\Foundation\\Console\\ViewPublishCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ViewPublishCommand.php',
+    'Illuminate\\Foundation\\EnvironmentDetector' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/EnvironmentDetector.php',
+    'Illuminate\\Foundation\\MigrationPublisher' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/MigrationPublisher.php',
+    'Illuminate\\Foundation\\ProviderRepository' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php',
+    'Illuminate\\Foundation\\Providers\\ArtisanServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/ArtisanServiceProvider.php',
+    'Illuminate\\Foundation\\Providers\\CommandCreatorServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/CommandCreatorServiceProvider.php',
+    'Illuminate\\Foundation\\Providers\\ComposerServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/ComposerServiceProvider.php',
+    'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/ConsoleSupportServiceProvider.php',
+    'Illuminate\\Foundation\\Providers\\KeyGeneratorServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/KeyGeneratorServiceProvider.php',
+    'Illuminate\\Foundation\\Providers\\MaintenanceServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/MaintenanceServiceProvider.php',
+    'Illuminate\\Foundation\\Providers\\OptimizeServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/OptimizeServiceProvider.php',
+    'Illuminate\\Foundation\\Providers\\PublisherServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/PublisherServiceProvider.php',
+    'Illuminate\\Foundation\\Providers\\RouteListServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/RouteListServiceProvider.php',
+    'Illuminate\\Foundation\\Providers\\ServerServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/ServerServiceProvider.php',
+    'Illuminate\\Foundation\\Providers\\TinkerServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/TinkerServiceProvider.php',
+    'Illuminate\\Foundation\\Testing\\ApplicationTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/ApplicationTrait.php',
+    'Illuminate\\Foundation\\Testing\\AssertionsTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/AssertionsTrait.php',
+    'Illuminate\\Foundation\\Testing\\Client' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/Client.php',
+    'Illuminate\\Foundation\\Testing\\TestCase' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php',
+    'Illuminate\\Foundation\\ViewPublisher' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/ViewPublisher.php',
+    'Illuminate\\Hashing\\BcryptHasher' => $vendorDir . '/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php',
+    'Illuminate\\Hashing\\HashServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Hashing/HashServiceProvider.php',
+    'Illuminate\\Hashing\\HasherInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Hashing/HasherInterface.php',
+    'Illuminate\\Html\\FormBuilder' => $vendorDir . '/laravel/framework/src/Illuminate/Html/FormBuilder.php',
+    'Illuminate\\Html\\HtmlBuilder' => $vendorDir . '/laravel/framework/src/Illuminate/Html/HtmlBuilder.php',
+    'Illuminate\\Html\\HtmlServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Html/HtmlServiceProvider.php',
+    'Illuminate\\Http\\FrameGuard' => $vendorDir . '/laravel/framework/src/Illuminate/Http/FrameGuard.php',
+    'Illuminate\\Http\\JsonResponse' => $vendorDir . '/laravel/framework/src/Illuminate/Http/JsonResponse.php',
+    'Illuminate\\Http\\RedirectResponse' => $vendorDir . '/laravel/framework/src/Illuminate/Http/RedirectResponse.php',
+    'Illuminate\\Http\\Request' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Request.php',
+    'Illuminate\\Http\\Response' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Response.php',
+    'Illuminate\\Http\\ResponseTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Http/ResponseTrait.php',
+    'Illuminate\\Log\\LogServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Log/LogServiceProvider.php',
+    'Illuminate\\Log\\Writer' => $vendorDir . '/laravel/framework/src/Illuminate/Log/Writer.php',
+    'Illuminate\\Mail\\MailServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/MailServiceProvider.php',
+    'Illuminate\\Mail\\Mailer' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Mailer.php',
+    'Illuminate\\Mail\\Message' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Message.php',
+    'Illuminate\\Mail\\Transport\\LogTransport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/LogTransport.php',
+    'Illuminate\\Mail\\Transport\\MailgunTransport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/MailgunTransport.php',
+    'Illuminate\\Mail\\Transport\\MandrillTransport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/MandrillTransport.php',
+    'Illuminate\\Pagination\\BootstrapPresenter' => $vendorDir . '/laravel/framework/src/Illuminate/Pagination/BootstrapPresenter.php',
+    'Illuminate\\Pagination\\Factory' => $vendorDir . '/laravel/framework/src/Illuminate/Pagination/Factory.php',
+    'Illuminate\\Pagination\\PaginationServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Pagination/PaginationServiceProvider.php',
+    'Illuminate\\Pagination\\Paginator' => $vendorDir . '/laravel/framework/src/Illuminate/Pagination/Paginator.php',
+    'Illuminate\\Pagination\\Presenter' => $vendorDir . '/laravel/framework/src/Illuminate/Pagination/Presenter.php',
+    'Illuminate\\Queue\\BeanstalkdQueue' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/BeanstalkdQueue.php',
+    'Illuminate\\Queue\\Capsule\\Manager' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Capsule/Manager.php',
+    'Illuminate\\Queue\\Connectors\\BeanstalkdConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Connectors/BeanstalkdConnector.php',
+    'Illuminate\\Queue\\Connectors\\ConnectorInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Connectors/ConnectorInterface.php',
+    'Illuminate\\Queue\\Connectors\\IronConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Connectors/IronConnector.php',
+    'Illuminate\\Queue\\Connectors\\RedisConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Connectors/RedisConnector.php',
+    'Illuminate\\Queue\\Connectors\\SqsConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Connectors/SqsConnector.php',
+    'Illuminate\\Queue\\Connectors\\SyncConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Connectors/SyncConnector.php',
+    'Illuminate\\Queue\\Console\\FailedTableCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Console/FailedTableCommand.php',
+    'Illuminate\\Queue\\Console\\FlushFailedCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Console/FlushFailedCommand.php',
+    'Illuminate\\Queue\\Console\\ForgetFailedCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Console/ForgetFailedCommand.php',
+    'Illuminate\\Queue\\Console\\ListFailedCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Console/ListFailedCommand.php',
+    'Illuminate\\Queue\\Console\\ListenCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Console/ListenCommand.php',
+    'Illuminate\\Queue\\Console\\RestartCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Console/RestartCommand.php',
+    'Illuminate\\Queue\\Console\\RetryCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Console/RetryCommand.php',
+    'Illuminate\\Queue\\Console\\SubscribeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Console/SubscribeCommand.php',
+    'Illuminate\\Queue\\Console\\WorkCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php',
+    'Illuminate\\Queue\\FailConsoleServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/FailConsoleServiceProvider.php',
+    'Illuminate\\Queue\\Failed\\DatabaseFailedJobProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Failed/DatabaseFailedJobProvider.php',
+    'Illuminate\\Queue\\Failed\\FailedJobProviderInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Failed/FailedJobProviderInterface.php',
+    'Illuminate\\Queue\\IronQueue' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/IronQueue.php',
+    'Illuminate\\Queue\\Jobs\\BeanstalkdJob' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Jobs/BeanstalkdJob.php',
+    'Illuminate\\Queue\\Jobs\\IronJob' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Jobs/IronJob.php',
+    'Illuminate\\Queue\\Jobs\\Job' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Jobs/Job.php',
+    'Illuminate\\Queue\\Jobs\\RedisJob' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Jobs/RedisJob.php',
+    'Illuminate\\Queue\\Jobs\\SqsJob' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Jobs/SqsJob.php',
+    'Illuminate\\Queue\\Jobs\\SyncJob' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Jobs/SyncJob.php',
+    'Illuminate\\Queue\\Listener' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Listener.php',
+    'Illuminate\\Queue\\Queue' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Queue.php',
+    'Illuminate\\Queue\\QueueInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/QueueInterfac

<TRUNCATED>

[05/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php b/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php
new file mode 100755
index 0000000..bd66ab3
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php
@@ -0,0 +1,199 @@
+<?php namespace Illuminate\Session;
+
+use Illuminate\Support\Manager;
+use Symfony\Component\HttpFoundation\Session\Storage\Handler\NullSessionHandler;
+
+class SessionManager extends Manager {
+
+	/**
+	 * Call a custom driver creator.
+	 *
+	 * @param  string  $driver
+	 * @return mixed
+	 */
+	protected function callCustomCreator($driver)
+	{
+		return $this->buildSession(parent::callCustomCreator($driver));
+	}
+
+	/**
+	 * Create an instance of the "array" session driver.
+	 *
+	 * @return \Illuminate\Session\Store
+	 */
+	protected function createArrayDriver()
+	{
+		return new Store($this->app['config']['session.cookie'], new NullSessionHandler);
+	}
+
+	/**
+	 * Create an instance of the "cookie" session driver.
+	 *
+	 * @return \Illuminate\Session\Store
+	 */
+	protected function createCookieDriver()
+	{
+		$lifetime = $this->app['config']['session.lifetime'];
+
+		return $this->buildSession(new CookieSessionHandler($this->app['cookie'], $lifetime));
+	}
+
+	/**
+	 * Create an instance of the file session driver.
+	 *
+	 * @return \Illuminate\Session\Store
+	 */
+	protected function createFileDriver()
+	{
+		return $this->createNativeDriver();
+	}
+
+	/**
+	 * Create an instance of the file session driver.
+	 *
+	 * @return \Illuminate\Session\Store
+	 */
+	protected function createNativeDriver()
+	{
+		$path = $this->app['config']['session.files'];
+
+		return $this->buildSession(new FileSessionHandler($this->app['files'], $path));
+	}
+
+	/**
+	 * Create an instance of the database session driver.
+	 *
+	 * @return \Illuminate\Session\Store
+	 */
+	protected function createDatabaseDriver()
+	{
+		$connection = $this->getDatabaseConnection();
+
+		$table = $this->app['config']['session.table'];
+
+		return $this->buildSession(new DatabaseSessionHandler($connection, $table));
+	}
+
+	/**
+	 * Get the database connection for the database driver.
+	 *
+	 * @return \Illuminate\Database\Connection
+	 */
+	protected function getDatabaseConnection()
+	{
+		$connection = $this->app['config']['session.connection'];
+
+		return $this->app['db']->connection($connection);
+	}
+
+	/**
+	 * Create an instance of the APC session driver.
+	 *
+	 * @return \Illuminate\Session\Store
+	 */
+	protected function createApcDriver()
+	{
+		return $this->createCacheBased('apc');
+	}
+
+	/**
+	 * Create an instance of the Memcached session driver.
+	 *
+	 * @return \Illuminate\Session\Store
+	 */
+	protected function createMemcachedDriver()
+	{
+		return $this->createCacheBased('memcached');
+	}
+
+	/**
+	 * Create an instance of the Wincache session driver.
+	 *
+	 * @return \Illuminate\Session\Store
+	 */
+	protected function createWincacheDriver()
+	{
+		return $this->createCacheBased('wincache');
+	}
+
+	/**
+	 * Create an instance of the Redis session driver.
+	 *
+	 * @return \Illuminate\Session\Store
+	 */
+	protected function createRedisDriver()
+	{
+		$handler = $this->createCacheHandler('redis');
+
+		$handler->getCache()->getStore()->setConnection($this->app['config']['session.connection']);
+
+		return $this->buildSession($handler);
+	}
+
+	/**
+	 * Create an instance of a cache driven driver.
+	 *
+	 * @param  string  $driver
+	 * @return \Illuminate\Session\Store
+	 */
+	protected function createCacheBased($driver)
+	{
+		return $this->buildSession($this->createCacheHandler($driver));
+	}
+
+	/**
+	 * Create the cache based session handler instance.
+	 *
+	 * @param  string  $driver
+	 * @return \Illuminate\Session\CacheBasedSessionHandler
+	 */
+	protected function createCacheHandler($driver)
+	{
+		$minutes = $this->app['config']['session.lifetime'];
+
+		return new CacheBasedSessionHandler($this->app['cache']->driver($driver), $minutes);
+	}
+
+	/**
+	 * Build the session instance.
+	 *
+	 * @param  \SessionHandlerInterface  $handler
+	 * @return \Illuminate\Session\Store
+	 */
+	protected function buildSession($handler)
+	{
+		return new Store($this->app['config']['session.cookie'], $handler);
+	}
+
+	/**
+	 * Get the session configuration.
+	 *
+	 * @return array
+	 */
+	public function getSessionConfig()
+	{
+		return $this->app['config']['session'];
+	}
+
+	/**
+	 * Get the default session driver name.
+	 *
+	 * @return string
+	 */
+	public function getDefaultDriver()
+	{
+		return $this->app['config']['session.driver'];
+	}
+
+	/**
+	 * Set the default session driver name.
+	 *
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function setDefaultDriver($name)
+	{
+		$this->app['config']['session.driver'] = $name;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Session/SessionServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Session/SessionServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Session/SessionServiceProvider.php
new file mode 100755
index 0000000..0efe172
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Session/SessionServiceProvider.php
@@ -0,0 +1,65 @@
+<?php namespace Illuminate\Session;
+
+use Illuminate\Support\ServiceProvider;
+
+class SessionServiceProvider extends ServiceProvider {
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->setupDefaultDriver();
+
+		$this->registerSessionManager();
+
+		$this->registerSessionDriver();
+	}
+
+	/**
+	 * Setup the default session driver for the application.
+	 *
+	 * @return void
+	 */
+	protected function setupDefaultDriver()
+	{
+		if ($this->app->runningInConsole())
+		{
+			$this->app['config']['session.driver'] = 'array';
+		}
+	}
+
+	/**
+	 * Register the session manager instance.
+	 *
+	 * @return void
+	 */
+	protected function registerSessionManager()
+	{
+		$this->app->bindShared('session', function($app)
+		{
+			return new SessionManager($app);
+		});
+	}
+
+	/**
+	 * Register the session driver instance.
+	 *
+	 * @return void
+	 */
+	protected function registerSessionDriver()
+	{
+		$this->app->bindShared('session.store', function($app)
+		{
+			// First, we will create the session manager which is responsible for the
+			// creation of the various session drivers when they are needed by the
+			// application instance, and will resolve them on a lazy load basis.
+			$manager = $app['session'];
+
+			return $manager->driver();
+		});
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Session/Store.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Session/Store.php b/vendor/laravel/framework/src/Illuminate/Session/Store.php
new file mode 100755
index 0000000..b41f4a7
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Session/Store.php
@@ -0,0 +1,630 @@
+<?php namespace Illuminate\Session;
+
+use SessionHandlerInterface;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Session\SessionBagInterface;
+use Symfony\Component\HttpFoundation\Session\Storage\MetadataBag;
+
+class Store implements SessionInterface {
+
+	/**
+	 * The session ID.
+	 *
+	 * @var string
+	 */
+	protected $id;
+
+	/**
+	 * The session name.
+	 *
+	 * @var string
+	 */
+	protected $name;
+
+	/**
+	 * The session attributes.
+	 *
+	 * @var array
+	 */
+	protected $attributes = array();
+
+	/**
+	 * The session bags.
+	 *
+	 * @var array
+	 */
+	protected $bags = array();
+
+	/**
+	 * The meta-data bag instance.
+	 *
+	 * @var \Symfony\Component\HttpFoundation\Session\Storage\MetadataBag
+	 */
+	protected $metaBag;
+
+	/**
+	 * Local copies of the session bag data.
+	 *
+	 * @var array
+	 */
+	protected $bagData = array();
+
+	/**
+	 * The session handler implementation.
+	 *
+	 * @var \SessionHandlerInterface
+	 */
+	protected $handler;
+
+	/**
+	 * Session store started status.
+	 *
+	 * @var bool
+	 */
+	protected $started = false;
+
+	/**
+	 * Create a new session instance.
+	 *
+	 * @param  string  $name
+	 * @param  \SessionHandlerInterface  $handler
+	 * @param  string|null  $id
+	 * @return void
+	 */
+	public function __construct($name, SessionHandlerInterface $handler, $id = null)
+	{
+		$this->setId($id);
+		$this->name = $name;
+		$this->handler = $handler;
+		$this->metaBag = new MetadataBag;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function start()
+	{
+		$this->loadSession();
+
+		if ( ! $this->has('_token')) $this->regenerateToken();
+
+		return $this->started = true;
+	}
+
+	/**
+	 * Load the session data from the handler.
+	 *
+	 * @return void
+	 */
+	protected function loadSession()
+	{
+		$this->attributes = $this->readFromHandler();
+
+		foreach (array_merge($this->bags, array($this->metaBag)) as $bag)
+		{
+			$this->initializeLocalBag($bag);
+
+			$bag->initialize($this->bagData[$bag->getStorageKey()]);
+		}
+	}
+
+	/**
+	 * Read the session data from the handler.
+	 *
+	 * @return array
+	 */
+	protected function readFromHandler()
+	{
+		$data = $this->handler->read($this->getId());
+
+		return $data ? unserialize($data) : array();
+	}
+
+	/**
+	 * Initialize a bag in storage if it doesn't exist.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Session\SessionBagInterface  $bag
+	 * @return void
+	 */
+	protected function initializeLocalBag($bag)
+	{
+		$this->bagData[$bag->getStorageKey()] = $this->pull($bag->getStorageKey(), []);
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function getId()
+	{
+		return $this->id;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function setId($id)
+	{
+		if ( ! $this->isValidId($id))
+		{
+			$id = $this->generateSessionId();
+		}
+
+		$this->id = $id;
+	}
+
+	/**
+	 * Determine if this is a valid session ID.
+	 *
+	 * @param  string  $id
+	 * @return bool
+	 */
+	public function isValidId($id)
+	{
+		return is_string($id) && preg_match('/^[a-f0-9]{40}$/', $id);
+	}
+
+	/**
+	 * Get a new, random session ID.
+	 *
+	 * @return string
+	 */
+	protected function generateSessionId()
+	{
+		return sha1(uniqid('', true).str_random(25).microtime(true));
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function getName()
+	{
+		return $this->name;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function setName($name)
+	{
+		$this->name = $name;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function invalidate($lifetime = null)
+	{
+		$this->attributes = array();
+
+		$this->migrate();
+
+		return true;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function migrate($destroy = false, $lifetime = null)
+	{
+		if ($destroy) $this->handler->destroy($this->getId());
+
+		$this->setExists(false);
+
+		$this->id = $this->generateSessionId(); return true;
+	}
+
+	/**
+	 * Generate a new session identifier.
+	 *
+	 * @param  bool  $destroy
+	 * @return bool
+	 */
+	public function regenerate($destroy = false)
+	{
+		return $this->migrate($destroy);
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function save()
+	{
+		$this->addBagDataToSession();
+
+		$this->ageFlashData();
+
+		$this->handler->write($this->getId(), serialize($this->attributes));
+
+		$this->started = false;
+	}
+
+	/**
+	 * Merge all of the bag data into the session.
+	 *
+	 * @return void
+	 */
+	protected function addBagDataToSession()
+	{
+		foreach (array_merge($this->bags, array($this->metaBag)) as $bag)
+		{
+			$this->put($bag->getStorageKey(), $this->bagData[$bag->getStorageKey()]);
+		}
+	}
+
+	/**
+	 * Age the flash data for the session.
+	 *
+	 * @return void
+	 */
+	public function ageFlashData()
+	{
+		foreach ($this->get('flash.old', array()) as $old) { $this->forget($old); }
+
+		$this->put('flash.old', $this->get('flash.new', array()));
+
+		$this->put('flash.new', array());
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function has($name)
+	{
+		return ! is_null($this->get($name));
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function get($name, $default = null)
+	{
+		return array_get($this->attributes, $name, $default);
+	}
+
+	/**
+	 * Get the value of a given key and then forget it.
+	 *
+	 * @param  string  $key
+	 * @param  string  $default
+	 * @return mixed
+	 */
+	public function pull($key, $default = null)
+	{
+		return array_pull($this->attributes, $key, $default);
+	}
+
+	/**
+	 * Determine if the session contains old input.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function hasOldInput($key = null)
+	{
+		$old = $this->getOldInput($key);
+
+		return is_null($key) ? count($old) > 0 : ! is_null($old);
+	}
+
+	/**
+	 * Get the requested item from the flashed input array.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return mixed
+	 */
+	public function getOldInput($key = null, $default = null)
+	{
+		$input = $this->get('_old_input', array());
+
+		// Input that is flashed to the session can be easily retrieved by the
+		// developer, making repopulating old forms and the like much more
+		// convenient, since the request's previous input is available.
+		return array_get($input, $key, $default);
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function set($name, $value)
+	{
+		array_set($this->attributes, $name, $value);
+	}
+
+	/**
+	 * Put a key / value pair or array of key / value pairs in the session.
+	 *
+	 * @param  string|array  $key
+	 * @param  mixed|null  	 $value
+	 * @return void
+	 */
+	public function put($key, $value = null)
+	{
+		if ( ! is_array($key)) $key = array($key => $value);
+
+		foreach ($key as $arrayKey => $arrayValue)
+		{
+			$this->set($arrayKey, $arrayValue);
+		}
+	}
+
+	/**
+	 * Push a value onto a session array.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function push($key, $value)
+	{
+		$array = $this->get($key, array());
+
+		$array[] = $value;
+
+		$this->put($key, $array);
+	}
+
+	/**
+	 * Flash a key / value pair to the session.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function flash($key, $value)
+	{
+		$this->put($key, $value);
+
+		$this->push('flash.new', $key);
+
+		$this->removeFromOldFlashData(array($key));
+	}
+
+	/**
+	 * Flash an input array to the session.
+	 *
+	 * @param  array  $value
+	 * @return void
+	 */
+	public function flashInput(array $value)
+	{
+		$this->flash('_old_input', $value);
+	}
+
+	/**
+	 * Reflash all of the session flash data.
+	 *
+	 * @return void
+	 */
+	public function reflash()
+	{
+		$this->mergeNewFlashes($this->get('flash.old', array()));
+
+		$this->put('flash.old', array());
+	}
+
+	/**
+	 * Reflash a subset of the current flash data.
+	 *
+	 * @param  array|mixed  $keys
+	 * @return void
+	 */
+	public function keep($keys = null)
+	{
+		$keys = is_array($keys) ? $keys : func_get_args();
+
+		$this->mergeNewFlashes($keys);
+
+		$this->removeFromOldFlashData($keys);
+	}
+
+	/**
+	 * Merge new flash keys into the new flash array.
+	 *
+	 * @param  array  $keys
+	 * @return void
+	 */
+	protected function mergeNewFlashes(array $keys)
+	{
+		$values = array_unique(array_merge($this->get('flash.new', array()), $keys));
+
+		$this->put('flash.new', $values);
+	}
+
+	/**
+	 * Remove the given keys from the old flash data.
+	 *
+	 * @param  array  $keys
+	 * @return void
+	 */
+	protected function removeFromOldFlashData(array $keys)
+	{
+		$this->put('flash.old', array_diff($this->get('flash.old', array()), $keys));
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function all()
+	{
+		return $this->attributes;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function replace(array $attributes)
+	{
+		foreach ($attributes as $key => $value)
+		{
+			$this->put($key, $value);
+		}
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function remove($name)
+	{
+		return array_pull($this->attributes, $name);
+	}
+
+	/**
+	 * Remove an item from the session.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function forget($key)
+	{
+		array_forget($this->attributes, $key);
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function clear()
+	{
+		$this->attributes = array();
+
+		foreach ($this->bags as $bag)
+		{
+			$bag->clear();
+		}
+	}
+
+	/**
+	 * Remove all of the items from the session.
+	 *
+	 * @return void
+	 */
+	public function flush()
+	{
+		$this->clear();
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function isStarted()
+	{
+		return $this->started;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function registerBag(SessionBagInterface $bag)
+	{
+		$this->bags[$bag->getStorageKey()] = $bag;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function getBag($name)
+	{
+		return array_get($this->bags, $name, function()
+		{
+			throw new \InvalidArgumentException("Bag not registered.");
+		});
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function getMetadataBag()
+	{
+		return $this->metaBag;
+	}
+
+	/**
+	 * Get the raw bag data array for a given bag.
+	 *
+	 * @param  string  $name
+	 * @return array
+	 */
+	public function getBagData($name)
+	{
+		return array_get($this->bagData, $name, array());
+	}
+
+	/**
+	 * Get the CSRF token value.
+	 *
+	 * @return string
+	 */
+	public function token()
+	{
+		return $this->get('_token');
+	}
+
+	/**
+	 * Get the CSRF token value.
+	 *
+	 * @return string
+	 */
+	public function getToken()
+	{
+		return $this->token();
+	}
+
+	/**
+	 * Regenerate the CSRF token value.
+	 *
+	 * @return void
+	 */
+	public function regenerateToken()
+	{
+		$this->put('_token', str_random(40));
+	}
+
+	/**
+	 * Set the existence of the session on the handler if applicable.
+	 *
+	 * @param  bool  $value
+	 * @return void
+	 */
+	public function setExists($value)
+	{
+		if ($this->handler instanceof ExistenceAwareInterface)
+		{
+			$this->handler->setExists($value);
+		}
+	}
+
+	/**
+	 * Get the underlying session handler implementation.
+	 *
+	 * @return \SessionHandlerInterface
+	 */
+	public function getHandler()
+	{
+		return $this->handler;
+	}
+
+	/**
+	 * Determine if the session handler needs a request.
+	 *
+	 * @return bool
+	 */
+	public function handlerNeedsRequest()
+	{
+		return $this->handler instanceof CookieSessionHandler;
+	}
+
+	/**
+	 * Set the request on the handler instance.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @return void
+	 */
+	public function setRequestOnHandler(Request $request)
+	{
+		if ($this->handlerNeedsRequest())
+		{
+			$this->handler->setRequest($request);
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Session/TokenMismatchException.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Session/TokenMismatchException.php b/vendor/laravel/framework/src/Illuminate/Session/TokenMismatchException.php
new file mode 100755
index 0000000..0bc5841
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Session/TokenMismatchException.php
@@ -0,0 +1,3 @@
+<?php namespace Illuminate\Session;
+
+class TokenMismatchException extends \Exception {}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Session/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Session/composer.json b/vendor/laravel/framework/src/Illuminate/Session/composer.json
new file mode 100755
index 0000000..bec66ab
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Session/composer.json
@@ -0,0 +1,35 @@
+{
+    "name": "illuminate/session",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/cache": "4.2.*",
+        "illuminate/cookie": "4.2.*",
+        "illuminate/encryption": "4.2.*",
+        "illuminate/support": "4.2.*",
+        "nesbot/carbon": "~1.0",
+        "symfony/finder": "2.5.*",
+        "symfony/http-foundation": "2.5.*"
+    },
+    "require-dev": {
+        "illuminate/console": "4.2.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Session": ""
+        }
+    },
+    "target-dir": "Illuminate/Session",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Arr.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Arr.php b/vendor/laravel/framework/src/Illuminate/Support/Arr.php
new file mode 100755
index 0000000..e76a3dd
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Arr.php
@@ -0,0 +1,386 @@
+<?php namespace Illuminate\Support;
+
+use Closure;
+use Illuminate\Support\Traits\MacroableTrait;
+
+class Arr {
+
+	use MacroableTrait;
+
+	/**
+	 * Add an element to an array using "dot" notation if it doesn't exist.
+	 *
+	 * @param  array   $array
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return array
+	 */
+	public static function add($array, $key, $value)
+	{
+		if (is_null(static::get($array, $key)))
+		{
+			static::set($array, $key, $value);
+		}
+
+		return $array;
+	}
+
+	/**
+	 * Build a new array using a callback.
+	 *
+	 * @param  array     $array
+	 * @param  \Closure  $callback
+	 * @return array
+	 */
+	public static function build($array, Closure $callback)
+	{
+		$results = array();
+
+		foreach ($array as $key => $value)
+		{
+			list($innerKey, $innerValue) = call_user_func($callback, $key, $value);
+
+			$results[$innerKey] = $innerValue;
+		}
+
+		return $results;
+	}
+
+	/**
+	 * Divide an array into two arrays. One with keys and the other with values.
+	 *
+	 * @param  array  $array
+	 * @return array
+	 */
+	public static function divide($array)
+	{
+		return array(array_keys($array), array_values($array));
+	}
+
+	/**
+	 * Flatten a multi-dimensional associative array with dots.
+	 *
+	 * @param  array   $array
+	 * @param  string  $prepend
+	 * @return array
+	 */
+	public static function dot($array, $prepend = '')
+	{
+		$results = array();
+
+		foreach ($array as $key => $value)
+		{
+			if (is_array($value))
+			{
+				$results = array_merge($results, static::dot($value, $prepend.$key.'.'));
+			}
+			else
+			{
+				$results[$prepend.$key] = $value;
+			}
+		}
+
+		return $results;
+	}
+
+	/**
+	 * Get all of the given array except for a specified array of items.
+	 *
+	 * @param  array  $array
+	 * @param  array|string  $keys
+	 * @return array
+	 */
+	public static function except($array, $keys)
+	{
+		return array_diff_key($array, array_flip((array) $keys));
+	}
+
+	/**
+	 * Fetch a flattened array of a nested array element.
+	 *
+	 * @param  array   $array
+	 * @param  string  $key
+	 * @return array
+	 */
+	public static function fetch($array, $key)
+	{
+		foreach (explode('.', $key) as $segment)
+		{
+			$results = array();
+
+			foreach ($array as $value)
+			{
+				if (array_key_exists($segment, $value = (array) $value))
+				{
+					$results[] = $value[$segment];
+				}
+			}
+
+			$array = array_values($results);
+		}
+
+		return array_values($results);
+	}
+
+	/**
+	 * Return the first element in an array passing a given truth test.
+	 *
+	 * @param  array     $array
+	 * @param  \Closure  $callback
+	 * @param  mixed     $default
+	 * @return mixed
+	 */
+	public static function first($array, $callback, $default = null)
+	{
+		foreach ($array as $key => $value)
+		{
+			if (call_user_func($callback, $key, $value)) return $value;
+		}
+
+		return value($default);
+	}
+
+	/**
+	 * Return the last element in an array passing a given truth test.
+	 *
+	 * @param  array     $array
+	 * @param  \Closure  $callback
+	 * @param  mixed     $default
+	 * @return mixed
+	 */
+	public static function last($array, $callback, $default = null)
+	{
+		return static::first(array_reverse($array), $callback, $default);
+	}
+
+	/**
+	 * Flatten a multi-dimensional array into a single level.
+	 *
+	 * @param  array  $array
+	 * @return array
+	 */
+	public static function flatten($array)
+	{
+		$return = array();
+
+		array_walk_recursive($array, function($x) use (&$return) { $return[] = $x; });
+
+		return $return;
+	}
+
+	/**
+	 * Remove one or many array items from a given array using "dot" notation.
+	 *
+	 * @param  array  $array
+	 * @param  array|string  $keys
+	 * @return void
+	 */
+	public static function forget(&$array, $keys)
+	{
+		$original =& $array;
+
+		foreach ((array) $keys as $key)
+		{
+			$parts = explode('.', $key);
+
+			while (count($parts) > 1)
+			{
+				$part = array_shift($parts);
+
+				if (isset($array[$part]) && is_array($array[$part]))
+				{
+					$array =& $array[$part];
+				}
+			}
+
+			unset($array[array_shift($parts)]);
+
+			// clean up after each pass
+			$array =& $original;
+		}
+	}
+
+	/**
+	 * Get an item from an array using "dot" notation.
+	 *
+	 * @param  array   $array
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return mixed
+	 */
+	public static function get($array, $key, $default = null)
+	{
+		if (is_null($key)) return $array;
+
+		if (isset($array[$key])) return $array[$key];
+
+		foreach (explode('.', $key) as $segment)
+		{
+			if ( ! is_array($array) || ! array_key_exists($segment, $array))
+			{
+				return value($default);
+			}
+
+			$array = $array[$segment];
+		}
+
+		return $array;
+	}
+
+	/**
+	 * Check if an item exists in an array using "dot" notation.
+	 *
+	 * @param  array   $array
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public static function has($array, $key)
+	{
+		if (empty($array) || is_null($key)) return false;
+
+		if (array_key_exists($key, $array)) return true;
+
+		foreach (explode('.', $key) as $segment)
+		{
+			if ( ! is_array($array) || ! array_key_exists($segment, $array))
+			{
+				return false;
+			}
+
+			$array = $array[$segment];
+		}
+
+		return true;
+	}
+
+	/**
+	 * Get a subset of the items from the given array.
+	 *
+	 * @param  array  $array
+	 * @param  array|string  $keys
+	 * @return array
+	 */
+	public static function only($array, $keys)
+	{
+		return array_intersect_key($array, array_flip((array) $keys));
+	}
+
+	/**
+	 * Pluck an array of values from an array.
+	 *
+	 * @param  array   $array
+	 * @param  string  $value
+	 * @param  string  $key
+	 * @return array
+	 */
+	public static function pluck($array, $value, $key = null)
+	{
+		$results = array();
+
+		foreach ($array as $item)
+		{
+			$itemValue = is_object($item) ? $item->{$value} : $item[$value];
+
+			// If the key is "null", we will just append the value to the array and keep
+			// looping. Otherwise we will key the array using the value of the key we
+			// received from the developer. Then we'll return the final array form.
+			if (is_null($key))
+			{
+				$results[] = $itemValue;
+			}
+			else
+			{
+				$itemKey = is_object($item) ? $item->{$key} : $item[$key];
+
+				$results[$itemKey] = $itemValue;
+			}
+		}
+
+		return $results;
+	}
+
+	/**
+	 * Get a value from the array, and remove it.
+	 *
+	 * @param  array   $array
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return mixed
+	 */
+	public static function pull(&$array, $key, $default = null)
+	{
+		$value = static::get($array, $key, $default);
+
+		static::forget($array, $key);
+
+		return $value;
+	}
+
+	/**
+	 * Set an array item to a given value using "dot" notation.
+	 *
+	 * If no key is given to the method, the entire array will be replaced.
+	 *
+	 * @param  array   $array
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return array
+	 */
+	public static function set(&$array, $key, $value)
+	{
+		if (is_null($key)) return $array = $value;
+
+		$keys = explode('.', $key);
+
+		while (count($keys) > 1)
+		{
+			$key = array_shift($keys);
+
+			// If the key doesn't exist at this depth, we will just create an empty array
+			// to hold the next value, allowing us to create the arrays to hold final
+			// values at the correct depth. Then we'll keep digging into the array.
+			if ( ! isset($array[$key]) || ! is_array($array[$key]))
+			{
+				$array[$key] = array();
+			}
+
+			$array =& $array[$key];
+		}
+
+		$array[array_shift($keys)] = $value;
+
+		return $array;
+	}
+
+	/**
+	 * Sort the array using the given Closure.
+	 *
+	 * @param  array     $array
+	 * @param  \Closure  $callback
+	 * @return array
+	 */
+	public static function sort($array, Closure $callback)
+	{
+		return Collection::make($array)->sortBy($callback)->all();
+	}
+
+	/**
+	 * Filter the array using the given Closure.
+	 *
+	 * @param  array     $array
+	 * @param  \Closure  $callback
+	 * @return array
+	 */
+	public static function where($array, Closure $callback)
+	{
+		$filtered = array();
+
+		foreach ($array as $key => $value)
+		{
+			if (call_user_func($callback, $key, $value)) $filtered[$key] = $value;
+		}
+
+		return $filtered;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/ClassLoader.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/ClassLoader.php b/vendor/laravel/framework/src/Illuminate/Support/ClassLoader.php
new file mode 100755
index 0000000..806ef45
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/ClassLoader.php
@@ -0,0 +1,107 @@
+<?php namespace Illuminate\Support;
+
+class ClassLoader {
+
+	/**
+	 * The registered directories.
+	 *
+	 * @var array
+	 */
+	protected static $directories = array();
+
+	/**
+	 * Indicates if a ClassLoader has been registered.
+	 *
+	 * @var bool
+	 */
+	protected static $registered = false;
+
+	/**
+	 * Load the given class file.
+	 *
+	 * @param  string  $class
+	 * @return bool
+	 */
+	public static function load($class)
+	{
+		$class = static::normalizeClass($class);
+
+		foreach (static::$directories as $directory)
+		{
+			if (file_exists($path = $directory.DIRECTORY_SEPARATOR.$class))
+			{
+				require_once $path;
+
+				return true;
+			}
+		}
+
+		return false;
+	}
+
+	/**
+	 * Get the normal file name for a class.
+	 *
+	 * @param  string  $class
+	 * @return string
+	 */
+	public static function normalizeClass($class)
+	{
+		if ($class[0] == '\\') $class = substr($class, 1);
+
+		return str_replace(array('\\', '_'), DIRECTORY_SEPARATOR, $class).'.php';
+	}
+
+	/**
+	 * Register the given class loader on the auto-loader stack.
+	 *
+	 * @return void
+	 */
+	public static function register()
+	{
+		if ( ! static::$registered)
+		{
+			static::$registered = spl_autoload_register(array('\Illuminate\Support\ClassLoader', 'load'));
+		}
+	}
+
+	/**
+	 * Add directories to the class loader.
+	 *
+	 * @param  string|array  $directories
+	 * @return void
+	 */
+	public static function addDirectories($directories)
+	{
+		static::$directories = array_unique(array_merge(static::$directories, (array) $directories));
+	}
+
+	/**
+	 * Remove directories from the class loader.
+	 *
+	 * @param  string|array  $directories
+	 * @return void
+	 */
+	public static function removeDirectories($directories = null)
+	{
+		if (is_null($directories))
+		{
+			static::$directories = array();
+		}
+		else
+		{
+			static::$directories = array_diff(static::$directories, (array) $directories);
+		}
+	}
+
+	/**
+	 * Gets all the directories registered with the loader.
+	 *
+	 * @return array
+	 */
+	public static function getDirectories()
+	{
+		return static::$directories;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Collection.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Collection.php b/vendor/laravel/framework/src/Illuminate/Support/Collection.php
new file mode 100755
index 0000000..fc7cb7b
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Collection.php
@@ -0,0 +1,851 @@
+<?php namespace Illuminate\Support;
+
+use Closure;
+use Countable;
+use ArrayAccess;
+use ArrayIterator;
+use CachingIterator;
+use JsonSerializable;
+use IteratorAggregate;
+use Illuminate\Support\Contracts\JsonableInterface;
+use Illuminate\Support\Contracts\ArrayableInterface;
+
+class Collection implements ArrayAccess, ArrayableInterface, Countable, IteratorAggregate, JsonableInterface, JsonSerializable {
+
+	/**
+	 * The items contained in the collection.
+	 *
+	 * @var array
+	 */
+	protected $items = array();
+
+	/**
+	 * Create a new collection.
+	 *
+	 * @param  array  $items
+	 * @return void
+	 */
+	public function __construct(array $items = array())
+	{
+		$this->items = $items;
+	}
+
+	/**
+	 * Create a new collection instance if the value isn't one already.
+	 *
+	 * @param  mixed  $items
+	 * @return static
+	 */
+	public static function make($items)
+	{
+		if (is_null($items)) return new static;
+
+		if ($items instanceof Collection) return $items;
+
+		return new static(is_array($items) ? $items : array($items));
+	}
+
+	/**
+	 * Get all of the items in the collection.
+	 *
+	 * @return array
+	 */
+	public function all()
+	{
+		return $this->items;
+	}
+
+	/**
+	 * Collapse the collection items into a single array.
+	 *
+	 * @return static
+	 */
+	public function collapse()
+	{
+		$results = array();
+
+		foreach ($this->items as $values)
+		{
+			if ($values instanceof Collection) $values = $values->all();
+
+			$results = array_merge($results, $values);
+		}
+
+		return new static($results);
+	}
+
+	/**
+	 * Determine if an item exists in the collection.
+	 *
+	 * @param  mixed  $value
+	 * @return bool
+	 */
+	public function contains($value)
+	{
+		if ($value instanceof Closure)
+		{
+			return ! is_null($this->first($value));
+		}
+
+		return in_array($value, $this->items);
+	}
+
+	/**
+	 * Diff the collection with the given items.
+	 *
+	 * @param  \Illuminate\Support\Collection|\Illuminate\Support\Contracts\ArrayableInterface|array  $items
+	 * @return static
+	 */
+	public function diff($items)
+	{
+		return new static(array_diff($this->items, $this->getArrayableItems($items)));
+	}
+
+	/**
+	 * Execute a callback over each item.
+	 *
+	 * @param  \Closure  $callback
+	 * @return $this
+	 */
+	public function each(Closure $callback)
+	{
+		array_map($callback, $this->items);
+
+		return $this;
+	}
+
+	/**
+	 * Fetch a nested element of the collection.
+	 *
+	 * @param  string  $key
+	 * @return static
+	 */
+	public function fetch($key)
+	{
+		return new static(array_fetch($this->items, $key));
+	}
+
+	/**
+	 * Run a filter over each of the items.
+	 *
+	 * @param  \Closure  $callback
+	 * @return static
+	 */
+	public function filter(Closure $callback)
+	{
+		return new static(array_filter($this->items, $callback));
+	}
+
+	/**
+	 * Get the first item from the collection.
+	 *
+	 * @param  \Closure   $callback
+	 * @param  mixed      $default
+	 * @return mixed|null
+	 */
+	public function first(Closure $callback = null, $default = null)
+	{
+		if (is_null($callback))
+		{
+			return count($this->items) > 0 ? reset($this->items) : null;
+		}
+
+		return array_first($this->items, $callback, $default);
+	}
+
+	/**
+	 * Get a flattened array of the items in the collection.
+	 *
+	 * @return static
+	 */
+	public function flatten()
+	{
+		return new static(array_flatten($this->items));
+	}
+
+	/**
+	 * Flip the items in the collection.
+	 *
+	 * @return static
+	 */
+	public function flip()
+	{
+		return new static(array_flip($this->items));
+	}
+
+	/**
+	 * Remove an item from the collection by key.
+	 *
+	 * @param  mixed  $key
+	 * @return void
+	 */
+	public function forget($key)
+	{
+		unset($this->items[$key]);
+	}
+
+	/**
+	 * Get an item from the collection by key.
+	 *
+	 * @param  mixed  $key
+	 * @param  mixed  $default
+	 * @return mixed
+	 */
+	public function get($key, $default = null)
+	{
+		if ($this->offsetExists($key))
+		{
+			return $this->items[$key];
+		}
+
+		return value($default);
+	}
+
+	/**
+	 * Group an associative array by a field or Closure value.
+	 *
+	 * @param  callable|string  $groupBy
+	 * @return static
+	 */
+	public function groupBy($groupBy)
+	{
+		$results = array();
+
+		foreach ($this->items as $key => $value)
+		{
+			$results[$this->getGroupByKey($groupBy, $key, $value)][] = $value;
+		}
+
+		return new static($results);
+	}
+
+	/**
+	 * Get the "group by" key value.
+	 *
+	 * @param  callable|string  $groupBy
+	 * @param  string  $key
+	 * @param  mixed  $value
+	 * @return string
+	 */
+	protected function getGroupByKey($groupBy, $key, $value)
+	{
+		if ( ! is_string($groupBy) && is_callable($groupBy))
+		{
+			return $groupBy($value, $key);
+		}
+
+		return data_get($value, $groupBy);
+	}
+
+	/**
+	 * Key an associative array by a field.
+	 *
+	 * @param  string  $keyBy
+	 * @return static
+	 */
+	public function keyBy($keyBy)
+	{
+		$results = [];
+
+		foreach ($this->items as $item)
+		{
+			$key = data_get($item, $keyBy);
+
+			$results[$key] = $item;
+		}
+
+		return new static($results);
+	}
+
+	/**
+	 * Determine if an item exists in the collection by key.
+	 *
+	 * @param  mixed  $key
+	 * @return bool
+	 */
+	public function has($key)
+	{
+		return $this->offsetExists($key);
+	}
+
+	/**
+	 * Concatenate values of a given key as a string.
+	 *
+	 * @param  string  $value
+	 * @param  string  $glue
+	 * @return string
+	 */
+	public function implode($value, $glue = null)
+	{
+		return implode($glue, $this->lists($value));
+	}
+
+	/**
+	 * Intersect the collection with the given items.
+	 *
+ 	 * @param  \Illuminate\Support\Collection|\Illuminate\Support\Contracts\ArrayableInterface|array  $items
+	 * @return static
+	 */
+	public function intersect($items)
+	{
+		return new static(array_intersect($this->items, $this->getArrayableItems($items)));
+	}
+
+	/**
+	 * Determine if the collection is empty or not.
+	 *
+	 * @return bool
+	 */
+	public function isEmpty()
+	{
+		return empty($this->items);
+	}
+
+	/**
+	 * Get the keys of the collection items.
+	 *
+	 * @return array
+	 */
+	public function keys()
+	{
+		return array_keys($this->items);
+	}
+
+	/**
+	* Get the last item from the collection.
+	*
+	* @return mixed|null
+	*/
+	public function last()
+	{
+		return count($this->items) > 0 ? end($this->items) : null;
+	}
+
+	/**
+	 * Get an array with the values of a given key.
+	 *
+	 * @param  string  $value
+	 * @param  string  $key
+	 * @return array
+	 */
+	public function lists($value, $key = null)
+	{
+		return array_pluck($this->items, $value, $key);
+	}
+
+	/**
+	 * Run a map over each of the items.
+	 *
+	 * @param  \Closure  $callback
+	 * @return static
+	 */
+	public function map(Closure $callback)
+	{
+		return new static(array_map($callback, $this->items, array_keys($this->items)));
+	}
+
+	/**
+	 * Merge the collection with the given items.
+	 *
+	 * @param  \Illuminate\Support\Collection|\Illuminate\Support\Contracts\ArrayableInterface|array  $items
+	 * @return static
+	 */
+	public function merge($items)
+	{
+		return new static(array_merge($this->items, $this->getArrayableItems($items)));
+	}
+
+	/**
+	 * Get and remove the last item from the collection.
+	 *
+	 * @return mixed|null
+	 */
+	public function pop()
+	{
+		return array_pop($this->items);
+	}
+
+	/**
+	 * Push an item onto the beginning of the collection.
+	 *
+	 * @param  mixed  $value
+	 * @return void
+	 */
+	public function prepend($value)
+	{
+		array_unshift($this->items, $value);
+	}
+
+	/**
+	 * Push an item onto the end of the collection.
+	 *
+	 * @param  mixed  $value
+	 * @return void
+	 */
+	public function push($value)
+	{
+		$this->items[] = $value;
+	}
+
+	/**
+	 * Pulls an item from the collection.
+	 *
+	 * @param  mixed  $key
+	 * @param  mixed  $default
+	 * @return mixed
+	 */
+	public function pull($key, $default = null)
+	{
+		return array_pull($this->items, $key, $default);
+	}
+
+	/**
+	 * Put an item in the collection by key.
+	 *
+	 * @param  mixed  $key
+	 * @param  mixed  $value
+	 * @return void
+	 */
+	public function put($key, $value)
+	{
+		$this->items[$key] = $value;
+	}
+
+	/**
+	 * Get one or more items randomly from the collection.
+	 *
+	 * @param  int  $amount
+	 * @return mixed
+	 */
+	public function random($amount = 1)
+	{
+		if ($this->isEmpty()) return null;
+
+		$keys = array_rand($this->items, $amount);
+
+		return is_array($keys) ? array_intersect_key($this->items, array_flip($keys)) : $this->items[$keys];
+	}
+
+	/**
+	 * Reduce the collection to a single value.
+	 *
+	 * @param  callable  $callback
+	 * @param  mixed     $initial
+	 * @return mixed
+	 */
+	public function reduce(callable $callback, $initial = null)
+	{
+		return array_reduce($this->items, $callback, $initial);
+	}
+
+	/**
+	 * Create a collection of all elements that do not pass a given truth test.
+	 *
+	 * @param  \Closure|mixed  $callback
+	 * @return static
+	 */
+	public function reject($callback)
+	{
+		if ($callback instanceof Closure)
+		{
+			return $this->filter(function($item) use ($callback)
+			{
+				return ! $callback($item);
+			});
+		}
+
+		return $this->filter(function($item) use ($callback)
+		{
+			return $item != $callback;
+		});
+	}
+
+	/**
+	 * Reverse items order.
+	 *
+	 * @return static
+	 */
+	public function reverse()
+	{
+		return new static(array_reverse($this->items));
+	}
+
+	/**
+	 * Search the collection for a given value and return the corresponding key if successful.
+	 *
+	 * @param  mixed  $value
+	 * @param  bool   $strict
+	 * @return mixed
+	 */
+	public function search($value, $strict = false)
+	{
+		return array_search($value, $this->items, $strict);
+	}
+
+	/**
+	 * Get and remove the first item from the collection.
+	 *
+	 * @return mixed|null
+	 */
+	public function shift()
+	{
+		return array_shift($this->items);
+	}
+
+	/**
+	 * Shuffle the items in the collection.
+	 *
+	 * @return $this
+	 */
+	public function shuffle()
+	{
+		shuffle($this->items);
+
+		return $this;
+	}
+
+	/**
+	 * Slice the underlying collection array.
+	 *
+	 * @param  int   $offset
+	 * @param  int   $length
+	 * @param  bool  $preserveKeys
+	 * @return static
+	 */
+	public function slice($offset, $length = null, $preserveKeys = false)
+	{
+		return new static(array_slice($this->items, $offset, $length, $preserveKeys));
+	}
+
+	/**
+	 * Chunk the underlying collection array.
+	 *
+	 * @param  int   $size
+	 * @param  bool  $preserveKeys
+	 * @return static
+	 */
+	public function chunk($size, $preserveKeys = false)
+	{
+		$chunks = new static;
+
+		foreach (array_chunk($this->items, $size, $preserveKeys) as $chunk)
+		{
+			$chunks->push(new static($chunk));
+		}
+
+		return $chunks;
+	}
+
+	/**
+	 * Sort through each item with a callback.
+	 *
+	 * @param  \Closure  $callback
+	 * @return $this
+	 */
+	public function sort(Closure $callback)
+	{
+		uasort($this->items, $callback);
+
+		return $this;
+	}
+
+	/**
+	 * Sort the collection using the given Closure.
+	 *
+	 * @param  \Closure|string  $callback
+	 * @param  int   $options
+	 * @param  bool  $descending
+	 * @return $this
+	 */
+	public function sortBy($callback, $options = SORT_REGULAR, $descending = false)
+	{
+		$results = array();
+
+		if (is_string($callback)) $callback =
+                          $this->valueRetriever($callback);
+
+		// First we will loop through the items and get the comparator from a callback
+		// function which we were given. Then, we will sort the returned values and
+		// and grab the corresponding values for the sorted keys from this array.
+		foreach ($this->items as $key => $value)
+		{
+			$results[$key] = $callback($value);
+		}
+
+		$descending ? arsort($results, $options)
+                    : asort($results, $options);
+
+		// Once we have sorted all of the keys in the array, we will loop through them
+		// and grab the corresponding model so we can set the underlying items list
+		// to the sorted version. Then we'll just return the collection instance.
+		foreach (array_keys($results) as $key)
+		{
+			$results[$key] = $this->items[$key];
+		}
+
+		$this->items = $results;
+
+		return $this;
+	}
+
+	/**
+	 * Sort the collection in descending order using the given Closure.
+	 *
+	 * @param  \Closure|string  $callback
+	 * @param  int  $options
+	 * @return $this
+	 */
+	public function sortByDesc($callback, $options = SORT_REGULAR)
+	{
+		return $this->sortBy($callback, $options, true);
+	}
+
+	/**
+	 * Splice portion of the underlying collection array.
+	 *
+	 * @param  int    $offset
+	 * @param  int    $length
+	 * @param  mixed  $replacement
+	 * @return static
+	 */
+	public function splice($offset, $length = 0, $replacement = array())
+	{
+		return new static(array_splice($this->items, $offset, $length, $replacement));
+	}
+
+	/**
+	 * Get the sum of the given values.
+	 *
+	 * @param  \Closure  $callback
+	 * @return mixed
+	 */
+	public function sum($callback = null)
+	{
+		if (is_null($callback))
+		{
+			return array_sum($this->items);
+		}
+
+		if (is_string($callback))
+		{
+			$callback = $this->valueRetriever($callback);
+		}
+
+		return $this->reduce(function($result, $item) use ($callback)
+		{
+			return $result += $callback($item);
+
+		}, 0);
+	}
+
+	/**
+	 * Take the first or last {$limit} items.
+	 *
+	 * @param  int  $limit
+	 * @return static
+	 */
+	public function take($limit = null)
+	{
+		if ($limit < 0) return $this->slice($limit, abs($limit));
+
+		return $this->slice(0, $limit);
+	}
+
+	/**
+	 * Transform each item in the collection using a callback.
+	 *
+	 * @param  \Closure  $callback
+	 * @return $this
+	 */
+	public function transform(Closure $callback)
+	{
+		$this->items = array_map($callback, $this->items);
+
+		return $this;
+	}
+
+	/**
+	 * Return only unique items from the collection array.
+	 *
+	 * @return static
+	 */
+	public function unique()
+	{
+		return new static(array_unique($this->items));
+	}
+
+	/**
+	 * Reset the keys on the underlying array.
+	 *
+	 * @return static
+	 */
+	public function values()
+	{
+		$this->items = array_values($this->items);
+
+		return $this;
+	}
+
+	/**
+	 * Get a value retrieving callback.
+	 *
+	 * @param  string  $value
+	 * @return \Closure
+	 */
+	protected function valueRetriever($value)
+	{
+		return function($item) use ($value)
+		{
+			return data_get($item, $value);
+		};
+	}
+
+	/**
+	 * Get the collection of items as a plain array.
+	 *
+	 * @return array
+	 */
+	public function toArray()
+	{
+		return array_map(function($value)
+		{
+			return $value instanceof ArrayableInterface ? $value->toArray() : $value;
+
+		}, $this->items);
+	}
+
+	/**
+	 * Convert the object into something JSON serializable.
+	 *
+	 * @return array
+	 */
+	public function jsonSerialize()
+	{
+		return $this->toArray();
+	}
+
+	/**
+	 * Get the collection of items as JSON.
+	 *
+	 * @param  int  $options
+	 * @return string
+	 */
+	public function toJson($options = 0)
+	{
+		return json_encode($this->toArray(), $options);
+	}
+
+	/**
+	 * Get an iterator for the items.
+	 *
+	 * @return \ArrayIterator
+	 */
+	public function getIterator()
+	{
+		return new ArrayIterator($this->items);
+	}
+
+	/**
+	 * Get a CachingIterator instance.
+	 *
+	 * @param  int  $flags
+	 * @return \CachingIterator
+	 */
+	public function getCachingIterator($flags = CachingIterator::CALL_TOSTRING)
+	{
+		return new CachingIterator($this->getIterator(), $flags);
+	}
+
+	/**
+	 * Count the number of items in the collection.
+	 *
+	 * @return int
+	 */
+	public function count()
+	{
+		return count($this->items);
+	}
+
+	/**
+	 * Determine if an item exists at an offset.
+	 *
+	 * @param  mixed  $key
+	 * @return bool
+	 */
+	public function offsetExists($key)
+	{
+		return array_key_exists($key, $this->items);
+	}
+
+	/**
+	 * Get an item at a given offset.
+	 *
+	 * @param  mixed  $key
+	 * @return mixed
+	 */
+	public function offsetGet($key)
+	{
+		return $this->items[$key];
+	}
+
+	/**
+	 * Set the item at a given offset.
+	 *
+	 * @param  mixed  $key
+	 * @param  mixed  $value
+	 * @return void
+	 */
+	public function offsetSet($key, $value)
+	{
+		if (is_null($key))
+		{
+			$this->items[] = $value;
+		}
+		else
+		{
+			$this->items[$key] = $value;
+		}
+	}
+
+	/**
+	 * Unset the item at a given offset.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function offsetUnset($key)
+	{
+		unset($this->items[$key]);
+	}
+
+	/**
+	 * Convert the collection to its string representation.
+	 *
+	 * @return string
+	 */
+	public function __toString()
+	{
+		return $this->toJson();
+	}
+
+	/**
+	 * Results array of items from Collection or ArrayableInterface.
+	 *
+  	 * @param  \Illuminate\Support\Collection|\Illuminate\Support\Contracts\ArrayableInterface|array  $items
+	 * @return array
+	 */
+	protected function getArrayableItems($items)
+	{
+		if ($items instanceof Collection)
+		{
+			$items = $items->all();
+		}
+		elseif ($items instanceof ArrayableInterface)
+		{
+			$items = $items->toArray();
+		}
+
+		return $items;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Contracts/ArrayableInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Contracts/ArrayableInterface.php b/vendor/laravel/framework/src/Illuminate/Support/Contracts/ArrayableInterface.php
new file mode 100755
index 0000000..0383492
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Contracts/ArrayableInterface.php
@@ -0,0 +1,12 @@
+<?php namespace Illuminate\Support\Contracts;
+
+interface ArrayableInterface {
+
+	/**
+	 * Get the instance as an array.
+	 *
+	 * @return array
+	 */
+	public function toArray();
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Contracts/JsonableInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Contracts/JsonableInterface.php b/vendor/laravel/framework/src/Illuminate/Support/Contracts/JsonableInterface.php
new file mode 100755
index 0000000..6d00948
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Contracts/JsonableInterface.php
@@ -0,0 +1,13 @@
+<?php namespace Illuminate\Support\Contracts;
+
+interface JsonableInterface {
+
+	/**
+	 * Convert the object to its JSON representation.
+	 *
+	 * @param  int  $options
+	 * @return string
+	 */
+	public function toJson($options = 0);
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Contracts/MessageProviderInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Contracts/MessageProviderInterface.php b/vendor/laravel/framework/src/Illuminate/Support/Contracts/MessageProviderInterface.php
new file mode 100755
index 0000000..a70826b
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Contracts/MessageProviderInterface.php
@@ -0,0 +1,12 @@
+<?php namespace Illuminate\Support\Contracts;
+
+interface MessageProviderInterface {
+
+	/**
+	 * Get the messages for the instance.
+	 *
+	 * @return \Illuminate\Support\MessageBag
+	 */
+	public function getMessageBag();
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Contracts/RenderableInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Contracts/RenderableInterface.php b/vendor/laravel/framework/src/Illuminate/Support/Contracts/RenderableInterface.php
new file mode 100755
index 0000000..40f2288
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Contracts/RenderableInterface.php
@@ -0,0 +1,12 @@
+<?php namespace Illuminate\Support\Contracts;
+
+interface RenderableInterface {
+
+	/**
+	 * Get the evaluated contents of the object.
+	 *
+	 * @return string
+	 */
+	public function render();
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Contracts/ResponsePreparerInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Contracts/ResponsePreparerInterface.php b/vendor/laravel/framework/src/Illuminate/Support/Contracts/ResponsePreparerInterface.php
new file mode 100755
index 0000000..ada62fb
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Contracts/ResponsePreparerInterface.php
@@ -0,0 +1,20 @@
+<?php namespace Illuminate\Support\Contracts;
+
+interface ResponsePreparerInterface {
+
+	/**
+	 * Prepare the given value as a Response object.
+	 *
+	 * @param  mixed  $value
+	 * @return \Symfony\Component\HttpFoundation\Response
+	 */
+	public function prepareResponse($value);
+
+	/**
+	 * Determine if provider is ready to return responses.
+	 *
+	 * @return bool
+	 */
+	public function readyForResponses();
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/App.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/App.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/App.php
new file mode 100755
index 0000000..5615809
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/App.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Foundation\Application
+ */
+class App extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'app'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Artisan.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Artisan.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Artisan.php
new file mode 100755
index 0000000..d478aca
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Artisan.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Foundation\Artisan
+ */
+class Artisan extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'artisan'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Auth.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Auth.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Auth.php
new file mode 100755
index 0000000..66fd582
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Auth.php
@@ -0,0 +1,16 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Auth\AuthManager
+ * @see \Illuminate\Auth\Guard
+ */
+class Auth extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'auth'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Blade.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Blade.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Blade.php
new file mode 100755
index 0000000..24265d0
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Blade.php
@@ -0,0 +1,18 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\View\Compilers\BladeCompiler
+ */
+class Blade extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor()
+	{
+		return static::$app['view']->getEngineResolver()->resolve('blade')->getCompiler();
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Cache.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Cache.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Cache.php
new file mode 100755
index 0000000..dbcca06
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Cache.php
@@ -0,0 +1,16 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Cache\CacheManager
+ * @see \Illuminate\Cache\Repository
+ */
+class Cache extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'cache'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Config.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Config.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Config.php
new file mode 100755
index 0000000..b414875
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Config.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Config\Repository
+ */
+class Config extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'config'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Cookie.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Cookie.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Cookie.php
new file mode 100755
index 0000000..c22c45f
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Cookie.php
@@ -0,0 +1,38 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Cookie\CookieJar
+ */
+class Cookie extends Facade {
+
+	/**
+	 * Determine if a cookie exists on the request.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public static function has($key)
+	{
+		return ! is_null(static::$app['request']->cookie($key, null));
+	}
+
+	/**
+	 * Retrieve a cookie from the request.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return string
+	 */
+	public static function get($key = null, $default = null)
+	{
+		return static::$app['request']->cookie($key, $default);
+	}
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'cookie'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Crypt.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Crypt.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Crypt.php
new file mode 100755
index 0000000..d5992bb
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Crypt.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Encryption\Encrypter
+ */
+class Crypt extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'encrypter'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/DB.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/DB.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/DB.php
new file mode 100755
index 0000000..c83e2fd
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/DB.php
@@ -0,0 +1,16 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Database\DatabaseManager
+ * @see \Illuminate\Database\Connection
+ */
+class DB extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'db'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Event.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Event.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Event.php
new file mode 100755
index 0000000..d6f6517
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Event.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Events\Dispatcher
+ */
+class Event extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'events'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php
new file mode 100755
index 0000000..dee7313
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php
@@ -0,0 +1,224 @@
+<?php namespace Illuminate\Support\Facades;
+
+use Mockery\MockInterface;
+
+abstract class Facade {
+
+	/**
+	 * The application instance being facaded.
+	 *
+	 * @var \Illuminate\Foundation\Application
+	 */
+	protected static $app;
+
+	/**
+	 * The resolved object instances.
+	 *
+	 * @var array
+	 */
+	protected static $resolvedInstance;
+
+	/**
+	 * Hotswap the underlying instance behind the facade.
+	 *
+	 * @param  mixed  $instance
+	 * @return void
+	 */
+	public static function swap($instance)
+	{
+		static::$resolvedInstance[static::getFacadeAccessor()] = $instance;
+
+		static::$app->instance(static::getFacadeAccessor(), $instance);
+	}
+
+	/**
+	 * Initiate a mock expectation on the facade.
+	 *
+	 * @param  mixed
+	 * @return \Mockery\Expectation
+	 */
+	public static function shouldReceive()
+	{
+		$name = static::getFacadeAccessor();
+
+		if (static::isMock())
+		{
+			$mock = static::$resolvedInstance[$name];
+		}
+		else
+		{
+			$mock = static::createFreshMockInstance($name);
+		}
+
+		return call_user_func_array(array($mock, 'shouldReceive'), func_get_args());
+	}
+
+	/**
+	 * Create a fresh mock instance for the given class.
+	 *
+	 * @param  string  $name
+	 * @return \Mockery\Expectation
+	 */
+	protected static function createFreshMockInstance($name)
+	{
+		static::$resolvedInstance[$name] = $mock = static::createMockByName($name);
+
+		if (isset(static::$app))
+		{
+			static::$app->instance($name, $mock);
+		}
+
+		return $mock;
+	}
+
+	/**
+	 * Create a fresh mock instance for the given class.
+	 *
+	 * @param  string  $name
+	 * @return \Mockery\Expectation
+	 */
+	protected static function createMockByName($name)
+	{
+		$class = static::getMockableClass($name);
+
+		return $class ? \Mockery::mock($class) : \Mockery::mock();
+	}
+
+	/**
+	 * Determines whether a mock is set as the instance of the facade.
+	 *
+	 * @return bool
+	 */
+	protected static function isMock()
+	{
+		$name = static::getFacadeAccessor();
+
+		return isset(static::$resolvedInstance[$name]) && static::$resolvedInstance[$name] instanceof MockInterface;
+	}
+
+	/**
+	 * Get the mockable class for the bound instance.
+	 *
+	 * @return string
+	 */
+	protected static function getMockableClass()
+	{
+		if ($root = static::getFacadeRoot()) return get_class($root);
+	}
+
+	/**
+	 * Get the root object behind the facade.
+	 *
+	 * @return mixed
+	 */
+	public static function getFacadeRoot()
+	{
+		return static::resolveFacadeInstance(static::getFacadeAccessor());
+	}
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 *
+	 * @throws \RuntimeException
+	 */
+	protected static function getFacadeAccessor()
+	{
+		throw new \RuntimeException("Facade does not implement getFacadeAccessor method.");
+	}
+
+	/**
+	 * Resolve the facade root instance from the container.
+	 *
+	 * @param  string  $name
+	 * @return mixed
+	 */
+	protected static function resolveFacadeInstance($name)
+	{
+		if (is_object($name)) return $name;
+
+		if (isset(static::$resolvedInstance[$name]))
+		{
+			return static::$resolvedInstance[$name];
+		}
+
+		return static::$resolvedInstance[$name] = static::$app[$name];
+	}
+
+	/**
+	 * Clear a resolved facade instance.
+	 *
+	 * @param  string  $name
+	 * @return void
+	 */
+	public static function clearResolvedInstance($name)
+	{
+		unset(static::$resolvedInstance[$name]);
+	}
+
+	/**
+	 * Clear all of the resolved instances.
+	 *
+	 * @return void
+	 */
+	public static function clearResolvedInstances()
+	{
+		static::$resolvedInstance = array();
+	}
+
+	/**
+	 * Get the application instance behind the facade.
+	 *
+	 * @return \Illuminate\Foundation\Application
+	 */
+	public static function getFacadeApplication()
+	{
+		return static::$app;
+	}
+
+	/**
+	 * Set the application instance.
+	 *
+	 * @param  \Illuminate\Foundation\Application  $app
+	 * @return void
+	 */
+	public static function setFacadeApplication($app)
+	{
+		static::$app = $app;
+	}
+
+	/**
+	 * Handle dynamic, static calls to the object.
+	 *
+	 * @param  string  $method
+	 * @param  array   $args
+	 * @return mixed
+	 */
+	public static function __callStatic($method, $args)
+	{
+		$instance = static::getFacadeRoot();
+
+		switch (count($args))
+		{
+			case 0:
+				return $instance->$method();
+
+			case 1:
+				return $instance->$method($args[0]);
+
+			case 2:
+				return $instance->$method($args[0], $args[1]);
+
+			case 3:
+				return $instance->$method($args[0], $args[1], $args[2]);
+
+			case 4:
+				return $instance->$method($args[0], $args[1], $args[2], $args[3]);
+
+			default:
+				return call_user_func_array(array($instance, $method), $args);
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/File.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/File.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/File.php
new file mode 100755
index 0000000..058203d
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/File.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Filesystem\Filesystem
+ */
+class File extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'files'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Form.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Form.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Form.php
new file mode 100755
index 0000000..42ccf25
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Form.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Html\FormBuilder
+ */
+class Form extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'form'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/HTML.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/HTML.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/HTML.php
new file mode 100755
index 0000000..d30b434
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/HTML.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Html\HtmlBuilder
+ */
+class HTML extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'html'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Hash.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Hash.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Hash.php
new file mode 100755
index 0000000..5960198
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Hash.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Hashing\BcryptHasher
+ */
+class Hash extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'hash'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Input.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Input.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Input.php
new file mode 100755
index 0000000..231876e
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Input.php
@@ -0,0 +1,29 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Http\Request
+ */
+class Input extends Facade {
+
+	/**
+	 * Get an item from the input data.
+	 *
+	 * This method is used for all request verbs (GET, POST, PUT, and DELETE)
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return mixed
+	 */
+	public static function get($key = null, $default = null)
+	{
+		return static::$app['request']->input($key, $default);
+	}
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'request'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Lang.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Lang.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Lang.php
new file mode 100755
index 0000000..fe2b8b4
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Lang.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Translation\Translator
+ */
+class Lang extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'translator'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php
new file mode 100755
index 0000000..3504a01
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Log\Writer
+ */
+class Log extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'log'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Mail.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Mail.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Mail.php
new file mode 100755
index 0000000..5881acf
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Mail.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Mail\Mailer
+ */
+class Mail extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'mailer'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Paginator.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Paginator.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Paginator.php
new file mode 100755
index 0000000..5c099e0
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Paginator.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Pagination\Factory
+ */
+class Paginator extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'paginator'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Password.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Password.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Password.php
new file mode 100755
index 0000000..d81a09f
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Password.php
@@ -0,0 +1,50 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Auth\Reminders\PasswordBroker
+ */
+class Password extends Facade {
+
+	/**
+	 * Constant representing a successfully sent reminder.
+	 *
+	 * @var int
+	 */
+	const REMINDER_SENT = 'reminders.sent';
+
+	/**
+	 * Constant representing a successfully reset password.
+	 *
+	 * @var int
+	 */
+	const PASSWORD_RESET = 'reminders.reset';
+
+	/**
+	 * Constant representing the user not found response.
+	 *
+	 * @var int
+	 */
+	const INVALID_USER = 'reminders.user';
+
+	/**
+	 * Constant representing an invalid password.
+	 *
+	 * @var int
+	 */
+	const INVALID_PASSWORD = 'reminders.password';
+
+	/**
+	 * Constant representing an invalid token.
+	 *
+	 * @var int
+	 */
+	const INVALID_TOKEN = 'reminders.token';
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'auth.reminder'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Queue.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Queue.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Queue.php
new file mode 100755
index 0000000..f2074ed
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Queue.php
@@ -0,0 +1,16 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Queue\QueueManager
+ * @see \Illuminate\Queue\Queue
+ */
+class Queue extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'queue'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Redirect.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Redirect.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Redirect.php
new file mode 100755
index 0000000..164a37f
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Redirect.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Routing\Redirector
+ */
+class Redirect extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'redirect'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Redis.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Redis.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Redis.php
new file mode 100755
index 0000000..4cf73f2
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Redis.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Redis\Database
+ */
+class Redis extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'redis'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Request.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Request.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Request.php
new file mode 100755
index 0000000..203e43a
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Request.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Http\Request
+ */
+class Request extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'request'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Response.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Response.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Response.php
new file mode 100755
index 0000000..835f7c1
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Response.php
@@ -0,0 +1,112 @@
+<?php namespace Illuminate\Support\Facades;
+
+use Illuminate\Support\Str;
+use Illuminate\Http\JsonResponse;
+use Illuminate\Support\Traits\MacroableTrait;
+use Illuminate\Http\Response as IlluminateResponse;
+use Illuminate\Support\Contracts\ArrayableInterface;
+use Symfony\Component\HttpFoundation\StreamedResponse;
+use Symfony\Component\HttpFoundation\BinaryFileResponse;
+
+class Response {
+
+	use MacroableTrait;
+
+	/**
+	 * Return a new response from the application.
+	 *
+	 * @param  string  $content
+	 * @param  int     $status
+	 * @param  array   $headers
+	 * @return \Illuminate\Http\Response
+	 */
+	public static function make($content = '', $status = 200, array $headers = array())
+	{
+		return new IlluminateResponse($content, $status, $headers);
+	}
+
+	/**
+	 * Return a new view response from the application.
+	 *
+	 * @param  string  $view
+	 * @param  array   $data
+	 * @param  int     $status
+	 * @param  array   $headers
+	 * @return \Illuminate\Http\Response
+	 */
+	public static function view($view, $data = array(), $status = 200, array $headers = array())
+	{
+		$app = Facade::getFacadeApplication();
+
+		return static::make($app['view']->make($view, $data), $status, $headers);
+	}
+
+	/**
+	 * Return a new JSON response from the application.
+	 *
+	 * @param  string|array  $data
+	 * @param  int    $status
+	 * @param  array  $headers
+	 * @param  int    $options
+	 * @return \Illuminate\Http\JsonResponse
+	 */
+	public static function json($data = array(), $status = 200, array $headers = array(), $options = 0)
+	{
+		if ($data instanceof ArrayableInterface)
+		{
+			$data = $data->toArray();
+		}
+
+		return new JsonResponse($data, $status, $headers, $options);
+	}
+
+	/**
+	 * Return a new JSONP response from the application.
+	 *
+	 * @param  string  $callback
+	 * @param  string|array  $data
+	 * @param  int    $status
+	 * @param  array  $headers
+	 * @param  int    $options
+	 * @return \Illuminate\Http\JsonResponse
+	 */
+	public static function jsonp($callback, $data = [], $status = 200, array $headers = [], $options = 0)
+	{
+		return static::json($data, $status, $headers, $options)->setCallback($callback);
+	}
+
+	/**
+	 * Return a new streamed response from the application.
+	 *
+	 * @param  \Closure  $callback
+	 * @param  int      $status
+	 * @param  array    $headers
+	 * @return \Symfony\Component\HttpFoundation\StreamedResponse
+	 */
+	public static function stream($callback, $status = 200, array $headers = array())
+	{
+		return new StreamedResponse($callback, $status, $headers);
+	}
+
+	/**
+	 * Create a new file download response.
+	 *
+	 * @param  \SplFileInfo|string  $file
+	 * @param  string  $name
+	 * @param  array   $headers
+	 * @param  null|string  $disposition
+	 * @return \Symfony\Component\HttpFoundation\BinaryFileResponse
+	 */
+	public static function download($file, $name = null, array $headers = array(), $disposition = 'attachment')
+	{
+		$response = new BinaryFileResponse($file, 200, $headers, true, $disposition);
+
+		if ( ! is_null($name))
+		{
+			return $response->setContentDisposition($disposition, $name, str_replace('%', '', Str::ascii($name)));
+		}
+
+		return $response;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Route.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Route.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Route.php
new file mode 100755
index 0000000..3f1fa48
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Route.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Routing\Router
+ */
+class Route extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'router'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/SSH.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/SSH.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/SSH.php
new file mode 100644
index 0000000..5178a4b
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/SSH.php
@@ -0,0 +1,16 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Remote\RemoteManager
+ * @see \Illuminate\Remote\Connection
+ */
+class SSH extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'remote'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Schema.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Schema.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Schema.php
new file mode 100755
index 0000000..7d185e7
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Schema.php
@@ -0,0 +1,29 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Database\Schema\Builder
+ */
+class Schema extends Facade {
+
+	/**
+	 * Get a schema builder instance for a connection.
+	 *
+	 * @param  string  $name
+	 * @return \Illuminate\Database\Schema\Builder
+	 */
+	public static function connection($name)
+	{
+		return static::$app['db']->connection($name)->getSchemaBuilder();
+	}
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor()
+	{
+		return static::$app['db']->connection()->getSchemaBuilder();
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Session.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Session.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Session.php
new file mode 100755
index 0000000..fdc6c7f
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Session.php
@@ -0,0 +1,16 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Session\SessionManager
+ * @see \Illuminate\Session\Store
+ */
+class Session extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'session'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/URL.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/URL.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/URL.php
new file mode 100755
index 0000000..e9d7e10
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/URL.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Routing\UrlGenerator
+ */
+class URL extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'url'; }
+
+}


[43/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/Airavata/Model/AppCatalog/Types.php
----------------------------------------------------------------------
diff --git a/app/libraries/Airavata/Model/AppCatalog/Types.php b/app/libraries/Airavata/Model/AppCatalog/Types.php
new file mode 100644
index 0000000..2e4c195
--- /dev/null
+++ b/app/libraries/Airavata/Model/AppCatalog/Types.php
@@ -0,0 +1,1636 @@
+<?php
+namespace Airavata\Model\AppCatalog;
+
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+use Thrift\Base\TBase;
+use Thrift\Type\TType;
+use Thrift\Type\TMessageType;
+use Thrift\Exception\TException;
+use Thrift\Exception\TProtocolException;
+use Thrift\Protocol\TProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
+use Thrift\Exception\TApplicationException;
+
+
+final class ResourceJobManager {
+  const FORK = 0;
+  const PBS = 1;
+  const UGE = 2;
+  const SLURM = 3;
+  static public $__names = array(
+    0 => 'FORK',
+    1 => 'PBS',
+    2 => 'UGE',
+    3 => 'SLURM',
+  );
+}
+
+final class JobSubmissionProtocol {
+  const SSH = 0;
+  const GSISSH = 1;
+  const GRAM = 2;
+  const UNICORE = 3;
+  static public $__names = array(
+    0 => 'SSH',
+    1 => 'GSISSH',
+    2 => 'GRAM',
+    3 => 'UNICORE',
+  );
+}
+
+final class DataMovementProtocol {
+  const SCP = 0;
+  const SFTP = 1;
+  const GridFTP = 2;
+  const UNICORE_STORAGE_SERVICE = 3;
+  static public $__names = array(
+    0 => 'SCP',
+    1 => 'SFTP',
+    2 => 'GridFTP',
+    3 => 'UNICORE_STORAGE_SERVICE',
+  );
+}
+
+final class SecurityProtocol {
+  const USERNAME_PASSWORD = 0;
+  const SSH_KEYS = 1;
+  const GSI = 2;
+  const KERBEROS = 3;
+  const OAUTH = 4;
+  static public $__names = array(
+    0 => 'USERNAME_PASSWORD',
+    1 => 'SSH_KEYS',
+    2 => 'GSI',
+    3 => 'KERBEROS',
+    4 => 'OAUTH',
+  );
+}
+
+class SCPDataMovement {
+  static $_TSPEC;
+
+  public $dataMovementDataID = "DO_NOT_SET_AT_CLIENTS";
+  public $securityProtocol = null;
+  public $sshPort = 22;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'dataMovementDataID',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'securityProtocol',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'sshPort',
+          'type' => TType::I32,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['dataMovementDataID'])) {
+        $this->dataMovementDataID = $vals['dataMovementDataID'];
+      }
+      if (isset($vals['securityProtocol'])) {
+        $this->securityProtocol = $vals['securityProtocol'];
+      }
+      if (isset($vals['sshPort'])) {
+        $this->sshPort = $vals['sshPort'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'SCPDataMovement';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->dataMovementDataID);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->securityProtocol);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->sshPort);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('SCPDataMovement');
+    if ($this->dataMovementDataID !== null) {
+      $xfer += $output->writeFieldBegin('dataMovementDataID', TType::STRING, 1);
+      $xfer += $output->writeString($this->dataMovementDataID);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->securityProtocol !== null) {
+      $xfer += $output->writeFieldBegin('securityProtocol', TType::I32, 2);
+      $xfer += $output->writeI32($this->securityProtocol);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->sshPort !== null) {
+      $xfer += $output->writeFieldBegin('sshPort', TType::I32, 3);
+      $xfer += $output->writeI32($this->sshPort);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class GridFTPDataMovement {
+  static $_TSPEC;
+
+  public $dataMovementDataID = "DO_NOT_SET_AT_CLIENTS";
+  public $securityProtocol = null;
+  public $gridFTPEndPoint = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'dataMovementDataID',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'securityProtocol',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'gridFTPEndPoint',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['dataMovementDataID'])) {
+        $this->dataMovementDataID = $vals['dataMovementDataID'];
+      }
+      if (isset($vals['securityProtocol'])) {
+        $this->securityProtocol = $vals['securityProtocol'];
+      }
+      if (isset($vals['gridFTPEndPoint'])) {
+        $this->gridFTPEndPoint = $vals['gridFTPEndPoint'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'GridFTPDataMovement';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->dataMovementDataID);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->securityProtocol);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::LST) {
+            $this->gridFTPEndPoint = array();
+            $_size0 = 0;
+            $_etype3 = 0;
+            $xfer += $input->readListBegin($_etype3, $_size0);
+            for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
+            {
+              $elem5 = null;
+              $xfer += $input->readString($elem5);
+              $this->gridFTPEndPoint []= $elem5;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('GridFTPDataMovement');
+    if ($this->dataMovementDataID !== null) {
+      $xfer += $output->writeFieldBegin('dataMovementDataID', TType::STRING, 1);
+      $xfer += $output->writeString($this->dataMovementDataID);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->securityProtocol !== null) {
+      $xfer += $output->writeFieldBegin('securityProtocol', TType::I32, 2);
+      $xfer += $output->writeI32($this->securityProtocol);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->gridFTPEndPoint !== null) {
+      if (!is_array($this->gridFTPEndPoint)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('gridFTPEndPoint', TType::LST, 3);
+      {
+        $output->writeListBegin(TType::STRING, count($this->gridFTPEndPoint));
+        {
+          foreach ($this->gridFTPEndPoint as $iter6)
+          {
+            $xfer += $output->writeString($iter6);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class SSHJobSubmission {
+  static $_TSPEC;
+
+  public $jobSubmissionDataID = "DO_NOT_SET_AT_CLIENTS";
+  public $resourceJobManager = null;
+  public $sshPort = 22;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'jobSubmissionDataID',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'resourceJobManager',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'sshPort',
+          'type' => TType::I32,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['jobSubmissionDataID'])) {
+        $this->jobSubmissionDataID = $vals['jobSubmissionDataID'];
+      }
+      if (isset($vals['resourceJobManager'])) {
+        $this->resourceJobManager = $vals['resourceJobManager'];
+      }
+      if (isset($vals['sshPort'])) {
+        $this->sshPort = $vals['sshPort'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'SSHJobSubmission';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->jobSubmissionDataID);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->resourceJobManager);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->sshPort);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('SSHJobSubmission');
+    if ($this->jobSubmissionDataID !== null) {
+      $xfer += $output->writeFieldBegin('jobSubmissionDataID', TType::STRING, 1);
+      $xfer += $output->writeString($this->jobSubmissionDataID);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->resourceJobManager !== null) {
+      $xfer += $output->writeFieldBegin('resourceJobManager', TType::I32, 2);
+      $xfer += $output->writeI32($this->resourceJobManager);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->sshPort !== null) {
+      $xfer += $output->writeFieldBegin('sshPort', TType::I32, 3);
+      $xfer += $output->writeI32($this->sshPort);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class GlobusJobSubmission {
+  static $_TSPEC;
+
+  public $jobSubmissionDataID = "DO_NOT_SET_AT_CLIENTS";
+  public $securityProtocol = null;
+  public $resourceJobManager = null;
+  public $globusGateKeeperEndPoint = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'jobSubmissionDataID',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'securityProtocol',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'resourceJobManager',
+          'type' => TType::I32,
+          ),
+        4 => array(
+          'var' => 'globusGateKeeperEndPoint',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['jobSubmissionDataID'])) {
+        $this->jobSubmissionDataID = $vals['jobSubmissionDataID'];
+      }
+      if (isset($vals['securityProtocol'])) {
+        $this->securityProtocol = $vals['securityProtocol'];
+      }
+      if (isset($vals['resourceJobManager'])) {
+        $this->resourceJobManager = $vals['resourceJobManager'];
+      }
+      if (isset($vals['globusGateKeeperEndPoint'])) {
+        $this->globusGateKeeperEndPoint = $vals['globusGateKeeperEndPoint'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'GlobusJobSubmission';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->jobSubmissionDataID);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->securityProtocol);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->resourceJobManager);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::LST) {
+            $this->globusGateKeeperEndPoint = array();
+            $_size7 = 0;
+            $_etype10 = 0;
+            $xfer += $input->readListBegin($_etype10, $_size7);
+            for ($_i11 = 0; $_i11 < $_size7; ++$_i11)
+            {
+              $elem12 = null;
+              $xfer += $input->readString($elem12);
+              $this->globusGateKeeperEndPoint []= $elem12;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('GlobusJobSubmission');
+    if ($this->jobSubmissionDataID !== null) {
+      $xfer += $output->writeFieldBegin('jobSubmissionDataID', TType::STRING, 1);
+      $xfer += $output->writeString($this->jobSubmissionDataID);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->securityProtocol !== null) {
+      $xfer += $output->writeFieldBegin('securityProtocol', TType::I32, 2);
+      $xfer += $output->writeI32($this->securityProtocol);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->resourceJobManager !== null) {
+      $xfer += $output->writeFieldBegin('resourceJobManager', TType::I32, 3);
+      $xfer += $output->writeI32($this->resourceJobManager);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->globusGateKeeperEndPoint !== null) {
+      if (!is_array($this->globusGateKeeperEndPoint)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('globusGateKeeperEndPoint', TType::LST, 4);
+      {
+        $output->writeListBegin(TType::STRING, count($this->globusGateKeeperEndPoint));
+        {
+          foreach ($this->globusGateKeeperEndPoint as $iter13)
+          {
+            $xfer += $output->writeString($iter13);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class GSISSHJobSubmission {
+  static $_TSPEC;
+
+  public $jobSubmissionDataID = "DO_NOT_SET_AT_CLIENTS";
+  public $resourceJobManager = null;
+  public $sshPort = 22;
+  public $exports = null;
+  public $preJobCommands = null;
+  public $postJobCommands = null;
+  public $installedPath = null;
+  public $monitorMode = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'jobSubmissionDataID',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'resourceJobManager',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'sshPort',
+          'type' => TType::I32,
+          ),
+        4 => array(
+          'var' => 'exports',
+          'type' => TType::SET,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        5 => array(
+          'var' => 'preJobCommands',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        6 => array(
+          'var' => 'postJobCommands',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        7 => array(
+          'var' => 'installedPath',
+          'type' => TType::STRING,
+          ),
+        8 => array(
+          'var' => 'monitorMode',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['jobSubmissionDataID'])) {
+        $this->jobSubmissionDataID = $vals['jobSubmissionDataID'];
+      }
+      if (isset($vals['resourceJobManager'])) {
+        $this->resourceJobManager = $vals['resourceJobManager'];
+      }
+      if (isset($vals['sshPort'])) {
+        $this->sshPort = $vals['sshPort'];
+      }
+      if (isset($vals['exports'])) {
+        $this->exports = $vals['exports'];
+      }
+      if (isset($vals['preJobCommands'])) {
+        $this->preJobCommands = $vals['preJobCommands'];
+      }
+      if (isset($vals['postJobCommands'])) {
+        $this->postJobCommands = $vals['postJobCommands'];
+      }
+      if (isset($vals['installedPath'])) {
+        $this->installedPath = $vals['installedPath'];
+      }
+      if (isset($vals['monitorMode'])) {
+        $this->monitorMode = $vals['monitorMode'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'GSISSHJobSubmission';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->jobSubmissionDataID);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->resourceJobManager);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->sshPort);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::SET) {
+            $this->exports = array();
+            $_size14 = 0;
+            $_etype17 = 0;
+            $xfer += $input->readSetBegin($_etype17, $_size14);
+            for ($_i18 = 0; $_i18 < $_size14; ++$_i18)
+            {
+              $elem19 = null;
+              $xfer += $input->readString($elem19);
+              if (is_scalar($elem19)) {
+                $this->exports[$elem19] = true;
+              } else {
+                $this->exports []= $elem19;
+              }
+            }
+            $xfer += $input->readSetEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::LST) {
+            $this->preJobCommands = array();
+            $_size20 = 0;
+            $_etype23 = 0;
+            $xfer += $input->readListBegin($_etype23, $_size20);
+            for ($_i24 = 0; $_i24 < $_size20; ++$_i24)
+            {
+              $elem25 = null;
+              $xfer += $input->readString($elem25);
+              $this->preJobCommands []= $elem25;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::LST) {
+            $this->postJobCommands = array();
+            $_size26 = 0;
+            $_etype29 = 0;
+            $xfer += $input->readListBegin($_etype29, $_size26);
+            for ($_i30 = 0; $_i30 < $_size26; ++$_i30)
+            {
+              $elem31 = null;
+              $xfer += $input->readString($elem31);
+              $this->postJobCommands []= $elem31;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->installedPath);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 8:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->monitorMode);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('GSISSHJobSubmission');
+    if ($this->jobSubmissionDataID !== null) {
+      $xfer += $output->writeFieldBegin('jobSubmissionDataID', TType::STRING, 1);
+      $xfer += $output->writeString($this->jobSubmissionDataID);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->resourceJobManager !== null) {
+      $xfer += $output->writeFieldBegin('resourceJobManager', TType::I32, 2);
+      $xfer += $output->writeI32($this->resourceJobManager);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->sshPort !== null) {
+      $xfer += $output->writeFieldBegin('sshPort', TType::I32, 3);
+      $xfer += $output->writeI32($this->sshPort);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->exports !== null) {
+      if (!is_array($this->exports)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('exports', TType::SET, 4);
+      {
+        $output->writeSetBegin(TType::STRING, count($this->exports));
+        {
+          foreach ($this->exports as $iter32 => $iter33)
+          {
+            if (is_scalar($iter33)) {
+            $xfer += $output->writeString($iter32);
+            } else {
+            $xfer += $output->writeString($iter33);
+            }
+          }
+        }
+        $output->writeSetEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->preJobCommands !== null) {
+      if (!is_array($this->preJobCommands)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('preJobCommands', TType::LST, 5);
+      {
+        $output->writeListBegin(TType::STRING, count($this->preJobCommands));
+        {
+          foreach ($this->preJobCommands as $iter34)
+          {
+            $xfer += $output->writeString($iter34);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->postJobCommands !== null) {
+      if (!is_array($this->postJobCommands)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('postJobCommands', TType::LST, 6);
+      {
+        $output->writeListBegin(TType::STRING, count($this->postJobCommands));
+        {
+          foreach ($this->postJobCommands as $iter35)
+          {
+            $xfer += $output->writeString($iter35);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->installedPath !== null) {
+      $xfer += $output->writeFieldBegin('installedPath', TType::STRING, 7);
+      $xfer += $output->writeString($this->installedPath);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->monitorMode !== null) {
+      $xfer += $output->writeFieldBegin('monitorMode', TType::STRING, 8);
+      $xfer += $output->writeString($this->monitorMode);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ComputeResourceDescription {
+  static $_TSPEC;
+
+  public $isEmpty = false;
+  public $resourceId = "DO_NOT_SET_AT_CLIENTS";
+  public $hostName = null;
+  public $hostAliases = null;
+  public $ipAddresses = null;
+  public $resourceDescription = null;
+  public $scratchLocation = null;
+  public $preferredJobSubmissionProtocol = null;
+  public $jobSubmissionProtocols = null;
+  public $dataMovementProtocols = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'isEmpty',
+          'type' => TType::BOOL,
+          ),
+        2 => array(
+          'var' => 'resourceId',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'hostName',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'hostAliases',
+          'type' => TType::SET,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        5 => array(
+          'var' => 'ipAddresses',
+          'type' => TType::SET,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        6 => array(
+          'var' => 'resourceDescription',
+          'type' => TType::STRING,
+          ),
+        7 => array(
+          'var' => 'scratchLocation',
+          'type' => TType::STRING,
+          ),
+        8 => array(
+          'var' => 'preferredJobSubmissionProtocol',
+          'type' => TType::STRING,
+          ),
+        9 => array(
+          'var' => 'jobSubmissionProtocols',
+          'type' => TType::MAP,
+          'ktype' => TType::STRING,
+          'vtype' => TType::I32,
+          'key' => array(
+            'type' => TType::STRING,
+          ),
+          'val' => array(
+            'type' => TType::I32,
+            ),
+          ),
+        10 => array(
+          'var' => 'dataMovementProtocols',
+          'type' => TType::MAP,
+          'ktype' => TType::STRING,
+          'vtype' => TType::I32,
+          'key' => array(
+            'type' => TType::STRING,
+          ),
+          'val' => array(
+            'type' => TType::I32,
+            ),
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['isEmpty'])) {
+        $this->isEmpty = $vals['isEmpty'];
+      }
+      if (isset($vals['resourceId'])) {
+        $this->resourceId = $vals['resourceId'];
+      }
+      if (isset($vals['hostName'])) {
+        $this->hostName = $vals['hostName'];
+      }
+      if (isset($vals['hostAliases'])) {
+        $this->hostAliases = $vals['hostAliases'];
+      }
+      if (isset($vals['ipAddresses'])) {
+        $this->ipAddresses = $vals['ipAddresses'];
+      }
+      if (isset($vals['resourceDescription'])) {
+        $this->resourceDescription = $vals['resourceDescription'];
+      }
+      if (isset($vals['scratchLocation'])) {
+        $this->scratchLocation = $vals['scratchLocation'];
+      }
+      if (isset($vals['preferredJobSubmissionProtocol'])) {
+        $this->preferredJobSubmissionProtocol = $vals['preferredJobSubmissionProtocol'];
+      }
+      if (isset($vals['jobSubmissionProtocols'])) {
+        $this->jobSubmissionProtocols = $vals['jobSubmissionProtocols'];
+      }
+      if (isset($vals['dataMovementProtocols'])) {
+        $this->dataMovementProtocols = $vals['dataMovementProtocols'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ComputeResourceDescription';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->isEmpty);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->resourceId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->hostName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::SET) {
+            $this->hostAliases = array();
+            $_size36 = 0;
+            $_etype39 = 0;
+            $xfer += $input->readSetBegin($_etype39, $_size36);
+            for ($_i40 = 0; $_i40 < $_size36; ++$_i40)
+            {
+              $elem41 = null;
+              $xfer += $input->readString($elem41);
+              if (is_scalar($elem41)) {
+                $this->hostAliases[$elem41] = true;
+              } else {
+                $this->hostAliases []= $elem41;
+              }
+            }
+            $xfer += $input->readSetEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::SET) {
+            $this->ipAddresses = array();
+            $_size42 = 0;
+            $_etype45 = 0;
+            $xfer += $input->readSetBegin($_etype45, $_size42);
+            for ($_i46 = 0; $_i46 < $_size42; ++$_i46)
+            {
+              $elem47 = null;
+              $xfer += $input->readString($elem47);
+              if (is_scalar($elem47)) {
+                $this->ipAddresses[$elem47] = true;
+              } else {
+                $this->ipAddresses []= $elem47;
+              }
+            }
+            $xfer += $input->readSetEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->resourceDescription);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->scratchLocation);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 8:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->preferredJobSubmissionProtocol);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 9:
+          if ($ftype == TType::MAP) {
+            $this->jobSubmissionProtocols = array();
+            $_size48 = 0;
+            $_ktype49 = 0;
+            $_vtype50 = 0;
+            $xfer += $input->readMapBegin($_ktype49, $_vtype50, $_size48);
+            for ($_i52 = 0; $_i52 < $_size48; ++$_i52)
+            {
+              $key53 = '';
+              $val54 = 0;
+              $xfer += $input->readString($key53);
+              $xfer += $input->readI32($val54);
+              $this->jobSubmissionProtocols[$key53] = $val54;
+            }
+            $xfer += $input->readMapEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 10:
+          if ($ftype == TType::MAP) {
+            $this->dataMovementProtocols = array();
+            $_size55 = 0;
+            $_ktype56 = 0;
+            $_vtype57 = 0;
+            $xfer += $input->readMapBegin($_ktype56, $_vtype57, $_size55);
+            for ($_i59 = 0; $_i59 < $_size55; ++$_i59)
+            {
+              $key60 = '';
+              $val61 = 0;
+              $xfer += $input->readString($key60);
+              $xfer += $input->readI32($val61);
+              $this->dataMovementProtocols[$key60] = $val61;
+            }
+            $xfer += $input->readMapEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ComputeResourceDescription');
+    if ($this->isEmpty !== null) {
+      $xfer += $output->writeFieldBegin('isEmpty', TType::BOOL, 1);
+      $xfer += $output->writeBool($this->isEmpty);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->resourceId !== null) {
+      $xfer += $output->writeFieldBegin('resourceId', TType::STRING, 2);
+      $xfer += $output->writeString($this->resourceId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->hostName !== null) {
+      $xfer += $output->writeFieldBegin('hostName', TType::STRING, 3);
+      $xfer += $output->writeString($this->hostName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->hostAliases !== null) {
+      if (!is_array($this->hostAliases)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('hostAliases', TType::SET, 4);
+      {
+        $output->writeSetBegin(TType::STRING, count($this->hostAliases));
+        {
+          foreach ($this->hostAliases as $iter62 => $iter63)
+          {
+            if (is_scalar($iter63)) {
+            $xfer += $output->writeString($iter62);
+            } else {
+            $xfer += $output->writeString($iter63);
+            }
+          }
+        }
+        $output->writeSetEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ipAddresses !== null) {
+      if (!is_array($this->ipAddresses)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('ipAddresses', TType::SET, 5);
+      {
+        $output->writeSetBegin(TType::STRING, count($this->ipAddresses));
+        {
+          foreach ($this->ipAddresses as $iter64 => $iter65)
+          {
+            if (is_scalar($iter65)) {
+            $xfer += $output->writeString($iter64);
+            } else {
+            $xfer += $output->writeString($iter65);
+            }
+          }
+        }
+        $output->writeSetEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->resourceDescription !== null) {
+      $xfer += $output->writeFieldBegin('resourceDescription', TType::STRING, 6);
+      $xfer += $output->writeString($this->resourceDescription);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->scratchLocation !== null) {
+      $xfer += $output->writeFieldBegin('scratchLocation', TType::STRING, 7);
+      $xfer += $output->writeString($this->scratchLocation);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->preferredJobSubmissionProtocol !== null) {
+      $xfer += $output->writeFieldBegin('preferredJobSubmissionProtocol', TType::STRING, 8);
+      $xfer += $output->writeString($this->preferredJobSubmissionProtocol);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->jobSubmissionProtocols !== null) {
+      if (!is_array($this->jobSubmissionProtocols)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('jobSubmissionProtocols', TType::MAP, 9);
+      {
+        $output->writeMapBegin(TType::STRING, TType::I32, count($this->jobSubmissionProtocols));
+        {
+          foreach ($this->jobSubmissionProtocols as $kiter66 => $viter67)
+          {
+            $xfer += $output->writeString($kiter66);
+            $xfer += $output->writeI32($viter67);
+          }
+        }
+        $output->writeMapEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->dataMovementProtocols !== null) {
+      if (!is_array($this->dataMovementProtocols)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('dataMovementProtocols', TType::MAP, 10);
+      {
+        $output->writeMapBegin(TType::STRING, TType::I32, count($this->dataMovementProtocols));
+        {
+          foreach ($this->dataMovementProtocols as $kiter68 => $viter69)
+          {
+            $xfer += $output->writeString($kiter68);
+            $xfer += $output->writeI32($viter69);
+          }
+        }
+        $output->writeMapEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ApplicationDescriptor {
+  static $_TSPEC;
+
+  public $applicationDescriptorId = "DO_NOT_SET_AT_CLIENTS";
+  public $applicationDescriptorData = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'applicationDescriptorId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'applicationDescriptorData',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['applicationDescriptorId'])) {
+        $this->applicationDescriptorId = $vals['applicationDescriptorId'];
+      }
+      if (isset($vals['applicationDescriptorData'])) {
+        $this->applicationDescriptorData = $vals['applicationDescriptorData'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ApplicationDescriptor';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->applicationDescriptorId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->applicationDescriptorData);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ApplicationDescriptor');
+    if ($this->applicationDescriptorId !== null) {
+      $xfer += $output->writeFieldBegin('applicationDescriptorId', TType::STRING, 1);
+      $xfer += $output->writeString($this->applicationDescriptorId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationDescriptorData !== null) {
+      $xfer += $output->writeFieldBegin('applicationDescriptorData', TType::STRING, 2);
+      $xfer += $output->writeString($this->applicationDescriptorData);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ApplicationDeployment {
+  static $_TSPEC;
+
+  public $deploymentId = "DO_NOT_SET_AT_CLIENTS";
+  public $computeResourceDescription = null;
+  public $applicationDescriptor = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'deploymentId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'computeResourceDescription',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\AppCatalog\ComputeResourceDescription',
+          ),
+        3 => array(
+          'var' => 'applicationDescriptor',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\AppCatalog\ApplicationDescriptor',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['deploymentId'])) {
+        $this->deploymentId = $vals['deploymentId'];
+      }
+      if (isset($vals['computeResourceDescription'])) {
+        $this->computeResourceDescription = $vals['computeResourceDescription'];
+      }
+      if (isset($vals['applicationDescriptor'])) {
+        $this->applicationDescriptor = $vals['applicationDescriptor'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ApplicationDeployment';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->deploymentId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->computeResourceDescription = new \Airavata\Model\AppCatalog\ComputeResourceDescription();
+            $xfer += $this->computeResourceDescription->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRUCT) {
+            $this->applicationDescriptor = new \Airavata\Model\AppCatalog\ApplicationDescriptor();
+            $xfer += $this->applicationDescriptor->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ApplicationDeployment');
+    if ($this->deploymentId !== null) {
+      $xfer += $output->writeFieldBegin('deploymentId', TType::STRING, 1);
+      $xfer += $output->writeString($this->deploymentId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->computeResourceDescription !== null) {
+      if (!is_object($this->computeResourceDescription)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('computeResourceDescription', TType::STRUCT, 2);
+      $xfer += $this->computeResourceDescription->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationDescriptor !== null) {
+      if (!is_object($this->applicationDescriptor)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('applicationDescriptor', TType::STRUCT, 3);
+      $xfer += $this->applicationDescriptor->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ApplicationInterface {
+  static $_TSPEC;
+
+  public $applicationInterfaceId = "DO_NOT_SET_AT_CLIENTS";
+  public $applicationInterfaceData = null;
+  public $applicationDeployments = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'applicationInterfaceId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'applicationInterfaceData',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'applicationDeployments',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\ApplicationDeployment',
+            ),
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['applicationInterfaceId'])) {
+        $this->applicationInterfaceId = $vals['applicationInterfaceId'];
+      }
+      if (isset($vals['applicationInterfaceData'])) {
+        $this->applicationInterfaceData = $vals['applicationInterfaceData'];
+      }
+      if (isset($vals['applicationDeployments'])) {
+        $this->applicationDeployments = $vals['applicationDeployments'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ApplicationInterface';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->applicationInterfaceId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->applicationInterfaceData);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::LST) {
+            $this->applicationDeployments = array();
+            $_size70 = 0;
+            $_etype73 = 0;
+            $xfer += $input->readListBegin($_etype73, $_size70);
+            for ($_i74 = 0; $_i74 < $_size70; ++$_i74)
+            {
+              $elem75 = null;
+              $elem75 = new \Airavata\Model\AppCatalog\ApplicationDeployment();
+              $xfer += $elem75->read($input);
+              $this->applicationDeployments []= $elem75;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ApplicationInterface');
+    if ($this->applicationInterfaceId !== null) {
+      $xfer += $output->writeFieldBegin('applicationInterfaceId', TType::STRING, 1);
+      $xfer += $output->writeString($this->applicationInterfaceId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationInterfaceData !== null) {
+      $xfer += $output->writeFieldBegin('applicationInterfaceData', TType::STRING, 2);
+      $xfer += $output->writeString($this->applicationInterfaceData);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationDeployments !== null) {
+      if (!is_array($this->applicationDeployments)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('applicationDeployments', TType::LST, 3);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->applicationDeployments));
+        {
+          foreach ($this->applicationDeployments as $iter76)
+          {
+            $xfer += $iter76->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+$GLOBALS['applicationCatalogDataModel_CONSTANTS']['DEFAULT_ID'] = "DO_NOT_SET_AT_CLIENTS";
+
+


[06/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Router.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Router.php b/vendor/laravel/framework/src/Illuminate/Routing/Router.php
new file mode 100755
index 0000000..002ebaa
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Router.php
@@ -0,0 +1,1748 @@
+<?php namespace Illuminate\Routing;
+
+use Closure;
+use Illuminate\Http\Request;
+use Illuminate\Http\Response;
+use Illuminate\Events\Dispatcher;
+use Illuminate\Container\Container;
+use Symfony\Component\HttpKernel\HttpKernelInterface;
+use Symfony\Component\HttpFoundation\Request as SymfonyRequest;
+use Symfony\Component\HttpFoundation\Response as SymfonyResponse;
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
+
+class Router implements HttpKernelInterface, RouteFiltererInterface {
+
+	/**
+	 * The event dispatcher instance.
+	 *
+	 * @var \Illuminate\Events\Dispatcher
+	 */
+	protected $events;
+
+	/**
+	 * The IoC container instance.
+	 *
+	 * @var \Illuminate\Container\Container
+	 */
+	protected $container;
+
+	/**
+	 * The route collection instance.
+	 *
+	 * @var \Illuminate\Routing\RouteCollection
+	 */
+	protected $routes;
+
+	/**
+	 * The currently dispatched route instance.
+	 *
+	 * @var \Illuminate\Routing\Route
+	 */
+	protected $current;
+
+	/**
+	 * The request currently being dispatched.
+	 *
+	 * @var \Illuminate\Http\Request
+	 */
+	protected $currentRequest;
+
+	/**
+	 * The controller dispatcher instance.
+	 *
+	 * @var \Illuminate\Routing\ControllerDispatcher
+	 */
+	protected $controllerDispatcher;
+
+	/**
+	 * The controller inspector instance.
+	 *
+	 * @var \Illuminate\Routing\ControllerInspector
+	 */
+	protected $inspector;
+
+	/**
+	 * Indicates if the router is running filters.
+	 *
+	 * @var bool
+	 */
+	protected $filtering = true;
+
+	/**
+	 * The registered pattern based filters.
+	 *
+	 * @var array
+	 */
+	protected $patternFilters = array();
+
+	/**
+	 * The registered regular expression based filters.
+	 *
+	 * @var array
+	 */
+	protected $regexFilters = array();
+
+	/**
+	 * The registered route value binders.
+	 *
+	 * @var array
+	 */
+	protected $binders = array();
+
+	/**
+	 * The globally available parameter patterns.
+	 *
+	 * @var array
+	 */
+	protected $patterns = array();
+
+	/**
+	 * The route group attribute stack.
+	 *
+	 * @var array
+	 */
+	protected $groupStack = array();
+
+	/**
+	 * All of the verbs supported by the router.
+	 *
+	 * @var array
+	 */
+	public static $verbs = array('GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS');
+
+	/**
+	 * The default actions for a resourceful controller.
+	 *
+	 * @var array
+	 */
+	protected $resourceDefaults = array('index', 'create', 'store', 'show', 'edit', 'update', 'destroy');
+
+	/**
+	 * Create a new Router instance.
+	 *
+	 * @param  \Illuminate\Events\Dispatcher  $events
+	 * @param  \Illuminate\Container\Container  $container
+	 * @return void
+	 */
+	public function __construct(Dispatcher $events, Container $container = null)
+	{
+		$this->events = $events;
+		$this->routes = new RouteCollection;
+		$this->container = $container ?: new Container;
+
+		$this->bind('_missing', function($v) { return explode('/', $v); });
+	}
+
+	/**
+	 * Register a new GET route with the router.
+	 *
+	 * @param  string  $uri
+	 * @param  \Closure|array|string  $action
+	 * @return \Illuminate\Routing\Route
+	 */
+	public function get($uri, $action)
+	{
+		return $this->addRoute(['GET', 'HEAD'], $uri, $action);
+	}
+
+	/**
+	 * Register a new POST route with the router.
+	 *
+	 * @param  string  $uri
+	 * @param  \Closure|array|string  $action
+	 * @return \Illuminate\Routing\Route
+	 */
+	public function post($uri, $action)
+	{
+		return $this->addRoute('POST', $uri, $action);
+	}
+
+	/**
+	 * Register a new PUT route with the router.
+	 *
+	 * @param  string  $uri
+	 * @param  \Closure|array|string  $action
+	 * @return \Illuminate\Routing\Route
+	 */
+	public function put($uri, $action)
+	{
+		return $this->addRoute('PUT', $uri, $action);
+	}
+
+	/**
+	 * Register a new PATCH route with the router.
+	 *
+	 * @param  string  $uri
+	 * @param  \Closure|array|string  $action
+	 * @return \Illuminate\Routing\Route
+	 */
+	public function patch($uri, $action)
+	{
+		return $this->addRoute('PATCH', $uri, $action);
+	}
+
+	/**
+	 * Register a new DELETE route with the router.
+	 *
+	 * @param  string  $uri
+	 * @param  \Closure|array|string  $action
+	 * @return \Illuminate\Routing\Route
+	 */
+	public function delete($uri, $action)
+	{
+		return $this->addRoute('DELETE', $uri, $action);
+	}
+
+	/**
+	 * Register a new OPTIONS route with the router.
+	 *
+	 * @param  string  $uri
+	 * @param  \Closure|array|string  $action
+	 * @return \Illuminate\Routing\Route
+	 */
+	public function options($uri, $action)
+	{
+		return $this->addRoute('OPTIONS', $uri, $action);
+	}
+
+	/**
+	 * Register a new route responding to all verbs.
+	 *
+	 * @param  string  $uri
+	 * @param  \Closure|array|string  $action
+	 * @return \Illuminate\Routing\Route
+	 */
+	public function any($uri, $action)
+	{
+		$verbs = array('GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE');
+
+		return $this->addRoute($verbs, $uri, $action);
+	}
+
+	/**
+	 * Register a new route with the given verbs.
+	 *
+	 * @param  array|string  $methods
+	 * @param  string  $uri
+	 * @param  \Closure|array|string  $action
+	 * @return \Illuminate\Routing\Route
+	 */
+	public function match($methods, $uri, $action)
+	{
+		return $this->addRoute(array_map('strtoupper', (array) $methods), $uri, $action);
+	}
+
+	/**
+	 * Register an array of controllers with wildcard routing.
+	 *
+	 * @param  array  $controllers
+	 * @return void
+	 */
+	public function controllers(array $controllers)
+	{
+		foreach ($controllers as $uri => $name)
+		{
+			$this->controller($uri, $name);
+		}
+	}
+
+	/**
+	 * Route a controller to a URI with wildcard routing.
+	 *
+	 * @param  string  $uri
+	 * @param  string  $controller
+	 * @param  array   $names
+	 * @return void
+	 */
+	public function controller($uri, $controller, $names = array())
+	{
+		$prepended = $controller;
+
+		// First, we will check to see if a controller prefix has been registered in
+		// the route group. If it has, we will need to prefix it before trying to
+		// reflect into the class instance and pull out the method for routing.
+		if ( ! empty($this->groupStack))
+		{
+			$prepended = $this->prependGroupUses($controller);
+		}
+
+		$routable = $this->getInspector()->getRoutable($prepended, $uri);
+
+		// When a controller is routed using this method, we use Reflection to parse
+		// out all of the routable methods for the controller, then register each
+		// route explicitly for the developers, so reverse routing is possible.
+		foreach ($routable as $method => $routes)
+		{
+			foreach ($routes as $route)
+			{
+				$this->registerInspected($route, $controller, $method, $names);
+			}
+		}
+
+		$this->addFallthroughRoute($controller, $uri);
+	}
+
+	/**
+	 * Register an inspected controller route.
+	 *
+	 * @param  array   $route
+	 * @param  string  $controller
+	 * @param  string  $method
+	 * @param  array   $names
+	 * @return void
+	 */
+	protected function registerInspected($route, $controller, $method, &$names)
+	{
+		$action = array('uses' => $controller.'@'.$method);
+
+		// If a given controller method has been named, we will assign the name to the
+		// controller action array, which provides for a short-cut to method naming
+		// so you don't have to define an individual route for these controllers.
+		$action['as'] = array_get($names, $method);
+
+		$this->{$route['verb']}($route['uri'], $action);
+	}
+
+	/**
+	 * Add a fallthrough route for a controller.
+	 *
+	 * @param  string  $controller
+	 * @param  string  $uri
+	 * @return void
+	 */
+	protected function addFallthroughRoute($controller, $uri)
+	{
+		$missing = $this->any($uri.'/{_missing}', $controller.'@missingMethod');
+
+		$missing->where('_missing', '(.*)');
+	}
+
+	/**
+	 * Route a resource to a controller.
+	 *
+	 * @param  string  $name
+	 * @param  string  $controller
+	 * @param  array   $options
+	 * @return void
+	 */
+	public function resource($name, $controller, array $options = array())
+	{
+		// If the resource name contains a slash, we will assume the developer wishes to
+		// register these resource routes with a prefix so we will set that up out of
+		// the box so they don't have to mess with it. Otherwise, we will continue.
+		if (str_contains($name, '/'))
+		{
+			$this->prefixedResource($name, $controller, $options);
+
+			return;
+		}
+
+		// We need to extract the base resource from the resource name. Nested resources
+		// are supported in the framework, but we need to know what name to use for a
+		// place-holder on the route wildcards, which should be the base resources.
+		$base = $this->getResourceWildcard(last(explode('.', $name)));
+
+		$defaults = $this->resourceDefaults;
+
+		foreach ($this->getResourceMethods($defaults, $options) as $m)
+		{
+			$this->{'addResource'.ucfirst($m)}($name, $base, $controller, $options);
+		}
+	}
+
+	/**
+	 * Build a set of prefixed resource routes.
+	 *
+	 * @param  string  $name
+	 * @param  string  $controller
+	 * @param  array   $options
+	 * @return void
+	 */
+	protected function prefixedResource($name, $controller, array $options)
+	{
+		list($name, $prefix) = $this->getResourcePrefix($name);
+
+		// We need to extract the base resource from the resource name. Nested resources
+		// are supported in the framework, but we need to know what name to use for a
+		// place-holder on the route wildcards, which should be the base resources.
+		$callback = function($me) use ($name, $controller, $options)
+		{
+			$me->resource($name, $controller, $options);
+		};
+
+		return $this->group(compact('prefix'), $callback);
+	}
+
+	/**
+	 * Extract the resource and prefix from a resource name.
+	 *
+	 * @param  string  $name
+	 * @return array
+	 */
+	protected function getResourcePrefix($name)
+	{
+		$segments = explode('/', $name);
+
+		// To get the prefix, we will take all of the name segments and implode them on
+		// a slash. This will generate a proper URI prefix for us. Then we take this
+		// last segment, which will be considered the final resources name we use.
+		$prefix = implode('/', array_slice($segments, 0, -1));
+
+		return array(end($segments), $prefix);
+	}
+
+	/**
+	 * Get the applicable resource methods.
+	 *
+	 * @param  array  $defaults
+	 * @param  array  $options
+	 * @return array
+	 */
+	protected function getResourceMethods($defaults, $options)
+	{
+		if (isset($options['only']))
+		{
+			return array_intersect($defaults, (array) $options['only']);
+		}
+		elseif (isset($options['except']))
+		{
+			return array_diff($defaults, (array) $options['except']);
+		}
+
+		return $defaults;
+	}
+
+	/**
+	 * Get the base resource URI for a given resource.
+	 *
+	 * @param  string  $resource
+	 * @return string
+	 */
+	public function getResourceUri($resource)
+	{
+		if ( ! str_contains($resource, '.')) return $resource;
+
+		// Once we have built the base URI, we'll remove the wildcard holder for this
+		// base resource name so that the individual route adders can suffix these
+		// paths however they need to, as some do not have any wildcards at all.
+		$segments = explode('.', $resource);
+
+		$uri = $this->getNestedResourceUri($segments);
+
+		return str_replace('/{'.$this->getResourceWildcard(last($segments)).'}', '', $uri);
+	}
+
+	/**
+	 * Get the URI for a nested resource segment array.
+	 *
+	 * @param  array   $segments
+	 * @return string
+	 */
+	protected function getNestedResourceUri(array $segments)
+	{
+		// We will spin through the segments and create a place-holder for each of the
+		// resource segments, as well as the resource itself. Then we should get an
+		// entire string for the resource URI that contains all nested resources.
+		return implode('/', array_map(function($s)
+		{
+			return $s.'/{'.$this->getResourceWildcard($s).'}';
+
+		}, $segments));
+	}
+
+	/**
+	 * Get the action array for a resource route.
+	 *
+	 * @param  string  $resource
+	 * @param  string  $controller
+	 * @param  string  $method
+	 * @param  array   $options
+	 * @return array
+	 */
+	protected function getResourceAction($resource, $controller, $method, $options)
+	{
+		$name = $this->getResourceName($resource, $method, $options);
+
+		return array('as' => $name, 'uses' => $controller.'@'.$method);
+	}
+
+	/**
+	 * Get the name for a given resource.
+	 *
+	 * @param  string  $resource
+	 * @param  string  $method
+	 * @param  array   $options
+	 * @return string
+	 */
+	protected function getResourceName($resource, $method, $options)
+	{
+		if (isset($options['names'][$method])) return $options['names'][$method];
+
+		// If a global prefix has been assigned to all names for this resource, we will
+		// grab that so we can prepend it onto the name when we create this name for
+		// the resource action. Otherwise we'll just use an empty string for here.
+		$prefix = isset($options['as']) ? $options['as'].'.' : '';
+
+		if (empty($this->groupStack))
+		{
+			return $prefix.$resource.'.'.$method;
+		}
+
+		return $this->getGroupResourceName($prefix, $resource, $method);
+	}
+
+	/**
+	 * Get the resource name for a grouped resource.
+	 *
+	 * @param  string  $prefix
+	 * @param  string  $resource
+	 * @param  string  $method
+	 * @return string
+	 */
+	protected function getGroupResourceName($prefix, $resource, $method)
+	{
+		$group = str_replace('/', '.', $this->getLastGroupPrefix());
+
+		if (empty($group))
+		{
+			return trim("{$prefix}{$resource}.{$method}", '.');
+		}
+
+		return trim("{$prefix}{$group}.{$resource}.{$method}", '.');
+	}
+
+	/**
+	 * Format a resource wildcard for usage.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	public function getResourceWildcard($value)
+	{
+		return str_replace('-', '_', $value);
+	}
+
+	/**
+	 * Add the index method for a resourceful route.
+	 *
+	 * @param  string  $name
+	 * @param  string  $base
+	 * @param  string  $controller
+	 * @param  array   $options
+	 * @return \Illuminate\Routing\Route
+	 */
+	protected function addResourceIndex($name, $base, $controller, $options)
+	{
+		$uri = $this->getResourceUri($name);
+
+		$action = $this->getResourceAction($name, $controller, 'index', $options);
+
+		return $this->get($uri, $action);
+	}
+
+	/**
+	 * Add the create method for a resourceful route.
+	 *
+	 * @param  string  $name
+	 * @param  string  $base
+	 * @param  string  $controller
+	 * @param  array   $options
+	 * @return \Illuminate\Routing\Route
+	 */
+	protected function addResourceCreate($name, $base, $controller, $options)
+	{
+		$uri = $this->getResourceUri($name).'/create';
+
+		$action = $this->getResourceAction($name, $controller, 'create', $options);
+
+		return $this->get($uri, $action);
+	}
+
+	/**
+	 * Add the store method for a resourceful route.
+	 *
+	 * @param  string  $name
+	 * @param  string  $base
+	 * @param  string  $controller
+	 * @param  array   $options
+	 * @return \Illuminate\Routing\Route
+	 */
+	protected function addResourceStore($name, $base, $controller, $options)
+	{
+		$uri = $this->getResourceUri($name);
+
+		$action = $this->getResourceAction($name, $controller, 'store', $options);
+
+		return $this->post($uri, $action);
+	}
+
+	/**
+	 * Add the show method for a resourceful route.
+	 *
+	 * @param  string  $name
+	 * @param  string  $base
+	 * @param  string  $controller
+	 * @param  array   $options
+	 * @return \Illuminate\Routing\Route
+	 */
+	protected function addResourceShow($name, $base, $controller, $options)
+	{
+		$uri = $this->getResourceUri($name).'/{'.$base.'}';
+
+		$action = $this->getResourceAction($name, $controller, 'show', $options);
+
+		return $this->get($uri, $action);
+	}
+
+	/**
+	 * Add the edit method for a resourceful route.
+	 *
+	 * @param  string  $name
+	 * @param  string  $base
+	 * @param  string  $controller
+	 * @param  array   $options
+	 * @return \Illuminate\Routing\Route
+	 */
+	protected function addResourceEdit($name, $base, $controller, $options)
+	{
+		$uri = $this->getResourceUri($name).'/{'.$base.'}/edit';
+
+		$action = $this->getResourceAction($name, $controller, 'edit', $options);
+
+		return $this->get($uri, $action);
+	}
+
+	/**
+	 * Add the update method for a resourceful route.
+	 *
+	 * @param  string  $name
+	 * @param  string  $base
+	 * @param  string  $controller
+	 * @param  array   $options
+	 * @return void
+	 */
+	protected function addResourceUpdate($name, $base, $controller, $options)
+	{
+		$this->addPutResourceUpdate($name, $base, $controller, $options);
+
+		return $this->addPatchResourceUpdate($name, $base, $controller);
+	}
+
+	/**
+	 * Add the update method for a resourceful route.
+	 *
+	 * @param  string  $name
+	 * @param  string  $base
+	 * @param  string  $controller
+	 * @param  array   $options
+	 * @return \Illuminate\Routing\Route
+	 */
+	protected function addPutResourceUpdate($name, $base, $controller, $options)
+	{
+		$uri = $this->getResourceUri($name).'/{'.$base.'}';
+
+		$action = $this->getResourceAction($name, $controller, 'update', $options);
+
+		return $this->put($uri, $action);
+	}
+
+	/**
+	 * Add the update method for a resourceful route.
+	 *
+	 * @param  string  $name
+	 * @param  string  $base
+	 * @param  string  $controller
+	 * @return void
+	 */
+	protected function addPatchResourceUpdate($name, $base, $controller)
+	{
+		$uri = $this->getResourceUri($name).'/{'.$base.'}';
+
+		$this->patch($uri, $controller.'@update');
+	}
+
+	/**
+	 * Add the destroy method for a resourceful route.
+	 *
+	 * @param  string  $name
+	 * @param  string  $base
+	 * @param  string  $controller
+	 * @param  array   $options
+	 * @return \Illuminate\Routing\Route
+	 */
+	protected function addResourceDestroy($name, $base, $controller, $options)
+	{
+		$uri = $this->getResourceUri($name).'/{'.$base.'}';
+
+		$action = $this->getResourceAction($name, $controller, 'destroy', $options);
+
+		return $this->delete($uri, $action);
+	}
+
+	/**
+	 * Create a route group with shared attributes.
+	 *
+	 * @param  array     $attributes
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function group(array $attributes, Closure $callback)
+	{
+		$this->updateGroupStack($attributes);
+
+		// Once we have updated the group stack, we will execute the user Closure and
+		// merge in the groups attributes when the route is created. After we have
+		// run the callback, we will pop the attributes off of this group stack.
+		call_user_func($callback, $this);
+
+		array_pop($this->groupStack);
+	}
+
+	/**
+	 * Update the group stack with the given attributes.
+	 *
+	 * @param  array  $attributes
+	 * @return void
+	 */
+	protected function updateGroupStack(array $attributes)
+	{
+		if ( ! empty($this->groupStack))
+		{
+			$attributes = $this->mergeGroup($attributes, last($this->groupStack));
+		}
+
+		$this->groupStack[] = $attributes;
+	}
+
+	/**
+	 * Merge the given array with the last group stack.
+	 *
+	 * @param  array  $new
+	 * @return array
+	 */
+	public function mergeWithLastGroup($new)
+	{
+		return $this->mergeGroup($new, last($this->groupStack));
+	}
+
+	/**
+	 * Merge the given group attributes.
+	 *
+	 * @param  array  $new
+	 * @param  array  $old
+	 * @return array
+	 */
+	public static function mergeGroup($new, $old)
+	{
+		$new['namespace'] = static::formatUsesPrefix($new, $old);
+
+		$new['prefix'] = static::formatGroupPrefix($new, $old);
+
+		if (isset($new['domain'])) unset($old['domain']);
+
+		$new['where'] = array_merge(array_get($old, 'where', []), array_get($new, 'where', []));
+
+		return array_merge_recursive(array_except($old, array('namespace', 'prefix', 'where')), $new);
+	}
+
+	/**
+	 * Format the uses prefix for the new group attributes.
+	 *
+	 * @param  array  $new
+	 * @param  array  $old
+	 * @return string
+	 */
+	protected static function formatUsesPrefix($new, $old)
+	{
+		if (isset($new['namespace']) && isset($old['namespace']))
+		{
+			return trim(array_get($old, 'namespace'), '\\').'\\'.trim($new['namespace'], '\\');
+		}
+		elseif (isset($new['namespace']))
+		{
+			return trim($new['namespace'], '\\');
+		}
+
+		return array_get($old, 'namespace');
+	}
+
+	/**
+	 * Format the prefix for the new group attributes.
+	 *
+	 * @param  array  $new
+	 * @param  array  $old
+	 * @return string
+	 */
+	protected static function formatGroupPrefix($new, $old)
+	{
+		if (isset($new['prefix']))
+		{
+			return trim(array_get($old, 'prefix'), '/').'/'.trim($new['prefix'], '/');
+		}
+
+		return array_get($old, 'prefix');
+	}
+
+	/**
+	 * Get the prefix from the last group on the stack.
+	 *
+	 * @return string
+	 */
+	protected function getLastGroupPrefix()
+	{
+		if ( ! empty($this->groupStack))
+		{
+			$last = end($this->groupStack);
+			return isset($last['prefix']) ? $last['prefix'] : '';
+		}
+
+		return '';
+	}
+
+	/**
+	 * Add a route to the underlying route collection.
+	 *
+	 * @param  array|string  $methods
+	 * @param  string  $uri
+	 * @param  \Closure|array|string  $action
+	 * @return \Illuminate\Routing\Route
+	 */
+	protected function addRoute($methods, $uri, $action)
+	{
+		return $this->routes->add($this->createRoute($methods, $uri, $action));
+	}
+
+	/**
+	 * Create a new route instance.
+	 *
+	 * @param  array|string  $methods
+	 * @param  string  $uri
+	 * @param  mixed   $action
+	 * @return \Illuminate\Routing\Route
+	 */
+	protected function createRoute($methods, $uri, $action)
+	{
+		// If the route is routing to a controller we will parse the route action into
+		// an acceptable array format before registering it and creating this route
+		// instance itself. We need to build the Closure that will call this out.
+		if ($this->routingToController($action))
+		{
+			$action = $this->getControllerAction($action);
+		}
+
+		$route = $this->newRoute(
+			$methods, $uri = $this->prefix($uri), $action
+		);
+
+		// If we have groups that need to be merged, we will merge them now after this
+		// route has already been created and is ready to go. After we're done with
+		// the merge we will be ready to return the route back out to the caller.
+		if ( ! empty($this->groupStack))
+		{
+			$this->mergeController($route);
+		}
+
+		$this->addWhereClausesToRoute($route);
+
+		return $route;
+	}
+
+	/**
+	 * Create a new Route object.
+	 *
+	 * @param  array|string  $methods
+	 * @param  string  $uri
+	 * @param  mixed   $action
+	 * @return \Illuminate\Routing\Route
+	 */
+	protected function newRoute($methods, $uri, $action)
+	{
+		return new Route($methods, $uri, $action);
+	}
+
+	/**
+	 * Prefix the given URI with the last prefix.
+	 *
+	 * @param  string  $uri
+	 * @return string
+	 */
+	protected function prefix($uri)
+	{
+		return trim(trim($this->getLastGroupPrefix(), '/').'/'.trim($uri, '/'), '/') ?: '/';
+	}
+
+	/**
+	 * Add the necessary where clauses to the route based on its initial registration.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @return \Illuminate\Routing\Route
+	 */
+	protected function addWhereClausesToRoute($route)
+	{
+		$route->where(
+			array_merge($this->patterns, array_get($route->getAction(), 'where', []))
+		);
+
+		return $route;
+	}
+
+	/**
+	 * Merge the group stack with the controller action.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @return void
+	 */
+	protected function mergeController($route)
+	{
+		$action = $this->mergeWithLastGroup($route->getAction());
+
+		$route->setAction($action);
+	}
+
+	/**
+	 * Determine if the action is routing to a controller.
+	 *
+	 * @param  array  $action
+	 * @return bool
+	 */
+	protected function routingToController($action)
+	{
+		if ($action instanceof Closure) return false;
+
+		return is_string($action) || is_string(array_get($action, 'uses'));
+	}
+
+	/**
+	 * Add a controller based route action to the action array.
+	 *
+	 * @param  array|string  $action
+	 * @return array
+	 */
+	protected function getControllerAction($action)
+	{
+		if (is_string($action)) $action = array('uses' => $action);
+
+		// Here we'll get an instance of this controller dispatcher and hand it off to
+		// the Closure so it will be used to resolve the class instances out of our
+		// IoC container instance and call the appropriate methods on the class.
+		if ( ! empty($this->groupStack))
+		{
+			$action['uses'] = $this->prependGroupUses($action['uses']);
+		}
+
+		// Here we'll get an instance of this controller dispatcher and hand it off to
+		// the Closure so it will be used to resolve the class instances out of our
+		// IoC container instance and call the appropriate methods on the class.
+		$action['controller'] = $action['uses'];
+
+		$closure = $this->getClassClosure($action['uses']);
+
+		return array_set($action, 'uses', $closure);
+	}
+
+	/**
+	 * Get the Closure for a controller based action.
+	 *
+	 * @param  string  $controller
+	 * @return \Closure
+	 */
+	protected function getClassClosure($controller)
+	{
+		// Here we'll get an instance of this controller dispatcher and hand it off to
+		// the Closure so it will be used to resolve the class instances out of our
+		// IoC container instance and call the appropriate methods on the class.
+		$d = $this->getControllerDispatcher();
+
+		return function() use ($d, $controller)
+		{
+			$route = $this->current();
+
+			$request = $this->getCurrentRequest();
+
+			// Now we can split the controller and method out of the action string so that we
+			// can call them appropriately on the class. This controller and method are in
+			// in the Class@method format and we need to explode them out then use them.
+			list($class, $method) = explode('@', $controller);
+
+			return $d->dispatch($route, $request, $class, $method);
+		};
+	}
+
+	/**
+	 * Prepend the last group uses onto the use clause.
+	 *
+	 * @param  string  $uses
+	 * @return string
+	 */
+	protected function prependGroupUses($uses)
+	{
+		$group = last($this->groupStack);
+
+		return isset($group['namespace']) ? $group['namespace'].'\\'.$uses : $uses;
+	}
+
+	/**
+	 * Dispatch the request to the application.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return \Illuminate\Http\Response
+	 */
+	public function dispatch(Request $request)
+	{
+		$this->currentRequest = $request;
+
+		// If no response was returned from the before filter, we will call the proper
+		// route instance to get the response. If no route is found a response will
+		// still get returned based on why no routes were found for this request.
+		$response = $this->callFilter('before', $request);
+
+		if (is_null($response))
+		{
+			$response = $this->dispatchToRoute($request);
+		}
+
+		$response = $this->prepareResponse($request, $response);
+
+		// Once this route has run and the response has been prepared, we will run the
+		// after filter to do any last work on the response or for this application
+		// before we will return the response back to the consuming code for use.
+		$this->callFilter('after', $request, $response);
+
+		return $response;
+	}
+
+	/**
+	 * Dispatch the request to a route and return the response.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return mixed
+	 */
+	public function dispatchToRoute(Request $request)
+	{
+		$route = $this->findRoute($request);
+
+		$this->events->fire('router.matched', array($route, $request));
+
+		// Once we have successfully matched the incoming request to a given route we
+		// can call the before filters on that route. This works similar to global
+		// filters in that if a response is returned we will not call the route.
+		$response = $this->callRouteBefore($route, $request);
+
+		if (is_null($response))
+		{
+			$response = $route->run($request);
+		}
+
+		$response = $this->prepareResponse($request, $response);
+
+		// After we have a prepared response from the route or filter we will call to
+		// the "after" filters to do any last minute processing on this request or
+		// response object before the response is returned back to the consumer.
+		$this->callRouteAfter($route, $request, $response);
+
+		return $response;
+	}
+
+	/**
+	 * Find the route matching a given request.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return \Illuminate\Routing\Route
+	 */
+	protected function findRoute($request)
+	{
+		$this->current = $route = $this->routes->match($request);
+
+		return $this->substituteBindings($route);
+	}
+
+	/**
+	 * Substitute the route bindings onto the route.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @return \Illuminate\Routing\Route
+	 */
+	protected function substituteBindings($route)
+	{
+		foreach ($route->parameters() as $key => $value)
+		{
+			if (isset($this->binders[$key]))
+			{
+				$route->setParameter($key, $this->performBinding($key, $value, $route));
+			}
+		}
+
+		return $route;
+	}
+
+	/**
+	 * Call the binding callback for the given key.
+	 *
+	 * @param  string  $key
+	 * @param  string  $value
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @return mixed
+	 */
+	protected function performBinding($key, $value, $route)
+	{
+		return call_user_func($this->binders[$key], $value, $route);
+	}
+
+	/**
+	 * Register a route matched event listener.
+	 *
+	 * @param  string|callable  $callback
+	 * @return void
+	 */
+	public function matched($callback)
+	{
+		$this->events->listen('router.matched', $callback);
+	}
+
+	/**
+	 * Register a new "before" filter with the router.
+	 *
+	 * @param  string|callable  $callback
+	 * @return void
+	 */
+	public function before($callback)
+	{
+		$this->addGlobalFilter('before', $callback);
+	}
+
+	/**
+	 * Register a new "after" filter with the router.
+	 *
+	 * @param  string|callable  $callback
+	 * @return void
+	 */
+	public function after($callback)
+	{
+		$this->addGlobalFilter('after', $callback);
+	}
+
+	/**
+	 * Register a new global filter with the router.
+	 *
+	 * @param  string  $filter
+	 * @param  string|callable   $callback
+	 * @return void
+	 */
+	protected function addGlobalFilter($filter, $callback)
+	{
+		$this->events->listen('router.'.$filter, $this->parseFilter($callback));
+	}
+
+	/**
+	 * Register a new filter with the router.
+	 *
+	 * @param  string  $name
+	 * @param  string|callable  $callback
+	 * @return void
+	 */
+	public function filter($name, $callback)
+	{
+		$this->events->listen('router.filter: '.$name, $this->parseFilter($callback));
+	}
+
+	/**
+	 * Parse the registered filter.
+	 *
+	 * @param  callable|string  $callback
+	 * @return mixed
+	 */
+	protected function parseFilter($callback)
+	{
+		if (is_string($callback) && ! str_contains($callback, '@'))
+		{
+			return $callback.'@filter';
+		}
+
+		return $callback;
+	}
+
+	/**
+	 * Register a pattern-based filter with the router.
+	 *
+	 * @param  string  $pattern
+	 * @param  string  $name
+	 * @param  array|null  $methods
+	 * @return void
+	 */
+	public function when($pattern, $name, $methods = null)
+	{
+		if ( ! is_null($methods)) $methods = array_map('strtoupper', (array) $methods);
+
+		$this->patternFilters[$pattern][] = compact('name', 'methods');
+	}
+
+	/**
+	 * Register a regular expression based filter with the router.
+	 *
+	 * @param  string     $pattern
+	 * @param  string     $name
+	 * @param  array|null $methods
+	 * @return void
+	 */
+	public function whenRegex($pattern, $name, $methods = null)
+	{
+		if ( ! is_null($methods)) $methods = array_map('strtoupper', (array) $methods);
+
+		$this->regexFilters[$pattern][] = compact('name', 'methods');
+	}
+
+	/**
+	 * Register a model binder for a wildcard.
+	 *
+	 * @param  string  $key
+	 * @param  string  $class
+	 * @param  \Closure  $callback
+	 * @return void
+	 *
+	 * @throws NotFoundHttpException
+	 */
+	public function model($key, $class, Closure $callback = null)
+	{
+		$this->bind($key, function($value) use ($class, $callback)
+		{
+			if (is_null($value)) return null;
+
+			// For model binders, we will attempt to retrieve the models using the find
+			// method on the model instance. If we cannot retrieve the models we'll
+			// throw a not found exception otherwise we will return the instance.
+			if ($model = (new $class)->find($value))
+			{
+				return $model;
+			}
+
+			// If a callback was supplied to the method we will call that to determine
+			// what we should do when the model is not found. This just gives these
+			// developer a little greater flexibility to decide what will happen.
+			if ($callback instanceof Closure)
+			{
+				return call_user_func($callback);
+			}
+
+			throw new NotFoundHttpException;
+		});
+	}
+
+	/**
+	 * Add a new route parameter binder.
+	 *
+	 * @param  string  $key
+	 * @param  string|callable  $binder
+	 * @return void
+	 */
+	public function bind($key, $binder)
+	{
+		if (is_string($binder))
+		{
+			$binder = $this->createClassBinding($binder);
+		}
+
+		$this->binders[str_replace('-', '_', $key)] = $binder;
+	}
+
+	/**
+	 * Create a class based binding using the IoC container.
+	 *
+	 * @param  string    $binding
+	 * @return \Closure
+	 */
+	public function createClassBinding($binding)
+	{
+		return function($value, $route) use ($binding)
+		{
+			// If the binding has an @ sign, we will assume it's being used to delimit
+			// the class name from the bind method name. This allows for bindings
+			// to run multiple bind methods in a single class for convenience.
+			$segments = explode('@', $binding);
+
+			$method = count($segments) == 2 ? $segments[1] : 'bind';
+
+			$callable = [$this->container->make($segments[0]), $method];
+
+			return call_user_func($callable, $value, $route);
+		};
+	}
+
+	/**
+	 * Set a global where pattern on all routes
+	 *
+	 * @param  string  $key
+	 * @param  string  $pattern
+	 * @return void
+	 */
+	public function pattern($key, $pattern)
+	{
+		$this->patterns[$key] = $pattern;
+	}
+
+	/**
+	 * Set a group of global where patterns on all routes
+	 *
+	 * @param  array  $patterns
+	 * @return void
+	 */
+	public function patterns($patterns)
+	{
+		foreach ($patterns as $key => $pattern)
+		{
+			$this->pattern($key, $pattern);
+		}
+	}
+
+	/**
+	 * Call the given filter with the request and response.
+	 *
+	 * @param  string  $filter
+	 * @param  \Illuminate\Http\Request   $request
+	 * @param  \Illuminate\Http\Response  $response
+	 * @return mixed
+	 */
+	protected function callFilter($filter, $request, $response = null)
+	{
+		if ( ! $this->filtering) return null;
+
+		return $this->events->until('router.'.$filter, array($request, $response));
+	}
+
+	/**
+	 * Call the given route's before filters.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return mixed
+	 */
+	public function callRouteBefore($route, $request)
+	{
+		$response = $this->callPatternFilters($route, $request);
+
+		return $response ?: $this->callAttachedBefores($route, $request);
+	}
+
+	/**
+	 * Call the pattern based filters for the request.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return mixed|null
+	 */
+	protected function callPatternFilters($route, $request)
+	{
+		foreach ($this->findPatternFilters($request) as $filter => $parameters)
+		{
+			$response = $this->callRouteFilter($filter, $parameters, $route, $request);
+
+			if ( ! is_null($response)) return $response;
+		}
+	}
+
+	/**
+	 * Find the patterned filters matching a request.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return array
+	 */
+	public function findPatternFilters($request)
+	{
+		$results = array();
+
+		list($path, $method) = array($request->path(), $request->getMethod());
+
+		foreach ($this->patternFilters as $pattern => $filters)
+		{
+			// To find the patterned middlewares for a request, we just need to check these
+			// registered patterns against the path info for the current request to this
+			// applications, and when it matches we will merge into these middlewares.
+			if (str_is($pattern, $path))
+			{
+				$merge = $this->patternsByMethod($method, $filters);
+
+				$results = array_merge($results, $merge);
+			}
+		}
+
+		foreach ($this->regexFilters as $pattern => $filters)
+		{
+			// To find the patterned middlewares for a request, we just need to check these
+			// registered patterns against the path info for the current request to this
+			// applications, and when it matches we will merge into these middlewares.
+			if (preg_match($pattern, $path))
+			{
+				$merge = $this->patternsByMethod($method, $filters);
+
+				$results = array_merge($results, $merge);
+			}
+		}
+
+		return $results;
+	}
+
+	/**
+	 * Filter pattern filters that don't apply to the request verb.
+	 *
+	 * @param  string  $method
+	 * @param  array   $filters
+	 * @return array
+	 */
+	protected function patternsByMethod($method, $filters)
+	{
+		$results = array();
+
+		foreach ($filters as $filter)
+		{
+			// The idea here is to check and see if the pattern filter applies to this HTTP
+			// request based on the request methods. Pattern filters might be limited by
+			// the request verb to make it simply to assign to the given verb at once.
+			if ($this->filterSupportsMethod($filter, $method))
+			{
+				$parsed = Route::parseFilters($filter['name']);
+
+				$results = array_merge($results, $parsed);
+			}
+		}
+
+		return $results;
+	}
+
+	/**
+	 * Determine if the given pattern filters applies to a given method.
+	 *
+	 * @param  array  $filter
+	 * @param  array  $method
+	 * @return bool
+	 */
+	protected function filterSupportsMethod($filter, $method)
+	{
+		$methods = $filter['methods'];
+
+		return (is_null($methods) || in_array($method, $methods));
+	}
+
+	/**
+	 * Call the given route's before (non-pattern) filters.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return mixed
+	 */
+	protected function callAttachedBefores($route, $request)
+	{
+		foreach ($route->beforeFilters() as $filter => $parameters)
+		{
+			$response = $this->callRouteFilter($filter, $parameters, $route, $request);
+
+			if ( ! is_null($response)) return $response;
+		}
+	}
+
+	/**
+	 * Call the given route's before filters.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  \Illuminate\Http\Request  $request
+	 * @param  \Illuminate\Http\Response  $response
+	 * @return mixed
+	 */
+	public function callRouteAfter($route, $request, $response)
+	{
+		foreach ($route->afterFilters() as $filter => $parameters)
+		{
+			$this->callRouteFilter($filter, $parameters, $route, $request, $response);
+		}
+	}
+
+	/**
+	 * Call the given route filter.
+	 *
+	 * @param  string  $filter
+	 * @param  array  $parameters
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  \Illuminate\Http\Request  $request
+	 * @param  \Illuminate\Http\Response|null $response
+	 * @return mixed
+	 */
+	public function callRouteFilter($filter, $parameters, $route, $request, $response = null)
+	{
+		if ( ! $this->filtering) return null;
+
+		$data = array_merge(array($route, $request, $response), $parameters);
+
+		return $this->events->until('router.filter: '.$filter, $this->cleanFilterParameters($data));
+	}
+
+	/**
+	 * Clean the parameters being passed to a filter callback.
+	 *
+	 * @param  array  $parameters
+	 * @return array
+	 */
+	protected function cleanFilterParameters(array $parameters)
+	{
+		return array_filter($parameters, function($p)
+		{
+			return ! is_null($p) && $p !== '';
+		});
+	}
+
+	/**
+	 * Create a response instance from the given value.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @param  mixed  $response
+	 * @return \Illuminate\Http\Response
+	 */
+	protected function prepareResponse($request, $response)
+	{
+		if ( ! $response instanceof SymfonyResponse)
+		{
+			$response = new Response($response);
+		}
+
+		return $response->prepare($request);
+	}
+
+	/**
+	 * Run a callback with filters disable on the router.
+	 *
+	 * @param  callable  $callback
+	 * @return void
+	 */
+	public function withoutFilters(callable $callback)
+	{
+		$this->disableFilters();
+
+		call_user_func($callback);
+
+		$this->enableFilters();
+	}
+
+	/**
+	 * Enable route filtering on the router.
+	 *
+	 * @return void
+	 */
+	public function enableFilters()
+	{
+		$this->filtering = true;
+	}
+
+	/**
+	 * Disable route filtering on the router.
+	 *
+	 * @return void
+	 */
+	public function disableFilters()
+	{
+		$this->filtering = false;
+	}
+
+	/**
+	 * Get a route parameter for the current route.
+	 *
+	 * @param  string  $key
+	 * @param  string  $default
+	 * @return mixed
+	 */
+	public function input($key, $default = null)
+	{
+		return $this->current()->parameter($key, $default);
+	}
+
+	/**
+	 * Get the currently dispatched route instance.
+	 *
+	 * @return \Illuminate\Routing\Route
+	 */
+	public function getCurrentRoute()
+	{
+		return $this->current();
+	}
+
+	/**
+	 * Get the currently dispatched route instance.
+	 *
+	 * @return \Illuminate\Routing\Route
+	 */
+	public function current()
+	{
+		return $this->current;
+	}
+
+	/**
+	 * Check if a route with the given name exists.
+	 *
+	 * @param  string  $name
+	 * @return bool
+	 */
+	public function has($name)
+	{
+		return $this->routes->hasNamedRoute($name);
+	}
+
+	/**
+	 * Get the current route name.
+	 *
+	 * @return string|null
+	 */
+	public function currentRouteName()
+	{
+		return ($this->current()) ? $this->current()->getName() : null;
+	}
+
+	/**
+	 * Alias for the "currentRouteNamed" method.
+	 *
+	 * @param  mixed  string
+	 * @return bool
+	 */
+	public function is()
+	{
+		foreach (func_get_args() as $pattern)
+		{
+			if (str_is($pattern, $this->currentRouteName()))
+			{
+				return true;
+			}
+		}
+
+		return false;
+	}
+
+	/**
+	 * Determine if the current route matches a given name.
+	 *
+	 * @param  string  $name
+	 * @return bool
+	 */
+	public function currentRouteNamed($name)
+	{
+		return ($this->current()) ? $this->current()->getName() == $name : false;
+	}
+
+	/**
+	 * Get the current route action.
+	 *
+	 * @return string|null
+	 */
+	public function currentRouteAction()
+	{
+		if ( ! $this->current()) return;
+
+		$action = $this->current()->getAction();
+
+		return isset($action['controller']) ? $action['controller'] : null;
+	}
+
+	/**
+	 * Alias for the "currentRouteUses" method.
+	 *
+	 * @param  mixed  string
+	 * @return bool
+	 */
+	public function uses()
+	{
+		foreach (func_get_args() as $pattern)
+		{
+			if (str_is($pattern, $this->currentRouteAction()))
+			{
+				return true;
+			}
+		}
+
+		return false;
+	}
+
+	/**
+	 * Determine if the current route action matches a given action.
+	 *
+	 * @param  string  $action
+	 * @return bool
+	 */
+	public function currentRouteUses($action)
+	{
+		return $this->currentRouteAction() == $action;
+	}
+
+	/**
+	 * Get the request currently being dispatched.
+	 *
+	 * @return \Illuminate\Http\Request
+	 */
+	public function getCurrentRequest()
+	{
+		return $this->currentRequest;
+	}
+
+	/**
+	 * Get the underlying route collection.
+	 *
+	 * @return \Illuminate\Routing\RouteCollection
+	 */
+	public function getRoutes()
+	{
+		return $this->routes;
+	}
+
+	/**
+	 * Get the controller dispatcher instance.
+	 *
+	 * @return \Illuminate\Routing\ControllerDispatcher
+	 */
+	public function getControllerDispatcher()
+	{
+		if (is_null($this->controllerDispatcher))
+		{
+			$this->controllerDispatcher = new ControllerDispatcher($this, $this->container);
+		}
+
+		return $this->controllerDispatcher;
+	}
+
+	/**
+	 * Set the controller dispatcher instance.
+	 *
+	 * @param  \Illuminate\Routing\ControllerDispatcher  $dispatcher
+	 * @return void
+	 */
+	public function setControllerDispatcher(ControllerDispatcher $dispatcher)
+	{
+		$this->controllerDispatcher = $dispatcher;
+	}
+
+	/**
+	 * Get a controller inspector instance.
+	 *
+	 * @return \Illuminate\Routing\ControllerInspector
+	 */
+	public function getInspector()
+	{
+		return $this->inspector ?: $this->inspector = new ControllerInspector;
+	}
+
+	/**
+	 * Get the global "where" patterns.
+	 *
+	 * @return array
+	 */
+	public function getPatterns()
+	{
+		return $this->patterns;
+	}
+
+	/**
+	 * Get the response for a given request.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @param  int   $type
+	 * @param  bool  $catch
+	 * @return \Illuminate\Http\Response
+	 */
+	public function handle(SymfonyRequest $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
+	{
+		return $this->dispatch(Request::createFromBase($request));
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php
new file mode 100755
index 0000000..f08b9f2
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php
@@ -0,0 +1,88 @@
+<?php namespace Illuminate\Routing;
+
+use Illuminate\Support\ServiceProvider;
+
+class RoutingServiceProvider extends ServiceProvider {
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->registerRouter();
+
+		$this->registerUrlGenerator();
+
+		$this->registerRedirector();
+	}
+
+	/**
+	 * Register the router instance.
+	 *
+	 * @return void
+	 */
+	protected function registerRouter()
+	{
+		$this->app['router'] = $this->app->share(function($app)
+		{
+			$router = new Router($app['events'], $app);
+
+			// If the current application environment is "testing", we will disable the
+			// routing filters, since they can be tested independently of the routes
+			// and just get in the way of our typical controller testing concerns.
+			if ($app['env'] == 'testing')
+			{
+				$router->disableFilters();
+			}
+
+			return $router;
+		});
+	}
+
+	/**
+	 * Register the URL generator service.
+	 *
+	 * @return void
+	 */
+	protected function registerUrlGenerator()
+	{
+		$this->app['url'] = $this->app->share(function($app)
+		{
+			// The URL generator needs the route collection that exists on the router.
+			// Keep in mind this is an object, so we're passing by references here
+			// and all the registered routes will be available to the generator.
+			$routes = $app['router']->getRoutes();
+
+			return new UrlGenerator($routes, $app->rebinding('request', function($app, $request)
+			{
+				$app['url']->setRequest($request);
+			}));
+		});
+	}
+
+	/**
+	 * Register the Redirector service.
+	 *
+	 * @return void
+	 */
+	protected function registerRedirector()
+	{
+		$this->app['redirect'] = $this->app->share(function($app)
+		{
+			$redirector = new Redirector($app['url']);
+
+			// If the session is set on the application instance, we'll inject it into
+			// the redirector instance. This allows the redirect responses to allow
+			// for the quite convenient "with" methods that flash to the session.
+			if (isset($app['session.store']))
+			{
+				$redirector->setSession($app['session.store']);
+			}
+
+			return $redirector;
+		});
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php b/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php
new file mode 100755
index 0000000..b9c93a2
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php
@@ -0,0 +1,527 @@
+<?php namespace Illuminate\Routing;
+
+use Illuminate\Http\Request;
+use InvalidArgumentException;
+
+class UrlGenerator {
+
+	/**
+	 * The route collection.
+	 *
+	 * @var \Illuminate\Routing\RouteCollection
+	 */
+	protected $routes;
+
+	/**
+	 * The request instance.
+	 *
+	 * @var \Illuminate\Http\Request
+	 */
+	protected $request;
+
+	/**
+	 * The force URL root.
+	 *
+	 * @var string
+	 */
+	protected $forcedRoot;
+
+	/**
+	 * The forced schema for URLs.
+	 *
+	 * @var string
+	 */
+	protected $forceSchema;
+
+	/**
+	 * Characters that should not be URL encoded.
+	 *
+	 * @var array
+	 */
+	protected $dontEncode = array(
+		'%2F' => '/',
+		'%40' => '@',
+		'%3A' => ':',
+		'%3B' => ';',
+		'%2C' => ',',
+		'%3D' => '=',
+		'%2B' => '+',
+		'%21' => '!',
+		'%2A' => '*',
+		'%7C' => '|',
+	);
+
+	/**
+	 * Create a new URL Generator instance.
+	 *
+	 * @param  \Illuminate\Routing\RouteCollection  $routes
+	 * @param  \Symfony\Component\HttpFoundation\Request   $request
+	 * @return void
+	 */
+	public function __construct(RouteCollection $routes, Request $request)
+	{
+		$this->routes = $routes;
+
+		$this->setRequest($request);
+	}
+
+	/**
+	 * Get the full URL for the current request.
+	 *
+	 * @return string
+	 */
+	public function full()
+	{
+		return $this->request->fullUrl();
+	}
+
+	/**
+	 * Get the current URL for the request.
+	 *
+	 * @return string
+	 */
+	public function current()
+	{
+		return $this->to($this->request->getPathInfo());
+	}
+
+	/**
+	 * Get the URL for the previous request.
+	 *
+	 * @return string
+	 */
+	public function previous()
+	{
+		return $this->to($this->request->headers->get('referer'));
+	}
+
+	/**
+	 * Generate a absolute URL to the given path.
+	 *
+	 * @param  string  $path
+	 * @param  mixed  $extra
+	 * @param  bool|null  $secure
+	 * @return string
+	 */
+	public function to($path, $extra = array(), $secure = null)
+	{
+		// First we will check if the URL is already a valid URL. If it is we will not
+		// try to generate a new one but will simply return the URL as is, which is
+		// convenient since developers do not always have to check if it's valid.
+		if ($this->isValidUrl($path)) return $path;
+
+		$scheme = $this->getScheme($secure);
+
+		$tail = implode('/', array_map(
+			'rawurlencode', (array) $extra)
+		);
+
+		// Once we have the scheme we will compile the "tail" by collapsing the values
+		// into a single string delimited by slashes. This just makes it convenient
+		// for passing the array of parameters to this URL as a list of segments.
+		$root = $this->getRootUrl($scheme);
+
+		return $this->trimUrl($root, $path, $tail);
+	}
+
+	/**
+	 * Generate a secure, absolute URL to the given path.
+	 *
+	 * @param  string  $path
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	public function secure($path, $parameters = array())
+	{
+		return $this->to($path, $parameters, true);
+	}
+
+	/**
+	 * Generate a URL to an application asset.
+	 *
+	 * @param  string  $path
+	 * @param  bool|null  $secure
+	 * @return string
+	 */
+	public function asset($path, $secure = null)
+	{
+		if ($this->isValidUrl($path)) return $path;
+
+		// Once we get the root URL, we will check to see if it contains an index.php
+		// file in the paths. If it does, we will remove it since it is not needed
+		// for asset paths, but only for routes to endpoints in the application.
+		$root = $this->getRootUrl($this->getScheme($secure));
+
+		return $this->removeIndex($root).'/'.trim($path, '/');
+	}
+
+	/**
+	 * Remove the index.php file from a path.
+	 *
+	 * @param  string  $root
+	 * @return string
+	 */
+	protected function removeIndex($root)
+	{
+		$i = 'index.php';
+
+		return str_contains($root, $i) ? str_replace('/'.$i, '', $root) : $root;
+	}
+
+	/**
+	 * Generate a URL to a secure asset.
+	 *
+	 * @param  string  $path
+	 * @return string
+	 */
+	public function secureAsset($path)
+	{
+		return $this->asset($path, true);
+	}
+
+	/**
+	 * Get the scheme for a raw URL.
+	 *
+	 * @param  bool|null  $secure
+	 * @return string
+	 */
+	protected function getScheme($secure)
+	{
+		if (is_null($secure))
+		{
+			return $this->forceSchema ?: $this->request->getScheme().'://';
+		}
+
+		return $secure ? 'https://' : 'http://';
+	}
+
+	/**
+	 * Force the schema for URLs.
+	 *
+	 * @param  string  $schema
+	 * @return void
+	 */
+	public function forceSchema($schema)
+	{
+		$this->forceSchema = $schema.'://';
+	}
+
+	/**
+	 * Get the URL to a named route.
+	 *
+	 * @param  string  $name
+	 * @param  mixed   $parameters
+	 * @param  bool  $absolute
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @return string
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	public function route($name, $parameters = array(), $absolute = true, $route = null)
+	{
+		$route = $route ?: $this->routes->getByName($name);
+
+		$parameters = (array) $parameters;
+
+		if ( ! is_null($route))
+		{
+			return $this->toRoute($route, $parameters, $absolute);
+		}
+
+		throw new InvalidArgumentException("Route [{$name}] not defined.");
+	}
+
+	/**
+	 * Get the URL for a given route instance.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  array  $parameters
+	 * @param  bool  $absolute
+	 * @return string
+	 */
+	protected function toRoute($route, array $parameters, $absolute)
+	{
+		$domain = $this->getRouteDomain($route, $parameters);
+
+		$uri = strtr(rawurlencode($this->trimUrl(
+			$root = $this->replaceRoot($route, $domain, $parameters),
+			$this->replaceRouteParameters($route->uri(), $parameters)
+		)), $this->dontEncode).$this->getRouteQueryString($parameters);
+
+		return $absolute ? $uri : '/'.ltrim(str_replace($root, '', $uri), '/');
+	}
+
+	/**
+	 * Replace the parameters on the root path.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  string  $domain
+	 * @param  array  $parameters
+	 * @return string
+	 */
+	protected function replaceRoot($route, $domain, &$parameters)
+	{
+		return $this->replaceRouteParameters($this->getRouteRoot($route, $domain), $parameters);
+	}
+
+	/**
+	 * Replace all of the wildcard parameters for a route path.
+	 *
+	 * @param  string  $path
+	 * @param  array  $parameters
+	 * @return string
+	 */
+	protected function replaceRouteParameters($path, array &$parameters)
+	{
+		if (count($parameters))
+		{
+			$path = preg_replace_sub(
+				'/\{.*?\}/', $parameters, $this->replaceNamedParameters($path, $parameters)
+			);
+		}
+
+		return trim(preg_replace('/\{.*?\?\}/', '', $path), '/');
+	}
+
+	/**
+	 * Replace all of the named parameters in the path.
+	 *
+	 * @param  string  $path
+	 * @param  array  $parameters
+	 * @return string
+	 */
+	protected function replaceNamedParameters($path, &$parameters)
+	{
+		return preg_replace_callback('/\{(.*?)\??\}/', function($m) use (&$parameters)
+		{
+			return isset($parameters[$m[1]]) ? array_pull($parameters, $m[1]) : $m[0];
+
+		}, $path);
+	}
+
+	/**
+	 * Get the query string for a given route.
+	 *
+	 * @param  array  $parameters
+	 * @return string
+	 */
+	protected function getRouteQueryString(array $parameters)
+	{
+		// First we will get all of the string parameters that are remaining after we
+		// have replaced the route wildcards. We'll then build a query string from
+		// these string parameters then use it as a starting point for the rest.
+		if (count($parameters) == 0) return '';
+
+		$query = http_build_query(
+			$keyed = $this->getStringParameters($parameters)
+		);
+
+		// Lastly, if there are still parameters remaining, we will fetch the numeric
+		// parameters that are in the array and add them to the query string or we
+		// will make the initial query string if it wasn't started with strings.
+		if (count($keyed) < count($parameters))
+		{
+			$query .= '&'.implode(
+				'&', $this->getNumericParameters($parameters)
+			);
+		}
+
+		return '?'.trim($query, '&');
+	}
+
+	/**
+	 * Get the string parameters from a given list.
+	 *
+	 * @param  array  $parameters
+	 * @return array
+	 */
+	protected function getStringParameters(array $parameters)
+	{
+		return array_where($parameters, function($k, $v) { return is_string($k); });
+	}
+
+	/**
+	 * Get the numeric parameters from a given list.
+	 *
+	 * @param  array  $parameters
+	 * @return array
+	 */
+	protected function getNumericParameters(array $parameters)
+	{
+		return array_where($parameters, function($k, $v) { return is_numeric($k); });
+	}
+
+	/**
+	 * Get the formatted domain for a given route.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  array  $parameters
+	 * @return string
+	 */
+	protected function getRouteDomain($route, &$parameters)
+	{
+		return $route->domain() ? $this->formatDomain($route, $parameters) : null;
+	}
+
+	/**
+	 * Format the domain and port for the route and request.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  array  $parameters
+	 * @return string
+	 */
+	protected function formatDomain($route, &$parameters)
+	{
+		return $this->addPortToDomain($this->getDomainAndScheme($route));
+	}
+
+	/**
+	 * Get the domain and scheme for the route.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @return string
+	 */
+	protected function getDomainAndScheme($route)
+	{
+		return $this->getRouteScheme($route).$route->domain();
+	}
+
+	/**
+	 * Add the port to the domain if necessary.
+	 *
+	 * @param  string  $domain
+	 * @return string
+	 */
+	protected function addPortToDomain($domain)
+	{
+		if (in_array($this->request->getPort(), array('80', '443')))
+		{
+			return $domain;
+		}
+
+		return $domain.':'.$this->request->getPort();
+	}
+
+	/**
+	 * Get the root of the route URL.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  string  $domain
+	 * @return string
+	 */
+	protected function getRouteRoot($route, $domain)
+	{
+		return $this->getRootUrl($this->getRouteScheme($route), $domain);
+	}
+
+	/**
+	 * Get the scheme for the given route.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @return string
+	 */
+	protected function getRouteScheme($route)
+	{
+		if ($route->httpOnly())
+		{
+			return $this->getScheme(false);
+		}
+		elseif ($route->httpsOnly())
+		{
+			return $this->getScheme(true);
+		}
+
+		return $this->getScheme(null);
+	}
+
+	/**
+	 * Get the URL to a controller action.
+	 *
+	 * @param  string  $action
+	 * @param  mixed   $parameters
+	 * @param  bool    $absolute
+	 * @return string
+	 */
+	public function action($action, $parameters = array(), $absolute = true)
+	{
+		return $this->route($action, $parameters, $absolute, $this->routes->getByAction($action));
+	}
+
+	/**
+	 * Get the base URL for the request.
+	 *
+	 * @param  string  $scheme
+	 * @param  string  $root
+	 * @return string
+	 */
+	protected function getRootUrl($scheme, $root = null)
+	{
+		if (is_null($root))
+		{
+			$root = $this->forcedRoot ?: $this->request->root();
+		}
+
+		$start = starts_with($root, 'http://') ? 'http://' : 'https://';
+
+		return preg_replace('~'.$start.'~', $scheme, $root, 1);
+	}
+
+	/**
+	 * Set the forced root URL.
+	 *
+	 * @param  string  $root
+	 * @return void
+	 */
+	public function forceRootUrl($root)
+	{
+		$this->forcedRoot = $root;
+	}
+
+	/**
+	 * Determine if the given path is a valid URL.
+	 *
+	 * @param  string  $path
+	 * @return bool
+	 */
+	public function isValidUrl($path)
+	{
+		if (starts_with($path, ['#', '//', 'mailto:', 'tel:', 'http://', 'https://'])) return true;
+
+		return filter_var($path, FILTER_VALIDATE_URL) !== false;
+	}
+
+	/**
+	 * Format the given URL segments into a single URL.
+	 *
+	 * @param  string  $root
+	 * @param  string  $path
+	 * @param  string  $tail
+	 * @return string
+	 */
+	protected function trimUrl($root, $path, $tail = '')
+	{
+		return trim($root.'/'.trim($path.'/'.$tail, '/'), '/');
+	}
+
+	/**
+	 * Get the request instance.
+	 *
+	 * @return \Symfony\Component\HttpFoundation\Request
+	 */
+	public function getRequest()
+	{
+		return $this->request;
+	}
+
+	/**
+	 * Set the current request instance.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return void
+	 */
+	public function setRequest(Request $request)
+	{
+		$this->request = $request;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/composer.json b/vendor/laravel/framework/src/Illuminate/Routing/composer.json
new file mode 100755
index 0000000..29df7f0
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/composer.json
@@ -0,0 +1,36 @@
+{
+    "name": "illuminate/routing",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/container": "4.2.*",
+        "illuminate/http": "4.2.*",
+        "illuminate/session": "4.2.*",
+        "illuminate/support": "4.2.*",
+        "symfony/http-foundation": "2.5.*",
+        "symfony/http-kernel": "2.5.*",
+        "symfony/routing": "2.5.*"
+    },
+    "require-dev": {
+        "illuminate/console": "4.2.*",
+        "illuminate/filesystem": "4.2.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Routing": ""
+        }
+    },
+    "target-dir": "Illuminate/Routing",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php b/vendor/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php
new file mode 100755
index 0000000..712d072
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php
@@ -0,0 +1,92 @@
+<?php namespace Illuminate\Session;
+
+use Illuminate\Cache\Repository;
+
+class CacheBasedSessionHandler implements \SessionHandlerInterface {
+
+	/**
+	 * The cache repository instance.
+	 *
+	 * @var \Illuminate\Cache\Repository
+	 */
+	protected $cache;
+
+	/**
+	 * The number of minutes to store the data in the cache.
+	 *
+	 * @var int
+	 */
+	protected $minutes;
+
+	/**
+	 * Create a new cache driven handler instance.
+	 *
+	 * @param  \Illuminate\Cache\Repository  $cache
+	 * @param  int  $minutes
+	 * @return void
+	 */
+	public function __construct(Repository $cache, $minutes)
+	{
+		$this->cache = $cache;
+		$this->minutes = $minutes;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function open($savePath, $sessionName)
+	{
+		return true;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function close()
+	{
+		return true;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function read($sessionId)
+	{
+		return $this->cache->get($sessionId, '');
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function write($sessionId, $data)
+	{
+		return $this->cache->put($sessionId, $data, $this->minutes);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function destroy($sessionId)
+	{
+		return $this->cache->forget($sessionId);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function gc($lifetime)
+	{
+		return true;
+	}
+
+	/**
+	 * Get the underlying cache repository.
+	 *
+	 * @return \Illuminate\Cache\Repository
+	 */
+	public function getCache()
+	{
+		return $this->cache;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Session/CommandsServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Session/CommandsServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Session/CommandsServiceProvider.php
new file mode 100755
index 0000000..bafed8d
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Session/CommandsServiceProvider.php
@@ -0,0 +1,39 @@
+<?php namespace Illuminate\Session;
+
+use Illuminate\Support\ServiceProvider;
+
+class CommandsServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('command.session.database', function($app)
+		{
+			return new Console\SessionTableCommand($app['files']);
+		});
+
+		$this->commands('command.session.database');
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('command.session.database');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Session/Console/SessionTableCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Session/Console/SessionTableCommand.php b/vendor/laravel/framework/src/Illuminate/Session/Console/SessionTableCommand.php
new file mode 100644
index 0000000..be99053
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Session/Console/SessionTableCommand.php
@@ -0,0 +1,72 @@
+<?php namespace Illuminate\Session\Console;
+
+use Illuminate\Console\Command;
+use Illuminate\Filesystem\Filesystem;
+
+class SessionTableCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'session:table';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Create a migration for the session database table';
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * Create a new session table command instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @return void
+	 */
+	public function __construct(Filesystem $files)
+	{
+		parent::__construct();
+
+		$this->files = $files;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$fullPath = $this->createBaseMigration();
+
+		$this->files->put($fullPath, $this->files->get(__DIR__.'/stubs/database.stub'));
+
+		$this->info('Migration created successfully!');
+
+		$this->call('dump-autoload');
+	}
+
+	/**
+	 * Create a base migration file for the session.
+	 *
+	 * @return string
+	 */
+	protected function createBaseMigration()
+	{
+		$name = 'create_session_table';
+
+		$path = $this->laravel['path'].'/database/migrations';
+
+		return $this->laravel['migration.creator']->create($name, $path);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Session/Console/stubs/database.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Session/Console/stubs/database.stub b/vendor/laravel/framework/src/Illuminate/Session/Console/stubs/database.stub
new file mode 100755
index 0000000..2aac433
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Session/Console/stubs/database.stub
@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+
+class CreateSessionTable extends Migration {
+
+	/**
+	 * Run the migrations.
+	 *
+	 * @return void
+	 */
+	public function up()
+	{
+		Schema::create('sessions', function($t)
+		{
+			$t->string('id')->unique();
+			$t->text('payload');
+			$t->integer('last_activity');
+		});
+	}
+
+	/**
+	 * Reverse the migrations.
+	 *
+	 * @return void
+	 */
+	public function down()
+	{
+		Schema::drop('sessions');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Session/CookieSessionHandler.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Session/CookieSessionHandler.php b/vendor/laravel/framework/src/Illuminate/Session/CookieSessionHandler.php
new file mode 100755
index 0000000..0a10290
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Session/CookieSessionHandler.php
@@ -0,0 +1,94 @@
+<?php namespace Illuminate\Session;
+
+use Illuminate\Cookie\CookieJar;
+use Symfony\Component\HttpFoundation\Request;
+
+class CookieSessionHandler implements \SessionHandlerInterface {
+
+	/**
+	 * The cookie jar instance.
+	 *
+	 * @var \Illuminate\Cookie\CookieJar
+	 */
+	protected $cookie;
+
+	/**
+	 * The request instance.
+	 *
+	 * @var \Symfony\Component\HttpFoundation\Request
+	 */
+	protected $request;
+
+	/**
+	 * Create a new cookie driven handler instance.
+	 *
+	 * @param  \Illuminate\Cookie\CookieJar  $cookie
+	 * @param  int  $minutes
+	 * @return void
+	 */
+	public function __construct(CookieJar $cookie, $minutes)
+	{
+		$this->cookie = $cookie;
+		$this->minutes = $minutes;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function open($savePath, $sessionName)
+	{
+		return true;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function close()
+	{
+		return true;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function read($sessionId)
+	{
+		return $this->request->cookies->get($sessionId) ?: '';
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function write($sessionId, $data)
+	{
+		$this->cookie->queue($sessionId, $data, $this->minutes);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function destroy($sessionId)
+	{
+		$this->cookie->queue($this->cookie->forget($sessionId));
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function gc($lifetime)
+	{
+		return true;
+	}
+
+	/**
+	 * Set the request instance.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @return void
+	 */
+	public function setRequest(Request $request)
+	{
+		$this->request = $request;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.php b/vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.php
new file mode 100644
index 0000000..dca8979
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.php
@@ -0,0 +1,132 @@
+<?php namespace Illuminate\Session;
+
+use Illuminate\Database\Connection;
+
+class DatabaseSessionHandler implements \SessionHandlerInterface, ExistenceAwareInterface {
+
+	/**
+	 * The database connection instance.
+	 *
+	 * @var \Illuminate\Database\Connection
+	 */
+	protected $connection;
+
+	/**
+	 * The name of the session table.
+	 *
+	 * @var string
+	 */
+	protected $table;
+
+	/**
+	 * The existence state of the session.
+	 *
+	 * @var bool
+	 */
+	protected $exists;
+
+	/**
+	 * Create a new database session handler instance.
+	 *
+	 * @param  \Illuminate\Database\Connection  $connection
+	 * @param  string  $table
+	 * @return void
+	 */
+	public function __construct(Connection $connection, $table)
+	{
+		$this->table = $table;
+		$this->connection = $connection;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function open($savePath, $sessionName)
+	{
+		return true;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function close()
+	{
+		return true;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function read($sessionId)
+	{
+		$session = (object) $this->getQuery()->find($sessionId);
+
+		if (isset($session->payload))
+		{
+			$this->exists = true;
+
+			return base64_decode($session->payload);
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function write($sessionId, $data)
+	{
+		if ($this->exists)
+		{
+			$this->getQuery()->where('id', $sessionId)->update([
+				'payload' => base64_encode($data), 'last_activity' => time(),
+			]);
+		}
+		else
+		{
+			$this->getQuery()->insert([
+				'id' => $sessionId, 'payload' => base64_encode($data), 'last_activity' => time(),
+			]);
+		}
+
+		$this->exists = true;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function destroy($sessionId)
+	{
+		$this->getQuery()->where('id', $sessionId)->delete();
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function gc($lifetime)
+	{
+		$this->getQuery()->where('last_activity', '<=', time() - $lifetime)->delete();
+	}
+
+	/**
+	 * Get a fresh query builder instance for the table.
+	 *
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	protected function getQuery()
+	{
+		return $this->connection->table($this->table);
+	}
+
+	/**
+	 * Set the existence state for the session.
+	 *
+	 * @param  bool  $value
+	 * @return $this
+	 */
+	public function setExists($value)
+	{
+		$this->exists = $value;
+
+		return $this;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Session/ExistenceAwareInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Session/ExistenceAwareInterface.php b/vendor/laravel/framework/src/Illuminate/Session/ExistenceAwareInterface.php
new file mode 100644
index 0000000..8826531
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Session/ExistenceAwareInterface.php
@@ -0,0 +1,13 @@
+<?php namespace Illuminate\Session;
+
+interface ExistenceAwareInterface {
+
+	/**
+	 * Set the existence state for the session.
+	 *
+	 * @param  bool  $value
+	 * @return \SessionHandlerInterface
+	 */
+	public function setExists($value);
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Session/FileSessionHandler.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Session/FileSessionHandler.php b/vendor/laravel/framework/src/Illuminate/Session/FileSessionHandler.php
new file mode 100644
index 0000000..3fc74ca
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Session/FileSessionHandler.php
@@ -0,0 +1,97 @@
+<?php namespace Illuminate\Session;
+
+use Symfony\Component\Finder\Finder;
+use Illuminate\Filesystem\Filesystem;
+
+class FileSessionHandler implements \SessionHandlerInterface {
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * The path where sessions should be stored.
+	 *
+	 * @var string
+	 */
+	protected $path;
+
+	/**
+	 * Create a new file driven handler instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @param  string  $path
+	 * @return void
+	 */
+	public function __construct(Filesystem $files, $path)
+	{
+		$this->path = $path;
+		$this->files = $files;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function open($savePath, $sessionName)
+	{
+		return true;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function close()
+	{
+		return true;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function read($sessionId)
+	{
+		if ($this->files->exists($path = $this->path.'/'.$sessionId))
+		{
+			return $this->files->get($path);
+		}
+
+		return '';
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function write($sessionId, $data)
+	{
+		$this->files->put($this->path.'/'.$sessionId, $data, true);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function destroy($sessionId)
+	{
+		$this->files->delete($this->path.'/'.$sessionId);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function gc($lifetime)
+	{
+		$files = Finder::create()
+					->in($this->path)
+					->files()
+					->ignoreDotFiles(true)
+					->date('<= now - '.$lifetime.' seconds');
+
+		foreach ($files as $file)
+		{
+			$this->files->delete($file->getRealPath());
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Session/Middleware.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Session/Middleware.php b/vendor/laravel/framework/src/Illuminate/Session/Middleware.php
new file mode 100644
index 0000000..1af20aa
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Session/Middleware.php
@@ -0,0 +1,258 @@
+<?php namespace Illuminate\Session;
+
+use Closure;
+use Carbon\Carbon;
+use Symfony\Component\HttpFoundation\Cookie;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpKernel\HttpKernelInterface;
+
+class Middleware implements HttpKernelInterface {
+
+	/**
+	 * The wrapped kernel implementation.
+	 *
+	 * @var \Symfony\Component\HttpKernel\HttpKernelInterface
+	 */
+	protected $app;
+
+	/**
+	 * The session manager.
+	 *
+	 * @var \Illuminate\Session\SessionManager
+	 */
+	protected $manager;
+
+	/**
+	 * The callback to determine to use session arrays.
+	 *
+	 * @var \Closure|null
+	 */
+	protected $reject;
+
+	/**
+	 * Create a new session middleware.
+	 *
+	 * @param  \Symfony\Component\HttpKernel\HttpKernelInterface  $app
+	 * @param  \Illuminate\Session\SessionManager  $manager
+	 * @param  \Closure|null  $reject
+	 * @return void
+	 */
+	public function __construct(HttpKernelInterface $app, SessionManager $manager, Closure $reject = null)
+	{
+		$this->app = $app;
+		$this->reject = $reject;
+		$this->manager = $manager;
+	}
+
+	/**
+	 * Handle the given request and get the response.
+	 *
+	 * @implements HttpKernelInterface::handle
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @param  int   $type
+	 * @param  bool  $catch
+	 * @return \Symfony\Component\HttpFoundation\Response
+	 */
+	public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
+	{
+		$this->checkRequestForArraySessions($request);
+
+		// If a session driver has been configured, we will need to start the session here
+		// so that the data is ready for an application. Note that the Laravel sessions
+		// do not make use of PHP "native" sessions in any way since they are crappy.
+		if ($this->sessionConfigured())
+		{
+			$session = $this->startSession($request);
+
+			$request->setSession($session);
+		}
+
+		$response = $this->app->handle($request, $type, $catch);
+
+		// Again, if the session has been configured we will need to close out the session
+		// so that the attributes may be persisted to some storage medium. We will also
+		// add the session identifier cookie to the application response headers now.
+		if ($this->sessionConfigured())
+		{
+			$this->closeSession($session);
+
+			$this->addCookieToResponse($response, $session);
+		}
+
+		return $response;
+	}
+
+	/**
+	 * Check the request and reject callback for array sessions.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @return void
+	 */
+	public function checkRequestForArraySessions(Request $request)
+	{
+		if (is_null($this->reject)) return;
+
+		if (call_user_func($this->reject, $request))
+		{
+			$this->manager->setDefaultDriver('array');
+		}
+	}
+
+	/**
+	 * Start the session for the given request.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @return \Illuminate\Session\SessionInterface
+	 */
+	protected function startSession(Request $request)
+	{
+		with($session = $this->getSession($request))->setRequestOnHandler($request);
+
+		$session->start();
+
+		return $session;
+	}
+
+	/**
+	 * Close the session handling for the request.
+	 *
+	 * @param  \Illuminate\Session\SessionInterface  $session
+	 * @return void
+	 */
+	protected function closeSession(SessionInterface $session)
+	{
+		$session->save();
+
+		$this->collectGarbage($session);
+	}
+
+	/**
+	 * Get the full URL for the request.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @return string
+	 */
+	protected function getUrl(Request $request)
+	{
+		$url = rtrim(preg_replace('/\?.*/', '', $request->getUri()), '/');
+
+		return $request->getQueryString() ? $url.'?'.$request->getQueryString() : $url;
+	}
+
+	/**
+	 * Remove the garbage from the session if necessary.
+	 *
+	 * @param  \Illuminate\Session\SessionInterface  $session
+	 * @return void
+	 */
+	protected function collectGarbage(SessionInterface $session)
+	{
+		$config = $this->manager->getSessionConfig();
+
+		// Here we will see if this request hits the garbage collection lottery by hitting
+		// the odds needed to perform garbage collection on any given request. If we do
+		// hit it, we'll call this handler to let it delete all the expired sessions.
+		if ($this->configHitsLottery($config))
+		{
+			$session->getHandler()->gc($this->getLifetimeSeconds());
+		}
+	}
+
+	/**
+	 * Determine if the configuration odds hit the lottery.
+	 *
+	 * @param  array  $config
+	 * @return bool
+	 */
+	protected function configHitsLottery(array $config)
+	{
+		return mt_rand(1, $config['lottery'][1]) <= $config['lottery'][0];
+	}
+
+	/**
+	 * Add the session cookie to the application response.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Response  $response
+	 * @param  \Symfony\Component\HttpFoundation\Session\SessionInterface  $session
+	 * @return void
+	 */
+	protected function addCookieToResponse(Response $response, SessionInterface $session)
+	{
+		$s = $session;
+
+		if ($this->sessionIsPersistent($c = $this->manager->getSessionConfig()))
+		{
+			$secure = array_get($c, 'secure', false);
+
+			$response->headers->setCookie(new Cookie(
+				$s->getName(), $s->getId(), $this->getCookieLifetime(), $c['path'], $c['domain'], $secure
+			));
+		}
+	}
+
+	/**
+	 * Get the session lifetime in seconds.
+	 *
+	 *
+	 */
+	protected function getLifetimeSeconds()
+	{
+		return array_get($this->manager->getSessionConfig(), 'lifetime') * 60;
+	}
+
+	/**
+	 * Get the cookie lifetime in seconds.
+	 *
+	 * @return int
+	 */
+	protected function getCookieLifetime()
+	{
+		$config = $this->manager->getSessionConfig();
+
+		return $config['expire_on_close'] ? 0 : Carbon::now()->addMinutes($config['lifetime']);
+	}
+
+	/**
+	 * Determine if a session driver has been configured.
+	 *
+	 * @return bool
+	 */
+	protected function sessionConfigured()
+	{
+		return ! is_null(array_get($this->manager->getSessionConfig(), 'driver'));
+	}
+
+	/**
+	 * Determine if the configured session driver is persistent.
+	 *
+	 * @param  array|null  $config
+	 * @return bool
+	 */
+	protected function sessionIsPersistent(array $config = null)
+	{
+		// Some session drivers are not persistent, such as the test array driver or even
+		// when the developer don't have a session driver configured at all, which the
+		// session cookies will not need to get set on any responses in those cases.
+		$config = $config ?: $this->manager->getSessionConfig();
+
+		return ! in_array($config['driver'], array(null, 'array'));
+	}
+
+	/**
+	 * Get the session implementation from the manager.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @return \Illuminate\Session\SessionInterface
+	 */
+	public function getSession(Request $request)
+	{
+		$session = $this->manager->driver();
+
+		$session->setId($request->cookies->get($session->getName()));
+
+		return $session;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Session/SessionInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Session/SessionInterface.php b/vendor/laravel/framework/src/Illuminate/Session/SessionInterface.php
new file mode 100644
index 0000000..43537d4
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Session/SessionInterface.php
@@ -0,0 +1,30 @@
+<?php namespace Illuminate\Session;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Session\SessionInterface as BaseSessionInterface;
+
+interface SessionInterface extends BaseSessionInterface {
+
+	/**
+	 * Get the session handler instance.
+	 *
+	 * @return \SessionHandlerInterface
+	 */
+	public function getHandler();
+
+	/**
+	 * Determine if the session handler needs a request.
+	 *
+	 * @return bool
+	 */
+	public function handlerNeedsRequest();
+
+	/**
+	 * Set the request on the handler instance.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @return void
+	 */
+	public function setRequestOnHandler(Request $request);
+
+}


[40/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/Airavata/Model/Workspace/Types.php
----------------------------------------------------------------------
diff --git a/app/libraries/Airavata/Model/Workspace/Types.php b/app/libraries/Airavata/Model/Workspace/Types.php
new file mode 100644
index 0000000..7ccd55c
--- /dev/null
+++ b/app/libraries/Airavata/Model/Workspace/Types.php
@@ -0,0 +1,608 @@
+<?php
+namespace Airavata\Model\Workspace;
+
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+use Thrift\Base\TBase;
+use Thrift\Type\TType;
+use Thrift\Type\TMessageType;
+use Thrift\Exception\TException;
+use Thrift\Exception\TProtocolException;
+use Thrift\Protocol\TProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
+use Thrift\Exception\TApplicationException;
+
+
+class Group {
+  static $_TSPEC;
+
+  public $groupName = null;
+  public $description = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'groupName',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'description',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['groupName'])) {
+        $this->groupName = $vals['groupName'];
+      }
+      if (isset($vals['description'])) {
+        $this->description = $vals['description'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Group';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->groupName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->description);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Group');
+    if ($this->groupName !== null) {
+      $xfer += $output->writeFieldBegin('groupName', TType::STRING, 1);
+      $xfer += $output->writeString($this->groupName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->description !== null) {
+      $xfer += $output->writeFieldBegin('description', TType::STRING, 2);
+      $xfer += $output->writeString($this->description);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Project {
+  static $_TSPEC;
+
+  public $projectID = "DEFAULT";
+  public $owner = null;
+  public $name = null;
+  public $description = null;
+  public $creationTime = null;
+  public $sharedUsers = null;
+  public $sharedGroups = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'projectID',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'owner',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'name',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'description',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'creationTime',
+          'type' => TType::I64,
+          ),
+        6 => array(
+          'var' => 'sharedUsers',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        7 => array(
+          'var' => 'sharedGroups',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['projectID'])) {
+        $this->projectID = $vals['projectID'];
+      }
+      if (isset($vals['owner'])) {
+        $this->owner = $vals['owner'];
+      }
+      if (isset($vals['name'])) {
+        $this->name = $vals['name'];
+      }
+      if (isset($vals['description'])) {
+        $this->description = $vals['description'];
+      }
+      if (isset($vals['creationTime'])) {
+        $this->creationTime = $vals['creationTime'];
+      }
+      if (isset($vals['sharedUsers'])) {
+        $this->sharedUsers = $vals['sharedUsers'];
+      }
+      if (isset($vals['sharedGroups'])) {
+        $this->sharedGroups = $vals['sharedGroups'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Project';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->projectID);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->owner);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->name);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->description);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->creationTime);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::LST) {
+            $this->sharedUsers = array();
+            $_size0 = 0;
+            $_etype3 = 0;
+            $xfer += $input->readListBegin($_etype3, $_size0);
+            for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
+            {
+              $elem5 = null;
+              $xfer += $input->readString($elem5);
+              $this->sharedUsers []= $elem5;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::LST) {
+            $this->sharedGroups = array();
+            $_size6 = 0;
+            $_etype9 = 0;
+            $xfer += $input->readListBegin($_etype9, $_size6);
+            for ($_i10 = 0; $_i10 < $_size6; ++$_i10)
+            {
+              $elem11 = null;
+              $xfer += $input->readString($elem11);
+              $this->sharedGroups []= $elem11;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Project');
+    if ($this->projectID !== null) {
+      $xfer += $output->writeFieldBegin('projectID', TType::STRING, 1);
+      $xfer += $output->writeString($this->projectID);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->owner !== null) {
+      $xfer += $output->writeFieldBegin('owner', TType::STRING, 2);
+      $xfer += $output->writeString($this->owner);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->name !== null) {
+      $xfer += $output->writeFieldBegin('name', TType::STRING, 3);
+      $xfer += $output->writeString($this->name);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->description !== null) {
+      $xfer += $output->writeFieldBegin('description', TType::STRING, 4);
+      $xfer += $output->writeString($this->description);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->creationTime !== null) {
+      $xfer += $output->writeFieldBegin('creationTime', TType::I64, 5);
+      $xfer += $output->writeI64($this->creationTime);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->sharedUsers !== null) {
+      if (!is_array($this->sharedUsers)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('sharedUsers', TType::LST, 6);
+      {
+        $output->writeListBegin(TType::STRING, count($this->sharedUsers));
+        {
+          foreach ($this->sharedUsers as $iter12)
+          {
+            $xfer += $output->writeString($iter12);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->sharedGroups !== null) {
+      if (!is_array($this->sharedGroups)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('sharedGroups', TType::LST, 7);
+      {
+        $output->writeListBegin(TType::STRING, count($this->sharedGroups));
+        {
+          foreach ($this->sharedGroups as $iter13)
+          {
+            $xfer += $output->writeString($iter13);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class User {
+  static $_TSPEC;
+
+  public $userName = null;
+  public $groupList = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'userName',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'groupList',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Workspace\Group',
+            ),
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['userName'])) {
+        $this->userName = $vals['userName'];
+      }
+      if (isset($vals['groupList'])) {
+        $this->groupList = $vals['groupList'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'User';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->userName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::LST) {
+            $this->groupList = array();
+            $_size14 = 0;
+            $_etype17 = 0;
+            $xfer += $input->readListBegin($_etype17, $_size14);
+            for ($_i18 = 0; $_i18 < $_size14; ++$_i18)
+            {
+              $elem19 = null;
+              $elem19 = new \Airavata\Model\Workspace\Group();
+              $xfer += $elem19->read($input);
+              $this->groupList []= $elem19;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('User');
+    if ($this->userName !== null) {
+      $xfer += $output->writeFieldBegin('userName', TType::STRING, 1);
+      $xfer += $output->writeString($this->userName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->groupList !== null) {
+      if (!is_array($this->groupList)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('groupList', TType::LST, 2);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->groupList));
+        {
+          foreach ($this->groupList as $iter20)
+          {
+            $xfer += $iter20->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Gateway {
+  static $_TSPEC;
+
+  public $gatewayId = null;
+  public $gatewayName = null;
+  public $domain = null;
+  public $emailAddress = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'gatewayId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'gatewayName',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'domain',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'emailAddress',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['gatewayId'])) {
+        $this->gatewayId = $vals['gatewayId'];
+      }
+      if (isset($vals['gatewayName'])) {
+        $this->gatewayName = $vals['gatewayName'];
+      }
+      if (isset($vals['domain'])) {
+        $this->domain = $vals['domain'];
+      }
+      if (isset($vals['emailAddress'])) {
+        $this->emailAddress = $vals['emailAddress'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Gateway';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->gatewayId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->gatewayName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->domain);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->emailAddress);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Gateway');
+    if ($this->gatewayId !== null) {
+      $xfer += $output->writeFieldBegin('gatewayId', TType::STRING, 1);
+      $xfer += $output->writeString($this->gatewayId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->gatewayName !== null) {
+      $xfer += $output->writeFieldBegin('gatewayName', TType::STRING, 2);
+      $xfer += $output->writeString($this->gatewayName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->domain !== null) {
+      $xfer += $output->writeFieldBegin('domain', TType::STRING, 3);
+      $xfer += $output->writeString($this->domain);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->emailAddress !== null) {
+      $xfer += $output->writeFieldBegin('emailAddress', TType::STRING, 4);
+      $xfer += $output->writeString($this->emailAddress);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/AiravataClientFactory.php
----------------------------------------------------------------------
diff --git a/app/libraries/AiravataClientFactory.php b/app/libraries/AiravataClientFactory.php
new file mode 100755
index 0000000..c55a359
--- /dev/null
+++ b/app/libraries/AiravataClientFactory.php
@@ -0,0 +1,47 @@
+<?php
+
+namespace Airavata\Client;
+
+$GLOBALS['THRIFT_ROOT'] = 'Thrift/';
+//require_once $GLOBALS['THRIFT_ROOT'] . 'Thrift.php';
+/*
+require_once $GLOBALS['THRIFT_ROOT'] . 'Transport/TTransport.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Transport/TSocket.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Protocol/TProtocol.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Protocol/TBinaryProtocol.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Exception/TException.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Exception/TTransportException.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Type/TType.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Type/TMessageType.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Factory/TStringFuncFactory.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'StringFunc/TStringFunc.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'StringFunc/Core.php';
+
+$GLOBALS['AIRAVATA_ROOT'] = 'Airavata/';
+require_once $GLOBALS['AIRAVATA_ROOT'] . 'API/Airavata.php';
+*/
+
+use Thrift\Protocol\TBinaryProtocol;
+use Thrift\Transport\TSocket;
+use Airavata\API\AiravataClient;
+
+class AiravataClientFactory
+{
+
+    private $airavataServerHost;
+    private $airavataServerPort;
+
+    public function __construct($options)
+    {
+        $this->airavataServerHost = isset($options['airavataServerHost']) ? $options['airavataServerHost'] : null;
+        $this->airavataServerPort = isset($options['airavataServerPort']) ? $options['airavataServerPort'] : null;
+    }
+
+    public function getAiravataClient()
+    {
+        $transport = new TSocket($this->airavataServerHost, $this->airavataServerPort);
+        $protocol = new TBinaryProtocol($transport);
+	$transport->open();
+        return new AiravataClient($protocol);
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/AppUtilities.php
----------------------------------------------------------------------
diff --git a/app/libraries/AppUtilities.php b/app/libraries/AppUtilities.php
new file mode 100644
index 0000000..2f9b32e
--- /dev/null
+++ b/app/libraries/AppUtilities.php
@@ -0,0 +1,230 @@
+<?php
+
+//Airavata classes - loaded from app/libraries/Airavata
+use Airavata\API\AiravataClient;
+
+use Airavata\Model\AppCatalog\AppInterface\DataType;
+use Airavata\Model\AppCatalog\AppInterface\InputDataObjectType;
+use Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType;
+use Airavata\Model\AppCatalog\AppInterface\ApplicationInterfaceDescription;
+
+use Airavata\Model\Workspace\Project;
+
+use Airavata\Model\AppCatalog\AppDeployment\ApplicationModule;
+use Airavata\Model\AppCatalog\AppDeployment\ApplicationParallelismType;
+use Airavata\Model\AppCatalog\AppDeployment\ApplicationDeploymentDescription;
+use Airavata\Model\AppCatalog\AppDeployment\SetEnvPaths;
+
+//use Airavata\Model\AppCatalog\ComputeResource
+
+
+class AppUtilities{
+
+	public static function create_or_update_appModule( $inputs, $update = false){
+
+		$airavataclient = Session::get("airavataClient");
+
+		$appModule = new ApplicationModule( array(
+												"appModuleName" => $inputs["appModuleName"],
+												"appModuleVersion" => $inputs["appModuleVersion"],
+												"appModuleDescription" => $inputs["appModuleDescription"]
+										));
+		
+		if( $update)
+			return $airavataclient->updateApplicationModule( $inputs["appModuleId"], $appModule);
+		else
+			return $airavataclient->registerApplicationModule( Session::get("gateway_id"), $appModule);
+	}
+
+	public static function deleteAppModule( $appModuleId){
+
+		$airavataclient = Session::get("airavataClient");
+
+		return $airavataclient->deleteApplicationModule( $appModuleId);
+	}
+
+	public static function getAppInterfaceData(){
+
+		$airavataclient = Session::get("airavataClient");
+
+		$dataType = new DataType();
+		$modules = AppUtilities::getAllModules();
+		$appInterfaces = $airavataclient->getAllApplicationInterfaces( Session::get("gateway_id"));
+
+
+		$InputDataObjectType = new InputDataObjectType();
+
+		return array(
+						"appInterfaces" 	=> $appInterfaces,
+						"dataTypes" 		=> $dataType::$__names,
+						"modules"   		=> $modules
+						);
+	}
+
+	public static function create_or_update_appInterface( $appInterfaceValues, $update = false){
+		
+		$airavataclient = Session::get("airavataClient");
+		//var_dump( $appInterfaceValues); exit;
+		$appInterface = new ApplicationInterfaceDescription( array(
+																"applicationName" => $appInterfaceValues["applicationName"],
+																"applicationDescription" => $appInterfaceValues["applicationDescription"],
+																"applicationModules" => $appInterfaceValues["applicationModules"]
+															) ); 
+
+		if( isset( $appInterfaceValues["inputName"]))
+		{
+			foreach ($appInterfaceValues["inputName"] as $index => $name) {
+				$inputDataObjectType = new InputDataObjectType( array(
+																	"name" => $name,
+																	"value" => $appInterfaceValues["inputValue"][ $index],
+																	"type" => $appInterfaceValues["inputType"][ $index],
+																	"applicationArgument" => $appInterfaceValues["applicationArgumentInput"][$index],
+																	"standardInput" => $appInterfaceValues["standardInput"][ $index],
+																	"userFriendlyDescription" => $appInterfaceValues["userFriendlyDescription"][ $index],
+																	"metaData" => $appInterfaceValues["metaData"][ $index],
+																	"inputOrder" => intval( $appInterfaceValues["inputOrder"][ $index]),
+																	"dataStaged" => intval( $appInterfaceValues["dataStaged"][ $index]),
+																	"isRequired" => $appInterfaceValues["isRequiredInput"][ $index],
+																	"requiredToAddedToCommandLine" => $appInterfaceValues["requiredToAddedToCommandLineInput"][$index]
+																) );
+				$appInterface->applicationInputs[] = $inputDataObjectType;
+			}
+		}
+
+		if( isset( $appInterfaceValues["outputName"]))
+		{
+			foreach ( $appInterfaceValues["outputName"] as $index => $name) {
+				$outputDataObjectType = new OutputDataObjectType( array(
+																	"name" => $name,
+																	"value" => $appInterfaceValues["outputValue"][ $index],
+																	"type" => $appInterfaceValues["outputType"][ $index],
+																	"applicationArgument" => $appInterfaceValues["applicationArgumentOutput"][$index],
+																	"dataMovement" => intval( $appInterfaceValues["dataMovement"][ $index]),
+																	"location" => $appInterfaceValues["location"][ $index],
+																	"isRequired" => $appInterfaceValues["isRequiredOutput"][ $index],
+																	"requiredToAddedToCommandLine" => $appInterfaceValues["requiredToAddedToCommandLineOutput"][$index],
+																	"searchQuery" => $appInterfaceValues["searchQuery"][$index]
+																));
+				$appInterface->applicationOutputs[] = $outputDataObjectType;
+			}
+		}
+
+		//var_dump( $appInterface); exit;
+
+		if( $update)
+			$airavataclient->updateApplicationInterface( $appInterfaceValues["app-interface-id"], $appInterface);
+		else
+			$airavataclient->getApplicationInterface($airavataclient->registerApplicationInterface( Session::get("gateway_id"), $appInterface) );
+
+		//print_r( "App interface has been created.");
+	}
+
+	public static function deleteAppInterface( $appInterfaceId){
+
+		$airavataclient = Session::get("airavataClient");
+
+		return $airavataclient->deleteApplicationInterface( $appInterfaceId);
+	}
+
+
+	public static function getAppDeploymentData(){
+
+		$airavataclient = Session::get("airavataClient");
+
+		$appDeployments = $airavataclient->getAllApplicationDeployments( Session::get("gateway_id"));
+		//var_dump( $appDeployments); exit;
+		$computeResources = $airavataclient->getAllComputeResourceNames();
+		$modules = AppUtilities::getAllModules();
+		$apt = new ApplicationParallelismType();
+
+		return array( 
+						"appDeployments" 			  => $appDeployments,
+						"applicationParallelismTypes" => $apt::$__names,
+						"computeResources"            => $computeResources,
+						"modules"			          => $modules
+					);
+	}
+
+	public static function create_or_update_appDeployment( $inputs, $update = false){
+
+		$appDeploymentValues = $inputs;
+
+		$airavataclient = Session::get("airavataClient");
+
+		if( isset( $appDeploymentValues["moduleLoadCmds"]))
+			$appDeploymentValues["moduleLoadCmds"] = array_unique( array_filter( $appDeploymentValues["moduleLoadCmds"]));
+
+		if( isset( $appDeploymentValues["libraryPrependPathName"] )) 
+		{	
+			$libPrependPathNames = array_unique( array_filter( $appDeploymentValues["libraryPrependPathName"],"trim" ));
+		
+			foreach( $libPrependPathNames as $index => $prependName)
+			{
+				$envPath = new SetEnvPaths(array(
+												"name" => $prependName,
+												"value" => $appDeploymentValues["libraryPrependPathValue"][ $index]
+											));
+				$appDeploymentValues["libPrependPaths"][] = $envPath;
+			}
+		}
+
+		if( isset( $appDeploymentValues["libraryAppendPathName"] )) 
+		{
+			$libAppendPathNames = array_unique( array_filter( $appDeploymentValues["libraryAppendPathName"],"trim" ));
+			foreach( $libAppendPathNames as $index => $appendName)
+			{
+				$envPath = new SetEnvPaths(array(
+												"name" => $appendName,
+												"value" => $appDeploymentValues["libraryAppendPathValue"][ $index]
+											));
+				$appDeploymentValues["libAppendPaths"][] = $envPath;
+			}
+		}
+
+		if( isset( $appDeploymentValues["environmentName"] )) 
+		{
+			$environmentNames = array_unique( array_filter( $appDeploymentValues["environmentName"], "trim"));
+			foreach( $environmentNames as $index => $envName)
+			{
+				$envPath = new SetEnvPaths(array(
+												"name" => $envName,
+												"value" => $appDeploymentValues["environmentValue"][$index]
+											));
+				$appDeploymentValues["setEnvironment"][] = $envPath;
+			}
+		}
+		
+		if( isset( $appDeploymentValues["preJobCommand"] )) 
+		{
+			$appDeploymentValues["preJobCommands"] = array_unique( array_filter( $appDeploymentValues["preJobCommand"], "trim"));
+		}
+
+		if( isset( $appDeploymentValues["postJobCommand"] )) 
+		{
+			$appDeploymentValues["postJobCommands"] = array_unique( array_filter( $appDeploymentValues["postJobCommand"], "trim"));
+		}
+
+		//var_dump( $appDeploymentValues); exit;
+		$appDeployment = new ApplicationDeploymentDescription(  $appDeploymentValues);
+		if( $update)
+			$airavataclient->updateApplicationDeployment( $inputs["app-deployment-id"], $appDeployment);
+		else
+			$appDeploymentId = $airavataclient->registerApplicationDeployment( Session::get("gateway_id"), $appDeployment);
+
+		return;
+
+	}
+
+	public static function deleteAppDeployment( $appDeploymentId )
+	{
+
+		$airavataclient = Session::get("airavataClient");
+
+		return $airavataclient->deleteApplicationDeployment( $appDeploymentId);
+	}
+
+	public static function getAllModules(){
+		$airavataclient = Session::get("airavataClient");
+		return $airavataclient->getAllAppModules( Session::get("gateway_id"));
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/CRUtilities.php
----------------------------------------------------------------------
diff --git a/app/libraries/CRUtilities.php b/app/libraries/CRUtilities.php
new file mode 100644
index 0000000..8f55099
--- /dev/null
+++ b/app/libraries/CRUtilities.php
@@ -0,0 +1,459 @@
+<?php
+
+
+//Airavata classes - loaded from app/libraries/Airavata
+use Airavata\API\AiravataClient;
+
+//Compute Resource classes
+
+use Airavata\Model\AppCatalog\ComputeResource\FileSystems;
+use Airavata\Model\AppCatalog\ComputeResource\JobSubmissionInterface;
+use Airavata\Model\AppCatalog\ComputeResource\JobSubmissionProtocol;
+use Airavata\Model\AppCatalog\ComputeResource\SecurityProtocol;
+use Airavata\Model\AppCatalog\ComputeResource\ResourceJobManager;
+use Airavata\Model\AppCatalog\ComputeResource\ResourceJobManagerType;
+use Airavata\Model\AppCatalog\ComputeResource\JobManagerCommand;
+use Airavata\Model\AppCatalog\ComputeResource\DataMovementProtocol;
+use Airavata\Model\AppCatalog\ComputeResource\ComputeResourceDescription;
+use Airavata\Model\AppCatalog\ComputeResource\SSHJobSubmission;
+use Airavata\Model\AppCatalog\ComputeResource\LOCALSubmission;
+use Airavata\Model\AppCatalog\ComputeResource\UnicoreJobSubmission;
+use Airavata\Model\AppCatalog\ComputeResource\BatchQueue;
+use Airavata\Model\AppCatalog\ComputeResource\SCPDataMovement;
+use Airavata\Model\AppCatalog\ComputeResource\GridFTPDataMovement;
+use Airavata\Model\AppCatalog\ComputeResource\LOCALDataMovement;
+use Airavata\Model\AppCatalog\ComputeResource\UnicoreDataMovement;
+use Airavata\Model\AppCatalog\ComputeResource\MonitorMode;
+
+
+//Gateway Classes
+
+use Airavata\Model\AppCatalog\GatewayProfile\GatewayResourceProfile;
+use Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference;
+
+
+
+
+class CRUtilities{
+/**
+ * Basic utility functions
+ */
+
+//define('ROOT_DIR', __DIR__);
+
+/**
+ * Define configuration constants
+ */
+public static function register_or_update_compute_resource( $computeDescription, $update = false)
+{
+    $airavataclient = Session::get("airavataClient");
+    if( $update)
+    {
+        $computeResourceId = $computeDescription->computeResourceId;
+
+        if( $airavataclient->updateComputeResource( $computeResourceId, $computeDescription) )
+        {
+            $computeResource = $airavataclient->getComputeResource( $computeResourceId);
+            return $computeResource;
+        }
+        else
+            print_r( "Something went wrong while updating!"); exit;
+    }
+    else
+    {
+        /*
+        $fileSystems = new FileSystems();
+        foreach( $fileSystems as $fileSystem)
+            $computeDescription["fileSystems"][$fileSystem] = "";
+        */
+        $cd = new ComputeResourceDescription( $computeDescription);
+        $computeResourceId = $airavataclient->registerComputeResource( $cd);
+    }
+
+    $computeResource = $airavataclient->getComputeResource( $computeResourceId);
+    return $computeResource;
+
+}
+
+/*
+ * Getting data for Compute resource inputs 
+*/
+
+public static function getEditCRData(){
+    $files = new FileSystems();
+    $jsp = new JobSubmissionProtocol();
+    $rjmt = new ResourceJobManagerType();
+    $sp = new SecurityProtocol();
+    $dmp = new DataMovementProtocol();
+    $jmc = new JobManagerCommand();
+    $mm = new MonitorMode();
+    return array(
+                    "fileSystemsObject" => $files,
+                    "fileSystems" => $files::$__names,
+                    "jobSubmissionProtocolsObject" => $jsp,
+                    "jobSubmissionProtocols" => $jsp::$__names,
+                    "resourceJobManagerTypesObject" => $rjmt,
+                    "resourceJobManagerTypes" => $rjmt::$__names,
+                    "securityProtocolsObject" => $sp,
+                    "securityProtocols" => $sp::$__names,
+                    "dataMovementProtocolsObject" => $dmp,
+                    "dataMovementProtocols" => $dmp::$__names,
+                    "jobManagerCommands" => $jmc::$__names,
+                    "monitorModes" => $mm::$__names
+                );
+}
+
+
+public static function createQueueObject( $queue){
+    $queueObject = new BatchQueue( $queue); 
+    return $queueObject;
+}
+
+public static function deleteQueue( $computeResourceId, $queueName)
+{
+    $airavataclient = Session::get("airavataClient");
+    $airavataclient->deleteBatchQueue( $computeResourceId, $queueName);
+}
+
+
+/*
+ * Creating Job Submission Interface.
+*/
+
+public static function create_or_update_JSIObject( $inputs, $update = false){
+
+    $airavataclient = Session::get("airavataClient");
+    $computeResource = Utilities::get_compute_resource(  $inputs["crId"]);
+
+
+    $jsiId = null;
+    if( isset( $inputs["jsiId"]))
+        $jsiId = $inputs["jsiId"];
+
+    if( $inputs["jobSubmissionProtocol"] == JobSubmissionProtocol::LOCAL)
+    {
+
+        //print_r( $jsiObject->resourceJobManager->resourceJobManagerId);
+        $resourceManager = new ResourceJobManager(array( 
+                                                    "resourceJobManagerType" => $inputs["resourceJobManagerType"],
+                                                    "pushMonitoringEndpoint" => $inputs["pushMonitoringEndpoint"],
+                                                    "jobManagerBinPath"      => $inputs["jobManagerBinPath"],
+                                                    "jobManagerCommands"     => $inputs["jobManagerCommands"]
+                                                    ));
+
+        //$rmId = $jsiObject->resourceJobManager->resourceJobManagerId;
+        //$rm = $airavataclient->updateResourceJobManager($rmId, $resourceManager);
+        //print_r( $rm); exit;
+        $localJobSubmission = new LOCALSubmission(  array(
+                                                            "resourceJobManager" => $resourceManager
+                                                        )
+                                                    );
+
+        if( $update) //update Local JSP
+        {
+            $jsiObject = $airavataclient->getLocalJobSubmission( $jsiId);
+            $localSub = $airavataclient->updateResourceJobManager(  $jsiObject->resourceJobManager->resourceJobManagerId, $resourceManager);
+            //$localSub = $airavataclient->updateLocalSubmissionDetails( $jsiId, $localJobSubmission);
+        }
+        else        // create Local JSP
+        {
+            $localSub = $airavataclient->addLocalSubmissionDetails( $computeResource->computeResourceId, 0, $localJobSubmission);
+            return $localSub;
+        }
+        
+    }
+    else if( $inputs["jobSubmissionProtocol"] ==  JobSubmissionProtocol::SSH) /* SSH */
+    {
+        $resourceManager = new ResourceJobManager(array( 
+                                                    "resourceJobManagerType" => $inputs["resourceJobManagerType"],
+                                                    "pushMonitoringEndpoint" => $inputs["pushMonitoringEndpoint"],
+                                                    "jobManagerBinPath"      => $inputs["jobManagerBinPath"],
+                                                    "jobManagerCommands"     => $inputs["jobManagerCommands"]
+                                                    ));
+        $sshJobSubmission = new SSHJobSubmission( array
+                                                    (
+                                                        "securityProtocol" => intval( $inputs["securityProtocol"]),
+                                                        "resourceJobManager" => $resourceManager,
+                                                        "alternativeSSHHostName" => $inputs["alternativeSSHHostName"],
+                                                        "sshPort" => intval( $inputs["sshPort"] ),
+                                                        "monitorMode" => intval( $inputs["monitorMode"] )
+                                                    )
+                                                );
+        //var_dump( $sshJobSubmission); exit;
+        if( $update) //update Local JSP
+        {
+            $jsiObject = $airavataclient->getSSHJobSubmission( $jsiId);
+
+            //first update resource job manager
+            $rmjId = $jsiObject->resourceJobManager->resourceJobManagerId;
+            $airavataclient->updateResourceJobManager(  $rmjId, $resourceManager);
+            $jsiObject = $airavataclient->getSSHJobSubmission( $jsiId);
+
+            $jsiObject->securityProtocol = intval( $inputs["securityProtocol"] );
+            $jsiObject->alternativeSSHHostName = $inputs["alternativeSSHHostName"];
+            $jsiObject->sshPort = intval( $inputs["sshPort"] );
+            $jsiObject->monitorMode = intval( $inputs["monitorMode"] );
+            $jsiObject->resourceJobManager = $airavataclient->getresourceJobManager( $rmjId);
+            //var_dump( $jsiObject); exit;
+            //add updated resource job manager to ssh job submission object.
+            //$sshJobSubmission->resourceJobManager->resourceJobManagerId = $rmjId;
+            $localSub = $airavataclient->updateSSHJobSubmissionDetails( $jsiId, $jsiObject);
+        }
+        else
+        {
+            $sshSub = $airavataclient->addSSHJobSubmissionDetails( $computeResource->computeResourceId, 0, $sshJobSubmission);
+        }
+        return;        
+    }
+    else if( $inputs["jobSubmissionProtocol"] == JobSubmissionProtocol::UNICORE)
+    {
+        $unicoreJobSubmission  = new UnicoreJobSubmission( array
+                                                            (
+                                                                "securityProtocol" => intval( $inputs["securityProtocol"]),
+                                                                "unicoreEndPointURL" => $inputs["unicoreEndPointURL"]
+                                                            )
+                                                        );
+        if( $update)
+        {
+            $jsiObject = $airavataclient->getUnicoreJobSubmission( $jsiId);
+            $jsiObject->securityProtocol = intval( $inputs["securityProtocol"] );
+            $jsiObject->unicoreEndPointURL = $inputs["unicoreEndPointURL"];
+
+            $unicoreSub = $airavataclient->updateUnicoreJobSubmissionDetails( $jsiId, $jsiObject);
+        }
+        else
+        {
+            $unicoreSub = $airavataclient->addUNICOREJobSubmissionDetails( $computeResource->computeResourceId, 0, $unicoreJobSubmission);
+        }
+    }
+    else /* Globus does not work currently */
+    {
+        print_r( "Whoops! We haven't coded for this Job Submission Protocol yet. Still working on it. Please click <a href='" . URL::to('/') . "/cr/edit'>here</a> to go back to edit page for compute resource.");
+    }
+}
+
+/*
+ * Creating Data Movement Interface Object.
+*/
+public static function create_or_update_DMIObject( $inputs, $update = false){
+    $airavataclient = Session::get("airavataClient");
+
+    $computeResource = Utilities::get_compute_resource(  $inputs["crId"] );
+    if( $inputs["dataMovementProtocol"] == DataMovementProtocol::LOCAL) /* LOCAL */
+    {
+        $localDataMovement = new LOCALDataMovement();
+        $localdmp = $airavataclient->addLocalDataMovementDetails( $computeResource->computeResourceId, 0, $localDataMovement);
+        
+        if( $localdmp)
+            print_r( "The Local Data Movement has been added. Edit UI for the Local Data Movement Interface is yet to be made.
+                Please click <a href='" . URL::to('/') . "/cr/edit'>here</a> to go back to edit page for compute resource.");
+    }
+    else if( $inputs["dataMovementProtocol"] == DataMovementProtocol::SCP) /* SCP */
+    {
+        //var_dump( $inputs); exit;
+        $scpDataMovement = new SCPDataMovement( array(
+                                                "securityProtocol" => intval( $inputs["securityProtocol"] ),
+                                                "alternativeSCPHostName" => $inputs["alternativeSSHHostName"],
+                                                "sshPort" => intval( $inputs["sshPort"] )
+                                                )
+
+                                            );
+
+        if( $update)
+            $scpdmp = $airavataclient->updateSCPDataMovementDetails( $inputs["dmiId"], $scpDataMovement);
+        else
+            $scpdmp = $airavataclient->addSCPDataMovementDetails( $computeResource->computeResourceId, 0, $scpDataMovement);   
+   }
+    else if( $inputs["dataMovementProtocol"] == DataMovementProtocol::GridFTP) /* GridFTP */
+    {
+        $gridFTPDataMovement = new GridFTPDataMovement( array(
+                "securityProtocol" => $inputs["securityProtocol"],
+                "gridFTPEndPoints" => $inputs["gridFTPEndPoints"]
+            ));
+        if( $update)
+            $gridftpdmp = $airavataclient->updateGridFTPDataMovementDetails( $inputs["dmiId"], $gridFTPDataMovement);
+        else
+            $gridftpdmp = $airavataclient->addGridFTPDataMovementDetails( $computeResource->computeResourceId, 0, $gridFTPDataMovement);
+    }
+    else if( $inputs["dataMovementProtocol"] == DataMovementProtocol::UNICORE_STORAGE_SERVICE) /* Unicore Storage Service */
+    {
+        $unicoreDataMovement  = new UnicoreDataMovement( array
+                                                            (
+                                                                "securityProtocol" => intval( $inputs["securityProtocol"]),
+                                                                "unicoreEndPointURL" => $inputs["unicoreEndPointURL"]
+                                                            )
+                                                        );
+        if( $update)
+            $unicoredmp = $airavataclient->updateUnicoreDataMovementDetails( $inputs["dmiId"], $unicoreDataMovement);
+        else
+            $unicoredmp = $airavataclient->addUnicoreDataMovementDetails( $computeResource->computeResourceId, 0, $unicoreDataMovement);
+    }
+    else /* other data movement protocols */
+    {
+        print_r( "Whoops! We haven't coded for this Data Movement Protocol yet. Still working on it. Please click <a href='" . URL::to('/') . "/cr/edit'>here</a> to go back to edit page for compute resource.");
+    }
+}
+
+public static function getAllCRObjects( $onlyName = false){
+    $airavataclient = Session::get("airavataClient");
+    $crNames = $airavataclient->getAllComputeResourceNames();
+    if( $onlyName)
+        return $crNames;
+    else
+    {
+        $crObjects = array();
+        foreach( $crNames as $id => $crName)
+        {
+            $crObjects[] = $airavataclient->getComputeResource( $id);
+        }
+        return $crObjects;
+    }
+
+}
+
+public static function getBrowseCRData(){
+    $airavataclient = Session::get("airavataClient");
+	$appDeployments = $airavataclient->getAllApplicationDeployments( Session::get("gateway_id"));
+
+    return array( 'crObjects' => CRUtilities::getAllCRObjects(true),
+    			  'appDeployments' => $appDeployments 
+    			);
+}
+
+public static function getJobSubmissionDetails( $jobSubmissionInterfaceId, $jsp){
+    //jsp = job submission protocol type
+    $airavataclient = Session::get("airavataClient");
+    if( $jsp == JobSubmissionProtocol::LOCAL)
+        return $airavataclient->getLocalJobSubmission( $jobSubmissionInterfaceId);
+    else if( $jsp == JobSubmissionProtocol::SSH)
+        return $airavataclient->getSSHJobSubmission( $jobSubmissionInterfaceId);
+    else if( $jsp == JobSubmissionProtocol::UNICORE)
+        return $airavataclient->getUnicoreJobSubmission( $jobSubmissionInterfaceId);
+    else if( $jsp == JobSubmissionProtocol::CLOUD)
+        return $airavataclient->getCloudJobSubmission( $jobSubmissionInterfaceId);
+
+    //globus get function not present ??	
+}
+
+public static function getDataMovementDetails( $dataMovementInterfaceId, $dmi){
+    //jsp = job submission protocol type
+    $airavataclient = Session::get("airavataClient");
+    if( $dmi == DataMovementProtocol::LOCAL)
+        return $airavataclient->getLocalDataMovement( $dataMovementInterfaceId);
+    else if( $dmi == DataMovementProtocol::SCP)
+        return $airavataclient->getSCPDataMovement( $dataMovementInterfaceId);
+    else if( $dmi == DataMovementProtocol::GridFTP)
+        return $airavataclient->getGridFTPDataMovement( $dataMovementInterfaceId);
+    else if( $dmi == DataMovementProtocol::UNICORE_STORAGE_SERVICE)
+        return $airavataclient->getUnicoreDataMovement( $dataMovementInterfaceId);
+    /*
+    else if( $dmi == JobSubmissionProtocol::CLOUD)
+        return $airavataclient->getCloudJobSubmission( $dataMovementInterfaceId);
+    */
+
+    //globus get function not present ??
+}
+
+public static function deleteActions( $inputs){
+    $airavataclient = Session::get("airavataClient");
+    if( isset( $inputs["jsiId"]) )
+        if( $airavataclient->deleteJobSubmissionInterface( $inputs["crId"], $inputs["jsiId"]) )
+            return 1;
+        else
+            return 0;
+    else if( isset( $inputs["dmiId"]) )
+        if( $airavataclient->deleteDataMovementInterface( $inputs["crId"], $inputs["dmiId"]) )
+            return 1;
+        else 
+            return 0;
+    elseif( isset( $inputs["del-crId"]))
+    	if( $airavataclient->deleteComputeResource( $inputs["del-crId"] ) )
+    		return 1;
+    	else
+    		return 0;
+}
+
+public static function create_or_update_gateway_profile( $inputs, $update = false){
+    $airavataclient = Session::get("airavataClient");
+
+    $computeResourcePreferences = array();
+    if( isset( $input["crPreferences"]) )
+        $computeResourcePreferences = $input["crPreferences"];
+
+    $gatewayProfile = new GatewayResourceProfile( array(
+                                                        "gatewayName" => $inputs["gatewayName"],
+                                                        "gatewayDescription" => $inputs["gatewayDescription"],
+                                                        "computeResourcePreferences" =>  $computeResourcePreferences
+                                                        )
+                                                );
+
+    if( $update){
+        $gatewayProfile = new GatewayResourceProfile( array(
+                                                        "gatewayName" => $inputs["gatewayName"],
+                                                        "gatewayDescription" => $inputs["gatewayDescription"]
+                                                        )
+                                                );
+        $gatewayProfileId = $airavataclient->updateGatewayResourceProfile( $inputs["edit-gpId"], $gatewayProfile);
+    }
+    else
+        $gatewayProfileId = $airavataclient->registerGatewayResourceProfile( $gatewayProfile);
+}
+
+public static function getAllGatewayProfilesData(){
+    $airavataclient = Session::get("airavataClient");
+
+    if( Session::has("scigap_admin") )
+        $gateways = $airavataclient->getAllGateways();
+    else
+    {
+        $app_config = Utilities::read_config();
+        $gateways[0] = $airavataclient->getGateway( $app_config["gateway-id"]);
+    }
+
+    $gatewayProfiles = $airavataclient->getAllGatewayComputeResources();
+    //$gatewayProfileIds = array("GatewayTest3_57726e98-313f-4e7c-87a5-18e69928afb5", "GatewayTest4_4fd9fb28-4ced-4149-bdbd-1f276077dad8");
+    foreach( $gateways as $key => $gw)
+    {
+        $gateways[$key]->profile = array();
+        foreach( (array)$gatewayProfiles as $index => $gp)
+        {
+
+            if( $gw->gatewayId == $gp->gatewayID)
+            {
+                foreach( (array)$gp->computeResourcePreferences as $i => $crp)
+                {
+                    $gatewayProfiles[$index]->computeResourcePreferences[$i]->crDetails = $airavataclient->getComputeResource( $crp->computeResourceId);
+                }
+                $gateways[$key]->profile = $gatewayProfiles[$index];
+            }
+        }
+    }
+    //var_dump( $gatewayProfiles[0]->computeResourcePreferences[0]->crDetails); exit;
+    
+    return $gateways;
+}
+
+public static function add_or_update_CRP( $inputs){
+    $airavataclient = Session::get("airavataClient");
+
+    $computeResourcePreferences = new computeResourcePreference( $inputs);
+
+    //var_dump( $inputs); exit;
+    return $airavataclient->addGatewayComputeResourcePreference( $inputs["gatewayId"], $inputs["computeResourceId"], $computeResourcePreferences);
+
+}
+
+public static function deleteGP( $gpId){
+    $airavataclient = Session::get("airavataClient");
+
+    return $airavataclient->deleteGatewayResourceProfile( $gpId);
+}
+
+public static function deleteCR( $inputs){
+    $airavataclient = Session::get("airavataClient");
+
+    return $airavataclient->deleteGatewayComputeResourcePreference( $inputs["gpId"], $inputs["rem-crId"]);
+}
+
+}
+?>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/ExpUtilities.php
----------------------------------------------------------------------
diff --git a/app/libraries/ExpUtilities.php b/app/libraries/ExpUtilities.php
new file mode 100644
index 0000000..40e5d36
--- /dev/null
+++ b/app/libraries/ExpUtilities.php
@@ -0,0 +1,996 @@
+<?php
+
+//Thrift classes - loaded from Vendor/Thrift
+use Thrift\Transport\TTransport;
+use Thrift\Exception\TException;
+use Thrift\Exception\TTransportException;
+use Thrift\Factory\TStringFuncFactory;
+use Thrift\Protocol\TBinaryProtocol;
+use Thrift\Transport\TSocket;
+
+//Airavata classes - loaded from app/libraries/Airavata
+use Airavata\API\AiravataClient;
+use Airavata\API\Error\InvalidRequestException;
+use Airavata\API\Error\AiravataClientException;
+use Airavata\API\Error\AiravataSystemException;
+use Airavata\API\Error\ExperimentNotFoundException;
+use Airavata\Model\Workspace\Experiment\ComputationalResourceScheduling;
+use Airavata\Model\AppCatalog\AppInterface\InputDataObjectType;
+use Airavata\Model\Workspace\Experiment\UserConfigurationData;
+use Airavata\Model\Workspace\Experiment\AdvancedOutputDataHandling;
+use Airavata\Model\Workspace\Experiment\Experiment;
+use Airavata\Model\Workspace\Experiment\ExperimentState;
+use Airavata\Model\AppCatalog\AppInterface\DataType;
+use Airavata\Model\Workspace\Experiment\JobState;
+use Airavata\Model\AppCatalog\ComputeResource\JobSubmissionInterface;
+use Airavata\Model\AppCatalog\ComputeResource\JobSubmissionProtocol;
+
+class ExpUtilities{
+
+/**
+ * Launch the experiment with the given ID
+ * @param $expId
+ */
+public static function launch_experiment($expId)
+{
+    $airavataclient = Session::get("airavataClient");
+    //global $tokenFilePath;
+    try
+    {
+        /* temporarily using hard-coded token
+        open_tokens_file($tokenFilePath);
+
+        $communityToken = $tokenFile->tokenId;
+
+
+        $token = isset($_SESSION['tokenId'])? $_SESSION['tokenId'] : $communityToken;
+
+        $airavataclient->launchExperiment($expId, $token);
+
+        $tokenString = isset($_SESSION['tokenId'])? 'personal' : 'community';
+
+        Utilities::print_success_message('Experiment launched using ' . $tokenString . ' allocation!');
+        */
+
+        $hardCodedToken = 'bdc612fe-401e-4684-88e9-317f99409c45';
+        $airavataclient->launchExperiment($expId, $hardCodedToken);
+
+        /*
+        Utilities::print_success_message('Experiment launched!');
+        Utilities::print_success_message("<p>Experiment launched!</p>" .
+            '<p>You will be redirected to the summary page shortly, or you can
+            <a href="experiment_summary.php?expId=' . $expId . '">go directly</a> to the experiment summary page.</p>');
+        redirect('experiment_summary.php?expId=' . $expId);
+        */
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem launching the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (ExperimentNotFoundException $enf)
+    {
+        Utilities::print_error_message('<p>There was a problem launching the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem launching the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem launching the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
+    }
+    catch (Exception $e)
+    {
+        Utilities::print_error_message('<p>There was a problem launching the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Exception: ' . $e->getMessage() . '</p>');
+    }
+}
+
+
+/**
+ * List the experiment's input files
+ * @param $experiment
+ */
+public static function list_input_files($experiment)
+{
+    $applicationInputs = Utilities::get_application_inputs($experiment->applicationId);
+
+    $experimentInputs = $experiment->experimentInputs;
+
+
+    //showing experiment inputs in the order defined by the admins.
+    $order = array();
+    foreach ($experimentInputs as $index => $input)
+    {
+        $order[$index] = $input->inputOrder;
+    }
+    array_multisort($order, SORT_ASC, $experimentInputs);
+    
+    foreach ($experimentInputs as $input)
+    {
+        $matchingAppInput = null;
+
+        foreach($applicationInputs as $applicationInput)
+        {
+            if ($input->name == $applicationInput->name)
+            {
+                $matchingAppInput = $applicationInput;
+            }
+        }
+        //var_dump($matchingAppInput);
+
+        if ($matchingAppInput->type == DataType::URI)
+        {
+            $explode = explode('/', $input->value);
+            echo '<p><a target="_blank"
+                        href="' . URL::to("/") . "/../../" . Constant::EXPERIMENT_DATA_ROOT . $explode[sizeof($explode)-2] . '/' . $explode[sizeof($explode)-1] . '">' .
+                $explode[sizeof($explode)-1] . '
+                <span class="glyphicon glyphicon-new-window"></span></a></p>';
+        }
+        elseif ($matchingAppInput->type == DataType::STRING)
+        {
+            echo '<p>' . $input->name . ': ' . $input->value . '</p>';
+        }
+    }
+}
+
+
+/**
+ * Get a list of the inputs for the application with the given ID
+ * @param $id
+ * @return null
+ */
+public static function get_application_inputs($id)
+{
+    $airavataclient = Session::get("airavataClient");
+    $inputs = null;
+
+    try
+    {
+        $inputs = $airavataclient->getApplicationInputs($id);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting application inputs.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting application inputs.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem getting application inputs.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
+    }
+
+    return $inputs;
+}
+
+
+/**
+ * Get a list of the outputs for the application with the given ID
+ * @param $id
+ * @return null
+ */
+public static function get_application_outputs($id)
+{
+    $airavataclient = Session::get("airavataClient");
+    $outputs = null;
+
+    try
+    {
+        $outputs = $airavataclient->getApplicationOutputs($id);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting application outputs.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting application outputs.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem getting application outputs.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
+    }
+
+    return $outputs;
+}
+
+
+/**
+ * Get the experiment with the given ID
+ * @param $expId
+ * @return null
+ */
+public static function get_experiment($expId)
+{
+    $airavataclient = Session::get("airavataClient");
+
+    try
+    {
+        return $airavataclient->getExperiment($expId);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (ExperimentNotFoundException $enf)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
+    }
+    catch (TTransportException $tte)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>TTransportException: ' . $tte->getMessage() . '</p>');
+    }
+    catch (Exception $e)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Exception: ' . $e->getMessage() . '</p>');
+    }
+
+}
+
+
+
+/**
+ * Create and configure a new Experiment
+ * @return Experiment
+ */
+public static function assemble_experiment()
+{
+    $utility = new Utilities();
+    $experimentInputs = array();
+
+    $scheduling = new ComputationalResourceScheduling();
+    $scheduling->totalCPUCount = $_POST['cpu-count'];
+    $scheduling->nodeCount = $_POST['node-count'];
+    $scheduling->queueName = $_POST['queue-name'];
+    //$scheduling->numberOfThreads = $_POST['threads'];
+    //$scheduling->queueName = 'normal';
+    $scheduling->wallTimeLimit = $_POST['wall-time'];
+    //$scheduling->totalPhysicalMemory = $_POST['memory'];
+    $scheduling->resourceHostId = $_POST['compute-resource'];
+
+    $userConfigData = new UserConfigurationData();
+    $userConfigData->computationalResourceScheduling = $scheduling;
+
+    $applicationInputs = Utilities::get_application_inputs($_POST['application']);
+    $experimentInputs = Utilities::process_inputs($applicationInputs, $experimentInputs);
+    //var_dump($experimentInputs);
+
+    if( Utilities::$experimentPath != null){
+        $advHandling = new AdvancedOutputDataHandling();
+
+        $advHandling->outputDataDir = str_replace( base_path() . Constant::EXPERIMENT_DATA_ROOT, Utilities::$pathConstant , Utilities::$experimentPath);
+        $userConfigData->advanceOutputDataHandling = $advHandling;
+    }
+
+    //TODO: replace constructor with a call to airvata to get a prepopulated experiment template
+    $experiment = new Experiment();
+
+    // required
+    $experiment->projectID = $_POST['project'];
+    $experiment->userName = Session::get( 'username');
+    $experiment->name = $_POST['experiment-name'];
+
+    // optional
+    $experiment->description = $_POST['experiment-description'];
+    $experiment->applicationId = $_POST['application'];
+    $experiment->userConfigurationData = $userConfigData;
+    $experiment->experimentInputs = $experimentInputs;
+    if( isset( $_POST["emailNotification"]))
+    {
+        $experiment->emailNotification = intval( $_POST["emailNotification"] );
+        $experiment->emailAddresses = array_unique( array_filter( $_POST["emailAddresses"], "trim") );
+    }
+
+    // adding default experiment outputs for now till prepoulated experiment template is not implemented.
+    $experiment->experimentOutputs = Utilities::get_application_outputs( $_POST["application"]);
+
+    if ($experimentInputs)
+    {
+        return $experiment;
+    }
+}
+
+/**
+ * @param $applicationInputs
+ * @param $experimentInputs
+ * @internal param $environmentPath
+ * @return array
+ */
+public static function process_inputs($applicationInputs, $experimentInputs)
+{
+    $utility = new Utilities();
+    $experimentAssemblySuccessful = true;
+    $newExperimentInputs = array();
+
+    //var_dump($_FILES);
+
+    if (sizeof($_FILES) > 0)
+    {
+        if (Utilities::file_upload_successful())
+        {
+            // construct unique path
+            do
+            {
+                Utilities::$experimentPath = base_path() . Constant::EXPERIMENT_DATA_ROOT . str_replace(' ', '', Session::get('username') ) . md5(rand() * time()) . '/';
+            }
+            while (is_dir( Utilities::$experimentPath)); // if dir already exists, try again
+
+            //var_dump( Utilities::$experimentPath ); exit;
+            // create upload directory
+            if (!mkdir( Utilities::$experimentPath))
+            {
+                Utilities::print_error_message('<p>Error creating upload directory!
+                    Please try again later or report a bug using the link in the Help menu.</p>');
+                $experimentAssemblySuccessful = false;
+            }
+        }
+        else
+        {
+            $experimentAssemblySuccessful = false;
+        }
+    }
+
+    //sending application inputs in the order defined by the admins.
+    $order = array();
+    foreach ($applicationInputs as $index => $input)
+    {
+        $order[$index] = $input->inputOrder;
+    }
+    array_multisort($order, SORT_ASC, $applicationInputs);
+    
+    foreach ($applicationInputs as $applicationInput)
+    {
+        $experimentInput = new InputDataObjectType();
+        $experimentInput = $applicationInput;
+        //$experimentInput->name = $applicationInput->name;
+        //$experimentInput->metaData = $applicationInput->metaData;
+
+
+        //$experimentInput->type = $applicationInput->type;
+        //$experimentInput->type = DataType::STRING;
+
+
+        if(($applicationInput->type == DataType::STRING) ||
+            ($applicationInput->type == DataType::INTEGER) ||
+            ($applicationInput->type == DataType::FLOAT))
+        {
+            if (isset($_POST[$applicationInput->name]) && (trim($_POST[$applicationInput->name]) != ''))
+            {
+                $experimentInput->value = $_POST[$applicationInput->name];
+                $experimentInput->type = $applicationInput->type;
+
+            }
+            else // use previous value
+            {
+                $index = -1;
+                for ($i = 0; $i < sizeof($experimentInputs); $i++)
+                {
+                    if ($experimentInputs[$i]->name == $applicationInput->name)
+                    {
+                        $index = $i;
+                    }
+                }
+
+                if ($index >= 0)
+                {
+                    $experimentInput->value = $experimentInputs[$index]->value;
+                    $experimentInput->type = $applicationInput->type;
+                }
+            }
+        }
+        elseif ($applicationInput->type == DataType::URI)
+        {
+            //var_dump($_FILES[$applicationInput->name]->name);
+            if ($_FILES[$applicationInput->name]['name'])
+            {
+                $file = $_FILES[$applicationInput->name];
+
+
+                //
+                // move file to experiment data directory
+                //
+                $filePath = Utilities::$experimentPath . $file['name'];
+
+                // check if file already exists
+                if (is_file($filePath))
+                {
+                    unlink($filePath);
+
+                    Utilities::print_warning_message('Uploaded file already exists! Overwriting...');
+                }
+
+                $moveFile = move_uploaded_file($file['tmp_name'], $filePath);
+
+                if ($moveFile)
+                {
+                    Utilities::print_success_message('Upload: ' . $file['name'] . '<br>' .
+                        'Type: ' . $file['type'] . '<br>' .
+                        'Size: ' . ($file['size']/1024) . ' kB');//<br>' .
+                        //'Stored in: ' . $experimentPath . $file['name']);
+                }
+                else
+                {
+                    Utilities::print_error_message('<p>Error moving uploaded file ' . $file['name'] . '!
+                    Please try again later or report a bug using the link in the Help menu.</p>');
+                    $experimentAssemblySuccessful = false;
+                }
+
+                $experimentInput->value = str_replace(base_path() . Constant::EXPERIMENT_DATA_ROOT, Utilities::$pathConstant , $filePath);
+                $experimentInput->type = $applicationInput->type;
+                
+            }
+            else
+            {
+                $index = -1;
+                for ($i = 0; $i < sizeof($experimentInputs); $i++)
+                {
+                    if ($experimentInputs[$i]->name == $applicationInput->name)
+                    {
+                        $index = $i;
+                    }
+                }
+
+                if ($index >= 0)
+                {
+                    $experimentInput->value = $experimentInputs[$index]->value;
+                    $experimentInput->type = $applicationInput->type;
+                }
+            }
+
+        }
+        else
+        {
+            Utilities::print_error_message('I cannot accept this input type yet!');
+        }
+
+
+
+
+
+
+
+        //$experimentInputs[] = $experimentInput;
+        /*
+        $index = -1;
+        for ($i = 0; $i < sizeof($experimentInputs); $i++)
+        {
+            if ($experimentInputs[$i]->key == $experimentInput->key)
+            {
+                $index = $i;
+            }
+        }
+
+        if ($index >= 0)
+        {
+            unset($experimentInputs[$index]);
+        }
+        */
+        //$experimentInputs[] = $experimentInput;
+
+
+
+
+
+        $newExperimentInputs[] = $experimentInput;
+
+
+    }
+
+    if ($experimentAssemblySuccessful)
+    {
+        return $newExperimentInputs;
+    }
+    else
+    {
+        return false;
+    }
+
+}
+
+
+/**
+ * Check the uploaded files for errors
+ */
+public static function file_upload_successful()
+{
+    $uploadSuccessful = true;
+
+    foreach ($_FILES as $file)
+    {
+        //var_dump($file);
+        if($file['name'])
+        {
+            if ($file['error'] > 0)
+            {
+                $uploadSuccessful = false;
+                Utilities::print_error_message('<p>Error uploading file ' . $file['name'] . ' !
+                    Please try again later or report a bug using the link in the Help menu.');
+            }/*
+            elseif ($file['type'] != 'text/plain')
+            {
+                $uploadSuccessful = false;
+                Utilities::print_error_message('Uploaded file ' . $file['name'] . ' type not supported!');
+            }
+            elseif (($file['size'] / 1024) > 20)
+            {
+                $uploadSuccessful = false;
+                Utilities::print_error_message('Uploaded file ' . $file['name'] . ' must be smaller than 10 MB!');
+            }*/
+        }
+
+
+    }
+
+    return $uploadSuccessful;
+}
+
+
+/**
+ * Update the experiment with the given ID
+ * @param $expId
+ * @param $updatedExperiment
+ */
+public static function update_experiment($expId, $updatedExperiment)
+{
+    $airavataclient = Session::get("airavataClient");
+
+    try
+    {
+        $airavataclient->updateExperiment($expId, $updatedExperiment);
+
+        /*
+        Utilities::print_success_message("<p>Experiment updated!</p>" .
+            '<p>Click
+            <a href="' . URL::to('/') . '/experiment/summary?expId=' . $expId . '">here</a> to visit the experiment summary page.</p>');
+        */
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem updating the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (ExperimentNotFoundException $enf)
+    {
+        Utilities::print_error_message('<p>There was a problem updating the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem updating the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem updating the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
+    }
+
+}
+
+
+/**
+ * Clone the experiment with the given ID
+ * @param $expId
+ */
+public static function clone_experiment($expId)
+{
+    $airavataclient = Session::get("airavataClient");
+
+    try
+    {
+        //create new experiment to receive the clone
+        $experiment = $airavataclient->getExperiment($expId);
+
+        $cloneId = $airavataclient->cloneExperiment($expId, 'Clone of ' . $experiment->name);
+
+        Utilities::print_success_message("<p>Experiment cloned!</p>" .
+            '<p>You will be redirected to the edit page shortly, or you can
+            <a href="edit_experiment.php?expId=' . $cloneId . '">go directly</a> to the edit experiment page.</p>');
+        //redirect('edit_experiment.php?expId=' . $cloneId);
+        return $cloneId;
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem cloning the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (ExperimentNotFoundException $enf)
+    {
+        Utilities::print_error_message('<p>There was a problem cloning the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem cloning the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem cloning the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
+    }
+    catch (TTransportException $tte)
+    {
+        Utilities::print_error_message('<p>There was a problem cloning the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>TTransportException: ' . $tte->getMessage() . '</p>');
+    }
+}
+
+/**
+ * Cancel the experiment with the given ID
+ * @param $expId
+ */
+public static function cancel_experiment($expId)
+{
+    $airavataclient = Session::get("airavataClient");
+
+    try
+    {
+        $airavataclient->terminateExperiment($expId);
+
+        Utilities::print_success_message("Experiment canceled!");
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem canceling the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (ExperimentNotFoundException $enf)
+    {
+        Utilities::print_error_message('<p>There was a problem canceling the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem canceling the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem canceling the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
+    }
+    catch (TTransportException $tte)
+    {
+        Utilities::print_error_message('<p>There was a problem canceling the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>TTransportException: ' . $tte->getMessage() . '</p>');
+    }
+    catch (Exception $e)
+    {
+        Utilities::print_error_message('<p>There was a problem canceling the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Exception: ' . $e->getMessage() . '</p>');
+    }
+}
+
+
+/**
+ * Create a new experiment from the values submitted in the form
+ * @return null
+ */
+public static function create_experiment()
+{
+    $airavataclient = Session::get("airavataClient");
+
+    $experiment = Utilities::assemble_experiment();
+    //var_dump($experiment); exit;
+    $expId = null;
+
+    try
+    {
+        if($experiment)
+        {
+            $expId = $airavataclient->createExperiment( Session::get("gateway_id"), $experiment);
+        }
+
+        if ($expId)
+        {
+            /*
+            Utilities::print_success_message("Experiment {$_POST['experiment-name']} created!" .
+                ' <a href="experiment_summary.php?expId=' . $expId . '">Go to experiment summary page</a>');
+            */
+        }
+        else
+        {
+            Utilities::print_error_message("Error creating experiment {$_POST['experiment-name']}!");
+        }
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('AiravataSystemException!<br><br>' . $ase->getMessage());
+    }
+
+    return $expId;
+}
+
+/*
+ * Required in Experiment Sumamry page.
+ *
+*/
+
+public static function list_output_files($experiment, $expStatus)
+{
+    $expStatusVal = array_search($expStatus, ExperimentState::$__names);
+
+    if( $expStatusVal == ExperimentState::COMPLETED )
+    {
+        $utility = new Utilities();
+        $experimentOutputs = $experiment->experimentOutputs;
+        foreach ((array)$experimentOutputs as $output)
+        {
+            if ($output->type == DataType::URI || $output->type == DataType::STDOUT || $output->type == DataType::STDERR )
+            {
+                //echo '<p>' . $output->key .  ': <a href="' . $output->value . '">' . $output->value . '</a></p>';
+                $outputPath = str_replace(Utilities::$experimentDataPathAbsolute, Constant::EXPERIMENT_DATA_ROOT, $output->value);
+                $outputPathArray = explode("/", $outputPath);
+
+                echo '<p>' . $output->name  . ' : ' . '<a target="_blank"
+                            href="' . URL::to("/") . "/.." . str_replace(Utilities::$experimentDataPathAbsolute, Constant::EXPERIMENT_DATA_ROOT, $output->value) . '">' . 
+                            $outputPathArray[ sizeof( $outputPathArray) - 1] . ' <span class="glyphicon glyphicon-new-window"></span></a></p>';
+            }
+            elseif ($output->type == DataType::STRING)
+            {
+                echo '<p>' . $output->value . '</p>';
+            }
+        }
+    }
+    else
+        echo "Experiment hasn't completed. Experiment Status is : " . $expStatus;
+
+}
+public static function get_experiment_values( $experiment, $project, $forSearch = false)
+{
+    $airavataclient = Session::get("airavataClient");
+    //var_dump( $experiment); exit;
+    $expVal = array();
+    $expVal["experimentStatusString"] = "";
+    $expVal["experimentTimeOfStateChange"] = "";
+    $expVal["experimentCreationTime"] = "";
+
+    if( $experiment->experimentStatus != null)
+    {
+        $experimentStatus = $experiment->experimentStatus;
+        $experimentState = $experimentStatus->experimentState;
+        $experimentStatusString = ExperimentState::$__names[$experimentState];
+        $expVal["experimentStatusString"] = $experimentStatusString;
+        $expVal["experimentTimeOfStateChange"] = date('Y-m-d H:i:s', $experimentStatus->timeOfStateChange/1000); // divide by 1000 since timeOfStateChange is in ms
+        $expVal["experimentCreationTime"] = date('Y-m-d H:i:s', $experiment->creationTime/1000); // divide by 1000 since creationTime is in ms
+    }
+    $jobStatus = $airavataclient->getJobStatuses($experiment->experimentID);
+
+    if ($jobStatus)
+    {
+        $jobName = array_keys($jobStatus);
+        $jobState = JobState::$__names[$jobStatus[$jobName[0]]->jobState];
+    }
+    else
+    {
+        $jobState = null;
+    }
+
+    $expVal["jobState"] = $jobState;
+    
+    if(! $forSearch)
+    {
+        $userConfigData = $experiment->userConfigurationData;
+        $scheduling = $userConfigData->computationalResourceScheduling;
+        $expVal['scheduling'] = $scheduling;
+        $expVal["computeResource"] = Utilities::get_compute_resource($scheduling->resourceHostId);
+    }
+    $expVal["applicationInterface"] = Utilities::get_application_interface($experiment->applicationId);
+
+
+    switch ($experimentStatusString)
+    {
+        case 'CREATED':
+        case 'VALIDATED':
+        case 'SCHEDULED':
+        case 'CANCELED':
+        case 'FAILED':
+            $expVal["editable"] = true;
+            break;
+        default:
+            $expVal["editable"] = false;
+            break;
+    }
+
+    switch ($experimentStatusString)
+    {
+        case 'CREATED':
+        case 'VALIDATED':
+        case 'SCHEDULED':
+        case 'LAUNCHED':
+        case 'EXECUTING':
+            $expVal["cancelable"] = true;
+            break;
+        default:
+            $expVal["cancelable"] = false;
+            break;
+    }
+
+    return $expVal;
+
+}
+
+
+/**
+ * Get results of the user's search of experiments
+ * @return array|null
+ */
+public static function get_expsearch_results( $inputs)
+{
+    $airavataclient = Session::get("airavataClient");
+    $experiments = array();
+
+    try
+    {
+        switch ( $inputs["search-key"])
+        {
+            case 'experiment-name':
+                $experiments = $airavataclient->searchExperimentsByName(Session::get('gateway_id'), Session::get('username'), $inputs["search-value"]);
+                break;
+            case 'experiment-description':
+                $experiments = $airavataclient->searchExperimentsByDesc(Session::get('gateway_id'), Session::get('username'), $inputs["search-value"]);
+                break;
+            case 'application':
+                $experiments = $airavataclient->searchExperimentsByApplication(Session::get('gateway_id'), Session::get('username'), $inputs["search-value"]);
+                break;
+            case 'creation-time':
+                $experiments = $airavataclient->searchExperimentsByCreationTime(Session::get('gateway_id'), Session::get('username'), strtotime( $inputs["from-date"])*1000, strtotime( $inputs["to-date"])*1000 );
+                break;
+            case '':
+        }
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
+    }
+    catch (AiravataSystemException $ase)
+    {
+        if ($ase->airavataErrorType == 2) // 2 = INTERNAL_ERROR
+        {
+            Utilities::print_info_message('<p>You have not created any experiments yet, so no results will be returned!</p>
+                                <p>Click <a href="create_experiment.php">here</a> to create an experiment, or
+                                <a href="create_project.php">here</a> to create a new project.</p>');
+        }
+        else
+        {
+            Utilities::print_error_message('There was a problem with Airavata. Please try again later or report a bug using the link in the Help menu.');
+            //print_error_message('AiravataSystemException!<br><br>' . $ase->airavataErrorType . ': ' . $ase->getMessage());
+        }
+    }
+    catch (TTransportException $tte)
+    {
+        Utilities::print_error_message('TTransportException!<br><br>' . $tte->getMessage());
+    }
+
+    //get values of all experiments
+    $expContainer = array();
+    $expNum = 0;
+    foreach( $experiments as $experiment)
+    {
+        $expValue = Utilities::get_experiment_values( $experiment, Utilities::get_project($experiment->projectID), true );
+        $expContainer[$expNum]['experiment'] = $experiment;
+        if( $expValue["experimentStatusString"] == "FAILED")
+            $expValue["editable"] = false;
+        $expContainer[$expNum]['expValue'] = $expValue;
+        $expNum++;
+    }
+
+    return $expContainer;
+}
+
+public static function getExpStates(){
+    return ExperimentState::$__names;
+}
+
+
+public static function apply_changes_to_experiment($experiment, $input)
+{
+    $experiment->name = $input['experiment-name'];
+    $experiment->description = rtrim($input['experiment-description']);
+    $experiment->projectID = $input['project'];
+    //$experiment->applicationId = $_POST['application'];
+
+    $userConfigDataUpdated = $experiment->userConfigurationData;
+    $schedulingUpdated = $userConfigDataUpdated->computationalResourceScheduling;
+
+    $schedulingUpdated->resourceHostId = $input['compute-resource'];
+    $schedulingUpdated->nodeCount = $input['node-count'];
+    $schedulingUpdated->queueName = $_POST['queue-name'];
+    $schedulingUpdated->totalCPUCount = $input['cpu-count'];
+    $schedulingUpdated->wallTimeLimit = $input['wall-time'];
+
+    $userConfigDataUpdated->computationalResourceScheduling = $schedulingUpdated;
+    $experiment->userConfigurationData = $userConfigDataUpdated;
+
+
+
+
+    $applicationInputs = Utilities::get_application_inputs($experiment->applicationId);
+
+    $experimentInputs = $experiment->experimentInputs; // get current inputs
+    $experimentInputs = Utilities::process_inputs($applicationInputs, $experimentInputs); // get new inputs
+    
+    if ($experimentInputs)
+    {
+        $experiment->experimentInputs = $experimentInputs;
+        //var_dump($experiment);
+        return $experiment;
+    }
+}
+
+
+
+}
+
+?>


[09/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Pagination/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/composer.json b/vendor/laravel/framework/src/Illuminate/Pagination/composer.json
new file mode 100755
index 0000000..432459c
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Pagination/composer.json
@@ -0,0 +1,30 @@
+{
+    "name": "illuminate/pagination",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/http": "4.2.*",
+        "illuminate/support": "4.2.*",
+        "illuminate/view": "4.2.*",
+        "symfony/http-foundation": "2.5.*",
+        "symfony/translation": "2.5.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Pagination": ""
+        }
+    },
+    "target-dir": "Illuminate/Pagination",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Pagination/views/simple.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/views/simple.php b/vendor/laravel/framework/src/Illuminate/Pagination/views/simple.php
new file mode 100755
index 0000000..3a13482
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Pagination/views/simple.php
@@ -0,0 +1,15 @@
+<?php
+	$presenter = new Illuminate\Pagination\BootstrapPresenter($paginator);
+
+	$trans = $environment->getTranslator();
+?>
+
+<?php if ($paginator->getLastPage() > 1): ?>
+	<ul class="pager">
+		<?php
+			echo $presenter->getPrevious($trans->trans('pagination.previous'));
+
+			echo $presenter->getNext($trans->trans('pagination.next'));
+		?>
+	</ul>
+<?php endif; ?>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Pagination/views/slider-3.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/views/slider-3.php b/vendor/laravel/framework/src/Illuminate/Pagination/views/slider-3.php
new file mode 100755
index 0000000..5757e6c
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Pagination/views/slider-3.php
@@ -0,0 +1,9 @@
+<?php
+	$presenter = new Illuminate\Pagination\BootstrapPresenter($paginator);
+?>
+
+<?php if ($paginator->getLastPage() > 1): ?>
+	<ul class="pagination">
+			<?php echo $presenter->render(); ?>
+	</ul>
+<?php endif; ?>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Pagination/views/slider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/views/slider.php b/vendor/laravel/framework/src/Illuminate/Pagination/views/slider.php
new file mode 100755
index 0000000..2344162
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Pagination/views/slider.php
@@ -0,0 +1,11 @@
+<?php
+	$presenter = new Illuminate\Pagination\BootstrapPresenter($paginator);
+?>
+
+<?php if ($paginator->getLastPage() > 1): ?>
+	<div class="pagination">
+		<ul>
+			<?php echo $presenter->render(); ?>
+		</ul>
+	</div>
+<?php endif; ?>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/BeanstalkdQueue.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/BeanstalkdQueue.php b/vendor/laravel/framework/src/Illuminate/Queue/BeanstalkdQueue.php
new file mode 100755
index 0000000..0fe29f6
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/BeanstalkdQueue.php
@@ -0,0 +1,142 @@
+<?php namespace Illuminate\Queue;
+
+use Pheanstalk_Job;
+use Pheanstalk_Pheanstalk as Pheanstalk;
+use Illuminate\Queue\Jobs\BeanstalkdJob;
+
+class BeanstalkdQueue extends Queue implements QueueInterface {
+
+	/**
+	 * The Pheanstalk instance.
+	 *
+	 * @var \Pheanstalk_Pheanstalk
+	 */
+	protected $pheanstalk;
+
+	/**
+	 * The name of the default tube.
+	 *
+	 * @var string
+	 */
+	protected $default;
+
+	/**
+	 * The "time to run" for all pushed jobs.
+	 *
+	 * @var int
+	 */
+	protected $timeToRun;
+
+	/**
+	 * Create a new Beanstalkd queue instance.
+	 *
+	 * @param  \Pheanstalk_Pheanstalk  $pheanstalk
+	 * @param  string  $default
+	 * @param  int  $timeToRun
+	 * @return void
+	 */
+	public function __construct(Pheanstalk $pheanstalk, $default, $timeToRun)
+	{
+		$this->default = $default;
+		$this->timeToRun = $timeToRun;
+		$this->pheanstalk = $pheanstalk;
+	}
+
+	/**
+	 * Push a new job onto the queue.
+	 *
+	 * @param  string  $job
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @return mixed
+	 */
+	public function push($job, $data = '', $queue = null)
+	{
+		return $this->pushRaw($this->createPayload($job, $data), $queue);
+	}
+
+	/**
+	 * Push a raw payload onto the queue.
+	 *
+	 * @param  string  $payload
+	 * @param  string  $queue
+	 * @param  array   $options
+	 * @return mixed
+	 */
+	public function pushRaw($payload, $queue = null, array $options = array())
+	{
+		return $this->pheanstalk->useTube($this->getQueue($queue))->put(
+			$payload, Pheanstalk::DEFAULT_PRIORITY, Pheanstalk::DEFAULT_DELAY, $this->timeToRun
+		);
+	}
+
+	/**
+	 * Push a new job onto the queue after a delay.
+	 *
+	 * @param  \DateTime|int  $delay
+	 * @param  string  $job
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @return mixed
+	 */
+	public function later($delay, $job, $data = '', $queue = null)
+	{
+		$payload = $this->createPayload($job, $data);
+
+		$pheanstalk = $this->pheanstalk->useTube($this->getQueue($queue));
+
+		return $pheanstalk->put($payload, Pheanstalk::DEFAULT_PRIORITY, $this->getSeconds($delay), $this->timeToRun);
+	}
+
+	/**
+	 * Pop the next job off of the queue.
+	 *
+	 * @param  string  $queue
+	 * @return \Illuminate\Queue\Jobs\Job|null
+	 */
+	public function pop($queue = null)
+	{
+		$queue = $this->getQueue($queue);
+
+		$job = $this->pheanstalk->watchOnly($queue)->reserve(0);
+
+		if ($job instanceof Pheanstalk_Job)
+		{
+			return new BeanstalkdJob($this->container, $this->pheanstalk, $job, $queue);
+		}
+	}
+
+	/**
+	 * Delete a message from the Beanstalk queue.
+	 *
+	 * @param  string  $queue
+	 * @param  string  $id
+	 * @return void
+	 */
+	public function deleteMessage($queue, $id)
+	{
+		$this->pheanstalk->useTube($this->getQueue($queue))->delete($id);
+	}
+
+	/**
+	 * Get the queue or return the default.
+	 *
+	 * @param  string|null  $queue
+	 * @return string
+	 */
+	public function getQueue($queue)
+	{
+		return $queue ?: $this->default;
+	}
+
+	/**
+	 * Get the underlying Pheanstalk instance.
+	 *
+	 * @return \Pheanstalk_Pheanstalk
+	 */
+	public function getPheanstalk()
+	{
+		return $this->pheanstalk;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Capsule/Manager.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Capsule/Manager.php b/vendor/laravel/framework/src/Illuminate/Queue/Capsule/Manager.php
new file mode 100644
index 0000000..a182ede
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Capsule/Manager.php
@@ -0,0 +1,182 @@
+<?php namespace Illuminate\Queue\Capsule;
+
+use Illuminate\Queue\QueueManager;
+use Illuminate\Container\Container;
+use Illuminate\Queue\QueueServiceProvider;
+use Illuminate\Support\Traits\CapsuleManagerTrait;
+
+class Manager {
+
+	use CapsuleManagerTrait;
+
+	/**
+	 * The queue manager instance.
+	 *
+	 * @var \Illuminate\Queue\QueueManager
+	 */
+	protected $manager;
+
+	/**
+	 * Create a new queue capsule manager.
+	 *
+	 * @param  \Illuminate\Container\Container  $container
+	 * @return void
+	 */
+	public function __construct(Container $container = null)
+	{
+		$this->setupContainer($container);
+
+		// Once we have the container setup, we will setup the default configuration
+		// options in the container "config" bindings. This just makes this queue
+		// manager behave correctly since all the correct binding are in place.
+		$this->setupDefaultConfiguration();
+
+		$this->setupManager();
+
+		$this->registerConnectors();
+	}
+
+	/**
+	 * Setup the default queue configuration options.
+	 *
+	 * @return void
+	 */
+	protected function setupDefaultConfiguration()
+	{
+		$this->container['config']['queue.default'] = 'default';
+	}
+
+	/**
+	 * Build the queue manager instance.
+	 *
+	 * @return void
+	 */
+	protected function setupManager()
+	{
+		$this->manager = new QueueManager($this->container);
+	}
+
+	/**
+	 * Register the default connectors that the component ships with.
+	 *
+	 * @return void
+	 */
+	protected function registerConnectors()
+	{
+		$provider = new QueueServiceProvider($this->container);
+
+		$provider->registerConnectors($this->manager);
+	}
+
+	/**
+	 * Get a connection instance from the global manager.
+	 *
+	 * @param  string  $connection
+	 * @return \Illuminate\Queue\QueueInterface
+	 */
+	public static function connection($connection = null)
+	{
+		return static::$instance->getConnection($connection);
+	}
+
+	/**
+	 * Push a new job onto the queue.
+	 *
+	 * @param  string  $job
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @param  string  $connection
+	 * @return mixed
+	 */
+	public static function push($job, $data = '', $queue = null, $connection = null)
+	{
+		return static::$instance->connection($connection)->push($job, $data, $queue);
+	}
+
+	/**
+	 * Push a new an array of jobs onto the queue.
+	 *
+	 * @param  array   $jobs
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @param  string  $connection
+	 * @return mixed
+	 */
+	public static function bulk($jobs, $data = '', $queue = null, $connection = null)
+	{
+		return static::$instance->connection($connection)->bulk($jobs, $data, $queue);
+	}
+
+	/**
+	 * Push a new job onto the queue after a delay.
+	 *
+	 * @param  \DateTime|int  $delay
+	 * @param  string  $job
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @param  string  $connection
+	 * @return mixed
+	 */
+	public static function later($delay, $job, $data = '', $queue = null, $connection = null)
+	{
+		return static::$instance->connection($connection)->later($delay, $job, $data, $queue);
+	}
+
+	/**
+	 * Get a registered connection instance.
+	 *
+	 * @param  string  $name
+	 * @return \Illuminate\Queue\QueueInterface
+	 */
+	public function getConnection($name = null)
+	{
+		return $this->manager->connection($name);
+	}
+
+	/**
+	 * Register a connection with the manager.
+	 *
+	 * @param  array   $config
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function addConnection(array $config, $name = 'default')
+	{
+		$this->container['config']["queue.connections.{$name}"] = $config;
+	}
+
+	/**
+	 * Get the queue manager instance.
+	 *
+	 * @return \Illuminate\Queue\QueueManager
+	 */
+	public function getQueueManager()
+	{
+		return $this->manager;
+	}
+
+	/**
+	 * Pass dynamic instance methods to the manager.
+	 *
+	 * @param  string  $method
+	 * @param  array  $parameters
+	 * @return mixed
+	 */
+	public function __call($method, $parameters)
+	{
+		return call_user_func_array(array($this->manager, $method), $parameters);
+	}
+
+	/**
+	 * Dynamically pass methods to the default connection.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 */
+	public static function __callStatic($method, $parameters)
+	{
+		return call_user_func_array(array(static::connection(), $method), $parameters);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Connectors/BeanstalkdConnector.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/BeanstalkdConnector.php b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/BeanstalkdConnector.php
new file mode 100755
index 0000000..12607cd
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/BeanstalkdConnector.php
@@ -0,0 +1,24 @@
+<?php namespace Illuminate\Queue\Connectors;
+
+use Illuminate\Queue\BeanstalkdQueue;
+use Pheanstalk_Pheanstalk as Pheanstalk;
+use Pheanstalk_PheanstalkInterface as PheanstalkInterface;
+
+class BeanstalkdConnector implements ConnectorInterface {
+
+	/**
+	 * Establish a queue connection.
+	 *
+	 * @param  array  $config
+	 * @return \Illuminate\Queue\QueueInterface
+	 */
+	public function connect(array $config)
+	{
+		$pheanstalk = new Pheanstalk($config['host'], array_get($config, 'port', PheanstalkInterface::DEFAULT_PORT));
+
+		return new BeanstalkdQueue(
+			$pheanstalk, $config['queue'], array_get($config, 'ttr', Pheanstalk::DEFAULT_TTR)
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Connectors/ConnectorInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/ConnectorInterface.php b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/ConnectorInterface.php
new file mode 100755
index 0000000..e952833
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/ConnectorInterface.php
@@ -0,0 +1,13 @@
+<?php namespace Illuminate\Queue\Connectors;
+
+interface ConnectorInterface {
+
+	/**
+	 * Establish a queue connection.
+	 *
+	 * @param  array  $config
+	 * @return \Illuminate\Queue\QueueInterface
+	 */
+	public function connect(array $config);
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Connectors/IronConnector.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/IronConnector.php b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/IronConnector.php
new file mode 100755
index 0000000..071c657
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/IronConnector.php
@@ -0,0 +1,59 @@
+<?php namespace Illuminate\Queue\Connectors;
+
+use IronMQ;
+use Illuminate\Http\Request;
+use Illuminate\Queue\IronQueue;
+use Illuminate\Encryption\Encrypter;
+
+class IronConnector implements ConnectorInterface {
+
+	/**
+	 * The encrypter instance.
+	 *
+	 * @var \Illuminate\Encryption\Encrypter
+	 */
+	protected $crypt;
+
+	/**
+	 * The current request instance.
+	 *
+	 * @var \Illuminate\Http\Request
+	 */
+	protected $request;
+
+	/**
+	 * Create a new Iron connector instance.
+	 *
+	 * @param  \Illuminate\Encryption\Encrypter  $crypt
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return void
+	 */
+	public function __construct(Encrypter $crypt, Request $request)
+	{
+		$this->crypt = $crypt;
+		$this->request = $request;
+	}
+
+	/**
+	 * Establish a queue connection.
+	 *
+	 * @param  array  $config
+	 * @return \Illuminate\Queue\QueueInterface
+	 */
+	public function connect(array $config)
+	{
+		$ironConfig = array('token' => $config['token'], 'project_id' => $config['project']);
+
+		if (isset($config['host'])) $ironConfig['host'] = $config['host'];
+
+		$iron = new IronMQ($ironConfig);
+
+		if (isset($config['ssl_verifypeer']))
+		{
+			$iron->ssl_verifypeer = $config['ssl_verifypeer'];
+		}
+
+		return new IronQueue($iron, $this->request, $config['queue'], $config['encrypt']);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Connectors/RedisConnector.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/RedisConnector.php b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/RedisConnector.php
new file mode 100644
index 0000000..59821fd
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/RedisConnector.php
@@ -0,0 +1,52 @@
+<?php namespace Illuminate\Queue\Connectors;
+
+use Illuminate\Redis\Database;
+use Illuminate\Queue\RedisQueue;
+
+class RedisConnector implements ConnectorInterface {
+
+	/**
+	* The Redis database instance.
+	*
+	 * @var \Illuminate\Redis\Database
+	 */
+	protected $redis;
+
+	/**
+	 * The connection name.
+	 *
+	 * @var string
+	 */
+	protected $connection;
+
+	/**
+	 * Create a new Redis queue connector instance.
+	 *
+	 * @param  \Illuminate\Redis\Database  $redis
+	 * @param  string|null  $connection
+	 * @return void
+	 */
+	public function __construct(Database $redis, $connection = null)
+	{
+		$this->redis = $redis;
+		$this->connection = $connection;
+	}
+
+	/**
+	 * Establish a queue connection.
+	 *
+	 * @param  array  $config
+	 * @return \Illuminate\Queue\QueueInterface
+	 */
+	public function connect(array $config)
+	{
+		$queue = new RedisQueue(
+			$this->redis, $config['queue'], array_get($config, 'connection', $this->connection)
+		);
+
+		$queue->setExpire(array_get($config, 'expire', 60));
+
+		return $queue;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Connectors/SqsConnector.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/SqsConnector.php b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/SqsConnector.php
new file mode 100755
index 0000000..86aeeca
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/SqsConnector.php
@@ -0,0 +1,21 @@
+<?php namespace Illuminate\Queue\Connectors;
+
+use Aws\Sqs\SqsClient;
+use Illuminate\Queue\SqsQueue;
+
+class SqsConnector implements ConnectorInterface {
+
+	/**
+	 * Establish a queue connection.
+	 *
+	 * @param  array  $config
+	 * @return \Illuminate\Queue\QueueInterface
+	 */
+	public function connect(array $config)
+	{
+		$sqs = SqsClient::factory($config);
+
+		return new SqsQueue($sqs, $config['queue']);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Connectors/SyncConnector.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/SyncConnector.php b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/SyncConnector.php
new file mode 100755
index 0000000..1c3ae66
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/SyncConnector.php
@@ -0,0 +1,18 @@
+<?php namespace Illuminate\Queue\Connectors;
+
+use Illuminate\Queue\SyncQueue;
+
+class SyncConnector implements ConnectorInterface {
+
+	/**
+	 * Establish a queue connection.
+	 *
+	 * @param  array  $config
+	 * @return \Illuminate\Queue\QueueInterface
+	 */
+	public function connect(array $config)
+	{
+		return new SyncQueue;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Console/FailedTableCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/FailedTableCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/FailedTableCommand.php
new file mode 100644
index 0000000..0b485dd
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/FailedTableCommand.php
@@ -0,0 +1,70 @@
+<?php namespace Illuminate\Queue\Console;
+
+use Illuminate\Console\Command;
+use Illuminate\Filesystem\Filesystem;
+
+class FailedTableCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'queue:failed-table';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Create a migration for the failed queue jobs database table';
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * Create a new session table command instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @return void
+	 */
+	public function __construct(Filesystem $files)
+	{
+		parent::__construct();
+
+		$this->files = $files;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$fullPath = $this->createBaseMigration();
+
+		$this->files->put($fullPath, $this->files->get(__DIR__.'/stubs/failed_jobs.stub'));
+
+		$this->info('Migration created successfully!');
+	}
+
+	/**
+	 * Create a base migration file for the table.
+	 *
+	 * @return string
+	 */
+	protected function createBaseMigration()
+	{
+		$name = 'create_failed_jobs_table';
+
+		$path = $this->laravel['path'].'/database/migrations';
+
+		return $this->laravel['migration.creator']->create($name, $path);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Console/FlushFailedCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/FlushFailedCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/FlushFailedCommand.php
new file mode 100644
index 0000000..0ece99b
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/FlushFailedCommand.php
@@ -0,0 +1,33 @@
+<?php namespace Illuminate\Queue\Console;
+
+use Illuminate\Console\Command;
+
+class FlushFailedCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'queue:flush';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Flush all of the failed queue jobs';
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$this->laravel['queue.failer']->flush();
+
+		$this->info('All failed jobs deleted successfully!');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Console/ForgetFailedCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/ForgetFailedCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/ForgetFailedCommand.php
new file mode 100644
index 0000000..fef76f0
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/ForgetFailedCommand.php
@@ -0,0 +1,51 @@
+<?php namespace Illuminate\Queue\Console;
+
+use Illuminate\Console\Command;
+use Symfony\Component\Console\Input\InputArgument;
+
+class ForgetFailedCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'queue:forget';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Delete a failed queue job';
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		if ($this->laravel['queue.failer']->forget($this->argument('id')))
+		{
+			$this->info('Failed job deleted successfully!');
+		}
+		else
+		{
+			$this->error('No failed job matches the given ID.');
+		}
+	}
+
+	/**
+	 * Get the console command arguments.
+	 *
+	 * @return array
+	 */
+	protected function getArguments()
+	{
+		return array(
+			array('id', InputArgument::REQUIRED, 'The ID of the failed job'),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Console/ListFailedCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/ListFailedCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/ListFailedCommand.php
new file mode 100644
index 0000000..03bc411
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/ListFailedCommand.php
@@ -0,0 +1,62 @@
+<?php namespace Illuminate\Queue\Console;
+
+use Illuminate\Console\Command;
+
+class ListFailedCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'queue:failed';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'List all of the failed queue jobs';
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$rows = array();
+
+		foreach ($this->laravel['queue.failer']->all() as $failed)
+		{
+			$rows[] = $this->parseFailedJob((array) $failed);
+		}
+
+		if (count($rows) == 0)
+		{
+			return $this->info('No failed jobs!');
+		}
+
+		$table = $this->getHelperSet()->get('table');
+
+		$table->setHeaders(array('ID', 'Connection', 'Queue', 'Class', 'Failed At'))
+              ->setRows($rows)
+              ->render($this->output);
+	}
+
+	/**
+	 * Parse the failed job row.
+	 *
+	 * @param  array  $failed
+	 * @return array
+	 */
+	protected function parseFailedJob(array $failed)
+	{
+		$row = array_values(array_except($failed, array('payload')));
+
+		array_splice($row, 3, 0, array_get(json_decode($failed['payload'], true), 'job'));
+
+		return $row;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Console/ListenCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/ListenCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/ListenCommand.php
new file mode 100755
index 0000000..f138b3c
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/ListenCommand.php
@@ -0,0 +1,145 @@
+<?php namespace Illuminate\Queue\Console;
+
+use Illuminate\Queue\Listener;
+use Illuminate\Console\Command;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputArgument;
+
+class ListenCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'queue:listen';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Listen to a given queue';
+
+	/**
+	 * The queue listener instance.
+	 *
+	 * @var \Illuminate\Queue\Listener
+	 */
+	protected $listener;
+
+	/**
+	 * Create a new queue listen command.
+	 *
+	 * @param  \Illuminate\Queue\Listener  $listener
+	 * @return void
+	 */
+	public function __construct(Listener $listener)
+	{
+		parent::__construct();
+
+		$this->listener = $listener;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$this->setListenerOptions();
+
+		$delay = $this->input->getOption('delay');
+
+		// The memory limit is the amount of memory we will allow the script to occupy
+		// before killing it and letting a process manager restart it for us, which
+		// is to protect us against any memory leaks that will be in the scripts.
+		$memory = $this->input->getOption('memory');
+
+		$connection = $this->input->getArgument('connection');
+
+		$timeout = $this->input->getOption('timeout');
+
+		// We need to get the right queue for the connection which is set in the queue
+		// configuration file for the application. We will pull it based on the set
+		// connection being run for the queue operation currently being executed.
+		$queue = $this->getQueue($connection);
+
+		$this->listener->listen(
+			$connection, $queue, $delay, $memory, $timeout
+		);
+	}
+
+	/**
+	 * Get the name of the queue connection to listen on.
+	 *
+	 * @param  string  $connection
+	 * @return string
+	 */
+	protected function getQueue($connection)
+	{
+		if (is_null($connection))
+		{
+			$connection = $this->laravel['config']['queue.default'];
+		}
+
+		$queue = $this->laravel['config']->get("queue.connections.{$connection}.queue", 'default');
+
+		return $this->input->getOption('queue') ?: $queue;
+	}
+
+	/**
+	 * Set the options on the queue listener.
+	 *
+	 * @return void
+	 */
+	protected function setListenerOptions()
+	{
+		$this->listener->setEnvironment($this->laravel->environment());
+
+		$this->listener->setSleep($this->option('sleep'));
+
+		$this->listener->setMaxTries($this->option('tries'));
+
+		$this->listener->setOutputHandler(function($type, $line)
+		{
+			$this->output->write($line);
+		});
+	}
+
+	/**
+	 * Get the console command arguments.
+	 *
+	 * @return array
+	 */
+	protected function getArguments()
+	{
+		return array(
+			array('connection', InputArgument::OPTIONAL, 'The name of connection'),
+		);
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('queue', null, InputOption::VALUE_OPTIONAL, 'The queue to listen on', null),
+
+			array('delay', null, InputOption::VALUE_OPTIONAL, 'Amount of time to delay failed jobs', 0),
+
+			array('memory', null, InputOption::VALUE_OPTIONAL, 'The memory limit in megabytes', 128),
+
+			array('timeout', null, InputOption::VALUE_OPTIONAL, 'Seconds a job may run before timing out', 60),
+
+			array('sleep', null, InputOption::VALUE_OPTIONAL, 'Seconds to wait before checking queue for jobs', 3),
+
+			array('tries', null, InputOption::VALUE_OPTIONAL, 'Number of times to attempt a job before logging it failed', 0),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Console/RestartCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/RestartCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/RestartCommand.php
new file mode 100644
index 0000000..de02cd7
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/RestartCommand.php
@@ -0,0 +1,33 @@
+<?php namespace Illuminate\Queue\Console;
+
+use Illuminate\Console\Command;
+
+class RestartCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'queue:restart';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = "Restart queue worker daemons after their current job.";
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$this->laravel['cache']->forever('illuminate:queue:restart', time());
+
+		$this->info('Broadcasting queue restart signal.');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Console/RetryCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/RetryCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/RetryCommand.php
new file mode 100644
index 0000000..454b56d
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/RetryCommand.php
@@ -0,0 +1,74 @@
+<?php namespace Illuminate\Queue\Console;
+
+use Illuminate\Console\Command;
+use Symfony\Component\Console\Input\InputArgument;
+
+class RetryCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'queue:retry';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Retry a failed queue job';
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$failed = $this->laravel['queue.failer']->find($this->argument('id'));
+
+		if ( ! is_null($failed))
+		{
+			$failed->payload = $this->resetAttempts($failed->payload);
+
+			$this->laravel['queue']->connection($failed->connection)->pushRaw($failed->payload, $failed->queue);
+
+			$this->laravel['queue.failer']->forget($failed->id);
+
+			$this->info('The failed job has been pushed back onto the queue!');
+		}
+		else
+		{
+			$this->error('No failed job matches the given ID.');
+		}
+	}
+
+	/**
+	 * Reset the payload attempts.
+	 *
+	 * @param  string  $payload
+	 * @return string
+	 */
+	protected function resetAttempts($payload)
+	{
+		$payload = json_decode($payload, true);
+
+		if (isset($payload['attempts'])) $payload['attempts'] = 0;
+
+		return json_encode($payload);
+	}
+
+	/**
+	 * Get the console command arguments.
+	 *
+	 * @return array
+	 */
+	protected function getArguments()
+	{
+		return array(
+			array('id', InputArgument::REQUIRED, 'The ID of the failed job'),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Console/SubscribeCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/SubscribeCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/SubscribeCommand.php
new file mode 100755
index 0000000..89c4209
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/SubscribeCommand.php
@@ -0,0 +1,153 @@
+<?php namespace Illuminate\Queue\Console;
+
+use RuntimeException;
+use Illuminate\Queue\IronQueue;
+use Illuminate\Console\Command;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputArgument;
+
+class SubscribeCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'queue:subscribe';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Subscribe a URL to an Iron.io push queue';
+
+	/**
+	 * The queue meta information from Iron.io.
+	 *
+	 * @var object
+	 */
+	protected $meta;
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 *
+	 * @throws \RuntimeException
+	 */
+	public function fire()
+	{
+		$iron = $this->laravel['queue']->connection();
+
+		if ( ! $iron instanceof IronQueue)
+		{
+			throw new RuntimeException("Iron.io based queue must be default.");
+		}
+
+		$iron->getIron()->updateQueue($this->argument('queue'), $this->getQueueOptions());
+
+		$this->line('<info>Queue subscriber added:</info> <comment>'.$this->argument('url').'</comment>');
+	}
+
+	/**
+	 * Get the queue options.
+	 *
+	 * @return array
+	 */
+	protected function getQueueOptions()
+	{
+		return array(
+			'push_type' => $this->getPushType(), 'subscribers' => $this->getSubscriberList()
+		);
+	}
+
+	/**
+	 * Get the push type for the queue.
+	 *
+	 * @return string
+	 */
+	protected function getPushType()
+	{
+		if ($this->option('type')) return $this->option('type');
+
+		try
+		{
+			return $this->getQueue()->push_type;
+		}
+		catch (\Exception $e)
+		{
+			return 'multicast';
+		}
+	}
+
+	/**
+	 * Get the current subscribers for the queue.
+	 *
+	 * @return array
+	 */
+	protected function getSubscriberList()
+	{
+		$subscribers = $this->getCurrentSubscribers();
+
+		$subscribers[] = array('url' => $this->argument('url'));
+
+		return $subscribers;
+	}
+
+	/**
+	 * Get the current subscriber list.
+	 *
+	 * @return array
+	 */
+	protected function getCurrentSubscribers()
+	{
+		try
+		{
+			return $this->getQueue()->subscribers;
+		}
+		catch (\Exception $e)
+		{
+			return array();
+		}
+	}
+
+	/**
+	 * Get the queue information from Iron.io.
+	 *
+	 * @return object
+	 */
+	protected function getQueue()
+	{
+		if (isset($this->meta)) return $this->meta;
+
+		return $this->meta = $this->laravel['queue']->getIron()->getQueue($this->argument('queue'));
+	}
+
+	/**
+	 * Get the console command arguments.
+	 *
+	 * @return array
+	 */
+	protected function getArguments()
+	{
+		return array(
+			array('queue', InputArgument::REQUIRED, 'The name of Iron.io queue.'),
+
+			array('url', InputArgument::REQUIRED, 'The URL to be subscribed.'),
+		);
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('type', null, InputOption::VALUE_OPTIONAL, 'The push type for the queue.'),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php
new file mode 100755
index 0000000..859cc63
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php
@@ -0,0 +1,175 @@
+<?php namespace Illuminate\Queue\Console;
+
+use Illuminate\Queue\Worker;
+use Illuminate\Queue\Jobs\Job;
+use Illuminate\Console\Command;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputArgument;
+
+class WorkCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'queue:work';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Process the next job on a queue';
+
+	/**
+	 * The queue worker instance.
+	 *
+	 * @var \Illuminate\Queue\Worker
+	 */
+	protected $worker;
+
+	/**
+	 * Create a new queue listen command.
+	 *
+	 * @param  \Illuminate\Queue\Worker  $worker
+	 * @return void
+	 */
+	public function __construct(Worker $worker)
+	{
+		parent::__construct();
+
+		$this->worker = $worker;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		if ($this->downForMaintenance() && ! $this->option('daemon')) return;
+
+		$queue = $this->option('queue');
+
+		$delay = $this->option('delay');
+
+		// The memory limit is the amount of memory we will allow the script to occupy
+		// before killing it and letting a process manager restart it for us, which
+		// is to protect us against any memory leaks that will be in the scripts.
+		$memory = $this->option('memory');
+
+		$connection = $this->argument('connection');
+
+		$response = $this->runWorker(
+			$connection, $queue, $delay, $memory, $this->option('daemon')
+		);
+
+		// If a job was fired by the worker, we'll write the output out to the console
+		// so that the developer can watch live while the queue runs in the console
+		// window, which will also of get logged if stdout is logged out to disk.
+		if ( ! is_null($response['job']))
+		{
+			$this->writeOutput($response['job'], $response['failed']);
+		}
+	}
+
+	/**
+	 * Run the worker instance.
+	 *
+	 * @param  string  $connection
+	 * @param  string  $queue
+	 * @param  int  $delay
+	 * @param  int  $memory
+	 * @param  bool  $daemon
+	 * @return array
+	 */
+	protected function runWorker($connection, $queue, $delay, $memory, $daemon = false)
+	{
+		if ($daemon)
+		{
+			$this->worker->setCache($this->laravel['cache']->driver());
+
+			$this->worker->setDaemonExceptionHandler($this->laravel['exception']);
+
+			return $this->worker->daemon(
+				$connection, $queue, $delay, $memory,
+				$this->option('sleep'), $this->option('tries')
+			);
+		}
+
+		return $this->worker->pop(
+			$connection, $queue, $delay,
+			$this->option('sleep'), $this->option('tries')
+		);
+	}
+
+	/**
+	 * Write the status output for the queue worker.
+	 *
+	 * @param  \Illuminate\Queue\Jobs\Job  $job
+	 * @param  bool  $failed
+	 * @return void
+	 */
+	protected function writeOutput(Job $job, $failed)
+	{
+		if ($failed)
+		{
+			$this->output->writeln('<error>Failed:</error> '.$job->getName());
+		}
+		else
+		{
+			$this->output->writeln('<info>Processed:</info> '.$job->getName());
+		}
+	}
+
+	/**
+	 * Determine if the worker should run in maintenance mode.
+	 *
+	 * @return bool
+	 */
+	protected function downForMaintenance()
+	{
+		if ($this->option('force')) return false;
+
+		return $this->laravel->isDownForMaintenance();
+	}
+
+	/**
+	 * Get the console command arguments.
+	 *
+	 * @return array
+	 */
+	protected function getArguments()
+	{
+		return array(
+			array('connection', InputArgument::OPTIONAL, 'The name of connection', null),
+		);
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('queue', null, InputOption::VALUE_OPTIONAL, 'The queue to listen on'),
+
+			array('daemon', null, InputOption::VALUE_NONE, 'Run the worker in daemon mode'),
+
+			array('delay', null, InputOption::VALUE_OPTIONAL, 'Amount of time to delay failed jobs', 0),
+
+			array('force', null, InputOption::VALUE_NONE, 'Force the worker to run even in maintenance mode'),
+
+			array('memory', null, InputOption::VALUE_OPTIONAL, 'The memory limit in megabytes', 128),
+
+			array('sleep', null, InputOption::VALUE_OPTIONAL, 'Number of seconds to sleep when no job is available', 3),
+
+			array('tries', null, InputOption::VALUE_OPTIONAL, 'Number of times to attempt a job before logging it failed', 0),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Console/stubs/failed_jobs.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/stubs/failed_jobs.stub b/vendor/laravel/framework/src/Illuminate/Queue/Console/stubs/failed_jobs.stub
new file mode 100644
index 0000000..61efc17
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/stubs/failed_jobs.stub
@@ -0,0 +1,35 @@
+<?php
+
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreateFailedJobsTable extends Migration {
+
+	/**
+	 * Run the migrations.
+	 *
+	 * @return void
+	 */
+	public function up()
+	{
+		Schema::create('failed_jobs', function(Blueprint $table)
+		{
+			$table->increments('id');
+			$table->text('connection');
+			$table->text('queue');
+			$table->text('payload');
+			$table->timestamp('failed_at');
+		});
+	}
+
+	/**
+	 * Reverse the migrations.
+	 *
+	 * @return void
+	 */
+	public function down()
+	{
+		Schema::drop('failed_jobs');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/FailConsoleServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/FailConsoleServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Queue/FailConsoleServiceProvider.php
new file mode 100644
index 0000000..6551877
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/FailConsoleServiceProvider.php
@@ -0,0 +1,69 @@
+<?php namespace Illuminate\Queue;
+
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Queue\Console\RetryCommand;
+use Illuminate\Queue\Console\ListFailedCommand;
+use Illuminate\Queue\Console\FlushFailedCommand;
+use Illuminate\Queue\Console\FailedTableCommand;
+use Illuminate\Queue\Console\ForgetFailedCommand;
+
+class FailConsoleServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('command.queue.failed', function()
+		{
+			return new ListFailedCommand;
+		});
+
+		$this->app->bindShared('command.queue.retry', function()
+		{
+			return new RetryCommand;
+		});
+
+		$this->app->bindShared('command.queue.forget', function()
+		{
+			return new ForgetFailedCommand;
+		});
+
+		$this->app->bindShared('command.queue.flush', function()
+		{
+			return new FlushFailedCommand;
+		});
+
+		$this->app->bindShared('command.queue.failed-table', function($app)
+		{
+			return new FailedTableCommand($app['files']);
+		});
+
+		$this->commands(
+			'command.queue.failed', 'command.queue.retry', 'command.queue.forget',
+			'command.queue.flush', 'command.queue.failed-table'
+		);
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array(
+			'command.queue.failed', 'command.queue.retry', 'command.queue.forget', 'command.queue.flush', 'command.queue.failed-table',
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Failed/DatabaseFailedJobProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Failed/DatabaseFailedJobProvider.php b/vendor/laravel/framework/src/Illuminate/Queue/Failed/DatabaseFailedJobProvider.php
new file mode 100644
index 0000000..1fbf6f1
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Failed/DatabaseFailedJobProvider.php
@@ -0,0 +1,111 @@
+<?php namespace Illuminate\Queue\Failed;
+
+use Carbon\Carbon;
+use Illuminate\Database\ConnectionResolverInterface;
+
+class DatabaseFailedJobProvider implements FailedJobProviderInterface {
+
+	/**
+	 * The connection resolver implementation.
+	 *
+	 * @var \Illuminate\Database\ConnectionResolverInterface
+	 */
+	protected $resolver;
+
+	/**
+	 * The database connection name.
+	 *
+	 * @var string
+	 */
+	protected $database;
+
+	/**
+	 * The database table.
+	 *
+	 * @var string
+	 */
+	protected $table;
+
+	/**
+	 * Create a new database failed job provider.
+	 *
+	 * @param  \Illuminate\Database\ConnectionResolverInterface  $resolver
+	 * @param  string  $database
+	 * @param  string  $table
+	 * @return void
+	 */
+	public function __construct(ConnectionResolverInterface $resolver, $database, $table)
+	{
+		$this->table = $table;
+		$this->resolver = $resolver;
+		$this->database = $database;
+	}
+
+	/**
+	 * Log a failed job into storage.
+	 *
+	 * @param  string  $connection
+	 * @param  string  $queue
+	 * @param  string  $payload
+	 * @return void
+	 */
+	public function log($connection, $queue, $payload)
+	{
+		$failed_at = Carbon::now();
+
+		$this->getTable()->insert(compact('connection', 'queue', 'payload', 'failed_at'));
+	}
+
+	/**
+	 * Get a list of all of the failed jobs.
+	 *
+	 * @return array
+	 */
+	public function all()
+	{
+		return $this->getTable()->orderBy('id', 'desc')->get();
+	}
+
+	/**
+	 * Get a single failed job.
+	 *
+	 * @param  mixed  $id
+	 * @return array
+	 */
+	public function find($id)
+	{
+		return $this->getTable()->find($id);
+	}
+
+	/**
+	 * Delete a single failed job from storage.
+	 *
+	 * @param  mixed  $id
+	 * @return bool
+	 */
+	public function forget($id)
+	{
+		return $this->getTable()->where('id', $id)->delete() > 0;
+	}
+
+	/**
+	 * Flush all of the failed jobs from storage.
+	 *
+	 * @return void
+	 */
+	public function flush()
+	{
+		$this->getTable()->delete();
+	}
+
+	/**
+	 * Get a new query builder instance for the table.
+	 *
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	protected function getTable()
+	{
+		return $this->resolver->connection($this->database)->table($this->table);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Failed/FailedJobProviderInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Failed/FailedJobProviderInterface.php b/vendor/laravel/framework/src/Illuminate/Queue/Failed/FailedJobProviderInterface.php
new file mode 100644
index 0000000..7db652e
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Failed/FailedJobProviderInterface.php
@@ -0,0 +1,45 @@
+<?php namespace Illuminate\Queue\Failed;
+
+interface FailedJobProviderInterface {
+
+	/**
+	 * Log a failed job into storage.
+	 *
+	 * @param  string  $connection
+	 * @param  string  $queue
+	 * @param  string  $payload
+	 * @return void
+	 */
+	public function log($connection, $queue, $payload);
+
+	/**
+	 * Get a list of all of the failed jobs.
+	 *
+	 * @return array
+	 */
+	public function all();
+
+	/**
+	 * Get a single failed job.
+	 *
+	 * @param  mixed  $id
+	 * @return array
+	 */
+	public function find($id);
+
+	/**
+	 * Delete a single failed job from storage.
+	 *
+	 * @param  mixed  $id
+	 * @return bool
+	 */
+	public function forget($id);
+
+	/**
+	 * Flush all of the failed jobs from storage.
+	 *
+	 * @return void
+	 */
+	public function flush();
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/IlluminateQueueClosure.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/IlluminateQueueClosure.php b/vendor/laravel/framework/src/Illuminate/Queue/IlluminateQueueClosure.php
new file mode 100755
index 0000000..21056c6
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/IlluminateQueueClosure.php
@@ -0,0 +1,39 @@
+<?php
+
+use Illuminate\Encryption\Encrypter;
+
+class IlluminateQueueClosure {
+
+	/**
+	 * The encrypter instance.
+	 *
+	 * @var \Illuminate\Encryption\Encrypter  $crypt
+	 */
+	protected $crypt;
+
+	/**
+	 * Create a new queued Closure job.
+	 *
+	 * @param  \Illuminate\Encryption\Encrypter  $crypt
+	 * @return void
+	 */
+	public function __construct(Encrypter $crypt)
+	{
+		$this->crypt = $crypt;
+	}
+
+	/**
+	 * Fire the Closure based queue job.
+	 *
+	 * @param  \Illuminate\Queue\Jobs\Job  $job
+	 * @param  array  $data
+	 * @return void
+	 */
+	public function fire($job, $data)
+	{
+		$closure = unserialize($this->crypt->decrypt($data['closure']));
+
+		$closure($job);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/IronQueue.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/IronQueue.php b/vendor/laravel/framework/src/Illuminate/Queue/IronQueue.php
new file mode 100755
index 0000000..1c05b3a
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/IronQueue.php
@@ -0,0 +1,258 @@
+<?php namespace Illuminate\Queue;
+
+use IronMQ;
+use Illuminate\Http\Request;
+use Illuminate\Http\Response;
+use Illuminate\Queue\Jobs\IronJob;
+
+class IronQueue extends Queue implements QueueInterface {
+
+	/**
+	 * The IronMQ instance.
+	 *
+	 * @var IronMQ
+	 */
+	protected $iron;
+
+	/**
+	 * The current request instance.
+	 *
+	 * @var \Illuminate\Http\Request
+	 */
+	protected $request;
+
+	/**
+	 * The name of the default tube.
+	 *
+	 * @var string
+	 */
+	protected $default;
+
+	/**
+	 * Indicates if the messages should be encrypted.
+	 *
+	 * @var bool
+	 */
+	protected $shouldEncrypt;
+
+	/**
+	 * Create a new IronMQ queue instance.
+	 *
+	 * @param  \IronMQ  $iron
+	 * @param  \Illuminate\Http\Request  $request
+	 * @param  string  $default
+	 * @param  bool  $shouldEncrypt
+	 * @return void
+	 */
+	public function __construct(IronMQ $iron, Request $request, $default, $shouldEncrypt = false)
+	{
+		$this->iron = $iron;
+		$this->request = $request;
+		$this->default = $default;
+		$this->shouldEncrypt = $shouldEncrypt;
+	}
+
+	/**
+	 * Push a new job onto the queue.
+	 *
+	 * @param  string  $job
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @return mixed
+	 */
+	public function push($job, $data = '', $queue = null)
+	{
+		return $this->pushRaw($this->createPayload($job, $data, $queue), $queue);
+	}
+
+	/**
+	 * Push a raw payload onto the queue.
+	 *
+	 * @param  string  $payload
+	 * @param  string  $queue
+	 * @param  array   $options
+	 * @return mixed
+	 */
+	public function pushRaw($payload, $queue = null, array $options = array())
+	{
+		if ($this->shouldEncrypt) $payload = $this->crypt->encrypt($payload);
+
+		return $this->iron->postMessage($this->getQueue($queue), $payload, $options)->id;
+	}
+
+	/**
+	 * Push a raw payload onto the queue after encrypting the payload.
+	 *
+	 * @param  string  $payload
+	 * @param  string  $queue
+	 * @param  int     $delay
+	 * @return mixed
+	 */
+	public function recreate($payload, $queue = null, $delay)
+	{
+		$options = array('delay' => $this->getSeconds($delay));
+
+		return $this->pushRaw($payload, $queue, $options);
+	}
+
+	/**
+	 * Push a new job onto the queue after a delay.
+	 *
+	 * @param  \DateTime|int  $delay
+	 * @param  string  $job
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @return mixed
+	 */
+	public function later($delay, $job, $data = '', $queue = null)
+	{
+		$delay = $this->getSeconds($delay);
+
+		$payload = $this->createPayload($job, $data, $queue);
+
+		return $this->pushRaw($payload, $queue, compact('delay'));
+	}
+
+	/**
+	 * Pop the next job off of the queue.
+	 *
+	 * @param  string  $queue
+	 * @return \Illuminate\Queue\Jobs\Job|null
+	 */
+	public function pop($queue = null)
+	{
+		$queue = $this->getQueue($queue);
+
+		$job = $this->iron->getMessage($queue);
+
+		// If we were able to pop a message off of the queue, we will need to decrypt
+		// the message body, as all Iron.io messages are encrypted, since the push
+		// queues will be a security hazard to unsuspecting developers using it.
+		if ( ! is_null($job))
+		{
+			$job->body = $this->parseJobBody($job->body);
+
+			return new IronJob($this->container, $this, $job);
+		}
+	}
+
+	/**
+	 * Delete a message from the Iron queue.
+	 *
+	 * @param  string  $queue
+	 * @param  string  $id
+	 * @return void
+	 */
+	public function deleteMessage($queue, $id)
+	{
+		$this->iron->deleteMessage($queue, $id);
+	}
+
+	/**
+	 * Marshal a push queue request and fire the job.
+	 *
+	 * @return \Illuminate\Http\Response
+	 */
+	public function marshal()
+	{
+		$this->createPushedIronJob($this->marshalPushedJob())->fire();
+
+		return new Response('OK');
+	}
+
+	/**
+	 * Marshal out the pushed job and payload.
+	 *
+	 * @return object
+	 */
+	protected function marshalPushedJob()
+	{
+		$r = $this->request;
+
+		$body = $this->parseJobBody($r->getContent());
+
+		return (object) array(
+			'id' => $r->header('iron-message-id'), 'body' => $body, 'pushed' => true,
+		);
+	}
+
+	/**
+	 * Create a new IronJob for a pushed job.
+	 *
+	 * @param  object  $job
+	 * @return \Illuminate\Queue\Jobs\IronJob
+	 */
+	protected function createPushedIronJob($job)
+	{
+		return new IronJob($this->container, $this, $job, true);
+	}
+
+	/**
+	 * Create a payload string from the given job and data.
+	 *
+	 * @param  string  $job
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @return string
+	 */
+	protected function createPayload($job, $data = '', $queue = null)
+	{
+		$payload = $this->setMeta(parent::createPayload($job, $data), 'attempts', 1);
+
+		return $this->setMeta($payload, 'queue', $this->getQueue($queue));
+	}
+
+	/**
+	 * Parse the job body for firing.
+	 *
+	 * @param  string  $body
+	 * @return string
+	 */
+	protected function parseJobBody($body)
+	{
+		return $this->shouldEncrypt ? $this->crypt->decrypt($body) : $body;
+	}
+
+	/**
+	 * Get the queue or return the default.
+	 *
+	 * @param  string|null  $queue
+	 * @return string
+	 */
+	public function getQueue($queue)
+	{
+		return $queue ?: $this->default;
+	}
+
+	/**
+	 * Get the underlying IronMQ instance.
+	 *
+	 * @return \IronMQ
+	 */
+	public function getIron()
+	{
+		return $this->iron;
+	}
+
+	/**
+	 * Get the request instance.
+	 *
+	 * @return \Symfony\Component\HttpFoundation\Request
+	 */
+	public function getRequest()
+	{
+		return $this->request;
+	}
+
+	/**
+	 * Set the request instance.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @return void
+	 */
+	public function setRequest(Request $request)
+	{
+		$this->request = $request;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Jobs/BeanstalkdJob.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/BeanstalkdJob.php b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/BeanstalkdJob.php
new file mode 100755
index 0000000..2ae99dc
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/BeanstalkdJob.php
@@ -0,0 +1,150 @@
+<?php namespace Illuminate\Queue\Jobs;
+
+use Pheanstalk_Job;
+use Illuminate\Container\Container;
+use Pheanstalk_Pheanstalk as Pheanstalk;
+
+class BeanstalkdJob extends Job {
+
+	/**
+	 * The Pheanstalk instance.
+	 *
+	 * @var \Pheanstalk_Pheanstalk
+	 */
+	protected $pheanstalk;
+
+	/**
+	 * The Pheanstalk job instance.
+	 *
+	 * @var \Pheanstalk_Job
+	 */
+	protected $job;
+
+	/**
+	 * Create a new job instance.
+	 *
+	 * @param  \Illuminate\Container\Container  $container
+	 * @param  \Pheanstalk_Pheanstalk  $pheanstalk
+	 * @param  \Pheanstalk_Job  $job
+	 * @param  string  $queue
+	 * @return void
+	 */
+	public function __construct(Container $container,
+                                Pheanstalk $pheanstalk,
+                                Pheanstalk_Job $job,
+                                $queue)
+	{
+		$this->job = $job;
+		$this->queue = $queue;
+		$this->container = $container;
+		$this->pheanstalk = $pheanstalk;
+	}
+
+	/**
+	 * Fire the job.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$this->resolveAndFire(json_decode($this->getRawBody(), true));
+	}
+
+	/**
+	 * Get the raw body string for the job.
+	 *
+	 * @return string
+	 */
+	public function getRawBody()
+	{
+		return $this->job->getData();
+	}
+
+	/**
+	 * Delete the job from the queue.
+	 *
+	 * @return void
+	 */
+	public function delete()
+	{
+		parent::delete();
+
+		$this->pheanstalk->delete($this->job);
+	}
+
+	/**
+	 * Release the job back into the queue.
+	 *
+	 * @param  int   $delay
+	 * @return void
+	 */
+	public function release($delay = 0)
+	{
+		$priority = Pheanstalk::DEFAULT_PRIORITY;
+
+		$this->pheanstalk->release($this->job, $priority, $delay);
+	}
+
+	/**
+	 * Bury the job in the queue.
+	 *
+	 * @return void
+	 */
+	public function bury()
+	{
+		$this->pheanstalk->bury($this->job);
+	}
+
+	/**
+	 * Get the number of times the job has been attempted.
+	 *
+	 * @return int
+	 */
+	public function attempts()
+	{
+		$stats = $this->pheanstalk->statsJob($this->job);
+
+		return (int) $stats->reserves;
+	}
+
+	/**
+	 * Get the job identifier.
+	 *
+	 * @return string
+	 */
+	public function getJobId()
+	{
+		return $this->job->getId();
+	}
+
+	/**
+	 * Get the IoC container instance.
+	 *
+	 * @return \Illuminate\Container\Container
+	 */
+	public function getContainer()
+	{
+		return $this->container;
+	}
+
+	/**
+	 * Get the underlying Pheanstalk instance.
+	 *
+	 * @return \Pheanstalk_Pheanstalk
+	 */
+	public function getPheanstalk()
+	{
+		return $this->pheanstalk;
+	}
+
+	/**
+	 * Get the underlying Pheanstalk job.
+	 *
+	 * @return \Pheanstalk_Job
+	 */
+	public function getPheanstalkJob()
+	{
+		return $this->job;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Jobs/IronJob.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/IronJob.php b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/IronJob.php
new file mode 100755
index 0000000..2265768
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/IronJob.php
@@ -0,0 +1,171 @@
+<?php namespace Illuminate\Queue\Jobs;
+
+use Illuminate\Queue\IronQueue;
+use Illuminate\Container\Container;
+
+class IronJob extends Job {
+
+	/**
+	 * The Iron queue instance.
+	 *
+	 * @var \Illuminate\Queue\IronQueue
+	 */
+	protected $iron;
+
+	/**
+	 * The IronMQ message instance.
+	 *
+	 * @var object
+	 */
+	protected $job;
+
+	/**
+	 * Indicates if the message was a push message.
+	 *
+	 * @var bool
+	 */
+	protected $pushed = false;
+
+	/**
+	 * Create a new job instance.
+	 *
+	 * @param  \Illuminate\Container\Container  $container
+	 * @param  \Illuminate\Queue\IronQueue  $iron
+	 * @param  object  $job
+	 * @param  bool    $pushed
+	 * @return void
+	 */
+	public function __construct(Container $container,
+                                IronQueue $iron,
+                                $job,
+                                $pushed = false)
+	{
+		$this->job = $job;
+		$this->iron = $iron;
+		$this->pushed = $pushed;
+		$this->container = $container;
+	}
+
+	/**
+	 * Fire the job.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$this->resolveAndFire(json_decode($this->getRawBody(), true));
+	}
+
+	/**
+	 * Get the raw body string for the job.
+	 *
+	 * @return string
+	 */
+	public function getRawBody()
+	{
+		return $this->job->body;
+	}
+
+	/**
+	 * Delete the job from the queue.
+	 *
+	 * @return void
+	 */
+	public function delete()
+	{
+		parent::delete();
+
+		if (isset($this->job->pushed)) return;
+
+		$this->iron->deleteMessage($this->getQueue(), $this->job->id);
+	}
+
+	/**
+	 * Release the job back into the queue.
+	 *
+	 * @param  int   $delay
+	 * @return void
+	 */
+	public function release($delay = 0)
+	{
+		if ( ! $this->pushed) $this->delete();
+
+		$this->recreateJob($delay);
+	}
+
+	/**
+	 * Release a pushed job back onto the queue.
+	 *
+	 * @param  int  $delay
+	 * @return void
+	 */
+	protected function recreateJob($delay)
+	{
+		$payload = json_decode($this->job->body, true);
+
+		array_set($payload, 'attempts', array_get($payload, 'attempts', 1) + 1);
+
+		$this->iron->recreate(json_encode($payload), $this->getQueue(), $delay);
+	}
+
+	/**
+	 * Get the number of times the job has been attempted.
+	 *
+	 * @return int
+	 */
+	public function attempts()
+	{
+		return array_get(json_decode($this->job->body, true), 'attempts', 1);
+	}
+
+	/**
+	 * Get the job identifier.
+	 *
+	 * @return string
+	 */
+	public function getJobId()
+	{
+		return $this->job->id;
+	}
+
+	/**
+	 * Get the IoC container instance.
+	 *
+	 * @return \Illuminate\Container\Container
+	 */
+	public function getContainer()
+	{
+		return $this->container;
+	}
+
+	/**
+	 * Get the underlying Iron queue instance.
+	 *
+	 * @return \Illuminate\Queue\IronQueue
+	 */
+	public function getIron()
+	{
+		return $this->iron;
+	}
+
+	/**
+	 * Get the underlying IronMQ job.
+	 *
+	 * @return array
+	 */
+	public function getIronJob()
+	{
+		return $this->job;
+	}
+
+	/**
+	 * Get the name of the queue the job belongs to.
+	 *
+	 * @return string
+	 */
+	public function getQueue()
+	{
+		return array_get(json_decode($this->job->body, true), 'queue');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php
new file mode 100755
index 0000000..89bde25
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php
@@ -0,0 +1,179 @@
+<?php namespace Illuminate\Queue\Jobs;
+
+use DateTime;
+
+abstract class Job {
+
+	/**
+	 * The job handler instance.
+	 *
+	 * @var mixed
+	 */
+	protected $instance;
+
+	/**
+	 * The IoC container instance.
+	 *
+	 * @var \Illuminate\Container\Container
+	 */
+	protected $container;
+
+	/**
+	 * The name of the queue the job belongs to.
+	 *
+	 * @var string
+	 */
+	protected $queue;
+
+	/**
+	 * Indicates if the job has been deleted.
+	 *
+	 * @var bool
+	 */
+	protected $deleted = false;
+
+	/**
+	 * Fire the job.
+	 *
+	 * @return void
+	 */
+	abstract public function fire();
+
+	/**
+	 * Delete the job from the queue.
+	 *
+	 * @return void
+	 */
+	public function delete()
+	{
+		$this->deleted = true;
+	}
+
+	/**
+	 * Determine if the job has been deleted.
+	 *
+	 * @return bool
+	 */
+	public function isDeleted()
+	{
+		return $this->deleted;
+	}
+
+	/**
+	 * Release the job back into the queue.
+	 *
+	 * @param  int   $delay
+	 * @return void
+	 */
+	abstract public function release($delay = 0);
+
+	/**
+	 * Get the number of times the job has been attempted.
+	 *
+	 * @return int
+	 */
+	abstract public function attempts();
+
+	/**
+	 * Get the raw body string for the job.
+	 *
+	 * @return string
+	 */
+	abstract public function getRawBody();
+
+	/**
+	 * Resolve and fire the job handler method.
+	 *
+	 * @param  array  $payload
+	 * @return void
+	 */
+	protected function resolveAndFire(array $payload)
+	{
+		list($class, $method) = $this->parseJob($payload['job']);
+
+		$this->instance = $this->resolve($class);
+
+		$this->instance->{$method}($this, $payload['data']);
+	}
+
+	/**
+	 * Resolve the given job handler.
+	 *
+	 * @param  string  $class
+	 * @return mixed
+	 */
+	protected function resolve($class)
+	{
+		return $this->container->make($class);
+	}
+
+	/**
+	 * Parse the job declaration into class and method.
+	 *
+	 * @param  string  $job
+	 * @return array
+	 */
+	protected function parseJob($job)
+	{
+		$segments = explode('@', $job);
+
+		return count($segments) > 1 ? $segments : array($segments[0], 'fire');
+	}
+
+	/**
+	 * Determine if job should be auto-deleted.
+	 *
+	 * @return bool
+	 */
+	public function autoDelete()
+	{
+		return isset($this->instance->delete);
+	}
+
+	/**
+	 * Calculate the number of seconds with the given delay.
+	 *
+	 * @param  \DateTime|int  $delay
+	 * @return int
+	 */
+	protected function getSeconds($delay)
+	{
+		if ($delay instanceof DateTime)
+		{
+			return max(0, $delay->getTimestamp() - $this->getTime());
+		}
+
+		return (int) $delay;
+	}
+
+	/**
+	 * Get the current system time.
+	 *
+	 * @return int
+	 */
+	protected function getTime()
+	{
+		return time();
+	}
+
+	/**
+	 * Get the name of the queued job class.
+	 *
+	 * @return string
+	 */
+	public function getName()
+	{
+		return json_decode($this->getRawBody(), true)['job'];
+	}
+
+	/**
+	 * Get the name of the queue the job belongs to.
+	 *
+	 * @return string
+	 */
+	public function getQueue()
+	{
+		return $this->queue;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Jobs/RedisJob.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/RedisJob.php b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/RedisJob.php
new file mode 100644
index 0000000..93fba74
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/RedisJob.php
@@ -0,0 +1,134 @@
+<?php namespace Illuminate\Queue\Jobs;
+
+use Illuminate\Queue\RedisQueue;
+use Illuminate\Container\Container;
+
+class RedisJob extends Job {
+
+	/**
+	 * The Redis queue instance.
+	 *
+	 * @var \Illuminate\Queue\RedisQueue
+	 */
+	protected $redis;
+
+	/**
+	 * The Redis job payload.
+	 *
+	 * @var string
+	 */
+	protected $job;
+
+	/**
+	 * Create a new job instance.
+	 *
+	 * @param  \Illuminate\Container\Container  $container
+	 * @param  \Illuminate\Queue\RedisQueue  $redis
+	 * @param  string  $job
+	 * @param  string  $queue
+	 * @return void
+	 */
+	public function __construct(Container $container, RedisQueue $redis, $job, $queue)
+	{
+		$this->job = $job;
+		$this->redis = $redis;
+		$this->queue = $queue;
+		$this->container = $container;
+	}
+
+	/**
+	 * Fire the job.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$this->resolveAndFire(json_decode($this->getRawBody(), true));
+	}
+
+	/**
+	 * Get the raw body string for the job.
+	 *
+	 * @return string
+	 */
+	public function getRawBody()
+	{
+		return $this->job;
+	}
+
+	/**
+	 * Delete the job from the queue.
+	 *
+	 * @return void
+	 */
+	public function delete()
+	{
+		parent::delete();
+
+		$this->redis->deleteReserved($this->queue, $this->job);
+	}
+
+	/**
+	 * Release the job back into the queue.
+	 *
+	 * @param  int   $delay
+	 * @return void
+	 */
+	public function release($delay = 0)
+	{
+		$this->delete();
+
+		$this->redis->release($this->queue, $this->job, $delay, $this->attempts() + 1);
+	}
+
+	/**
+	 * Get the number of times the job has been attempted.
+	 *
+	 * @return int
+	 */
+	public function attempts()
+	{
+		return array_get(json_decode($this->job, true), 'attempts');
+	}
+
+	/**
+	 * Get the job identifier.
+	 *
+	 * @return string
+	 */
+	public function getJobId()
+	{
+		return array_get(json_decode($this->job, true), 'id');
+	}
+
+	/**
+	 * Get the IoC container instance.
+	 *
+	 * @return \Illuminate\Container\Container
+	 */
+	public function getContainer()
+	{
+		return $this->container;
+	}
+
+	/**
+	 * Get the underlying queue driver instance.
+	 *
+	 * @return \Illuminate\Redis\Database
+	 */
+	public function getRedisQueue()
+	{
+		return $this->redis;
+	}
+
+	/**
+	 * Get the underlying Redis job.
+	 *
+	 * @return string
+	 */
+	public function getRedisJob()
+	{
+		return $this->job;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SqsJob.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SqsJob.php b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SqsJob.php
new file mode 100755
index 0000000..0e666bd
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SqsJob.php
@@ -0,0 +1,139 @@
+<?php namespace Illuminate\Queue\Jobs;
+
+use Aws\Sqs\SqsClient;
+use Illuminate\Container\Container;
+
+class SqsJob extends Job {
+
+	/**
+	 * The Amazon SQS client instance.
+	 *
+	 * @var \Aws\Sqs\SqsClient
+	 */
+	protected $sqs;
+
+	/**
+	 * The Amazon SQS job instance.
+	 *
+	 * @var array
+	 */
+	protected $job;
+
+	/**
+	 * Create a new job instance.
+	 *
+	 * @param  \Illuminate\Container\Container  $container
+	 * @param  \Aws\Sqs\SqsClient  $sqs
+	 * @param  string  $queue
+	 * @param  array   $job
+	 * @return void
+	 */
+	public function __construct(Container $container,
+                                SqsClient $sqs,
+                                $queue,
+                                array $job)
+	{
+		$this->sqs = $sqs;
+		$this->job = $job;
+		$this->queue = $queue;
+		$this->container = $container;
+	}
+
+	/**
+	 * Fire the job.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$this->resolveAndFire(json_decode($this->getRawBody(), true));
+	}
+
+	/**
+	 * Get the raw body string for the job.
+	 *
+	 * @return string
+	 */
+	public function getRawBody()
+	{
+		return $this->job['Body'];
+	}
+
+	/**
+	 * Delete the job from the queue.
+	 *
+	 * @return void
+	 */
+	public function delete()
+	{
+		parent::delete();
+
+		$this->sqs->deleteMessage(array(
+
+			'QueueUrl' => $this->queue, 'ReceiptHandle' => $this->job['ReceiptHandle'],
+
+		));
+	}
+
+	/**
+	 * Release the job back into the queue.
+	 *
+	 * @param  int   $delay
+	 * @return void
+	 */
+	public function release($delay = 0)
+	{
+		// SQS job releases are handled by the server configuration...
+	}
+
+	/**
+	 * Get the number of times the job has been attempted.
+	 *
+	 * @return int
+	 */
+	public function attempts()
+	{
+		return (int) $this->job['Attributes']['ApproximateReceiveCount'];
+	}
+
+	/**
+	 * Get the job identifier.
+	 *
+	 * @return string
+	 */
+	public function getJobId()
+	{
+		return $this->job['MessageId'];
+	}
+
+	/**
+	 * Get the IoC container instance.
+	 *
+	 * @return \Illuminate\Container\Container
+	 */
+	public function getContainer()
+	{
+		return $this->container;
+	}
+
+	/**
+	 * Get the underlying SQS client instance.
+	 *
+	 * @return \Aws\Sqs\SqsClient
+	 */
+	public function getSqs()
+	{
+		return $this->sqs;
+	}
+
+	/**
+	 * Get the underlying raw SQS job.
+	 *
+	 * @return array
+	 */
+	public function getSqsJob()
+	{
+		return $this->job;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SyncJob.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SyncJob.php b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SyncJob.php
new file mode 100755
index 0000000..fe02312
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SyncJob.php
@@ -0,0 +1,97 @@
+<?php namespace Illuminate\Queue\Jobs;
+
+use Closure;
+use Illuminate\Container\Container;
+
+class SyncJob extends Job {
+
+	/**
+	 * The class name of the job.
+	 *
+	 * @var string
+	 */
+	protected $job;
+
+	/**
+	 * The queue message data.
+	 *
+	 * @var string
+	 */
+	protected $data;
+
+	/**
+	 * Create a new job instance.
+	 *
+	 * @param  \Illuminate\Container\Container  $container
+	 * @param  string  $job
+	 * @param  string  $data
+	 * @return void
+	 */
+	public function __construct(Container $container, $job, $data = '')
+	{
+		$this->job = $job;
+		$this->data = $data;
+		$this->container = $container;
+	}
+
+	/**
+	 * Fire the job.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$data = json_decode($this->data, true);
+
+		if ($this->job instanceof Closure)
+		{
+			call_user_func($this->job, $this, $data);
+		}
+		else
+		{
+			$this->resolveAndFire(array('job' => $this->job, 'data' => $data));
+		}
+	}
+
+	/**
+	 * Get the raw body string for the job.
+	 *
+	 * @return string
+	 */
+	public function getRawBody()
+	{
+		//
+	}
+
+	/**
+	 * Release the job back into the queue.
+	 *
+	 * @param  int   $delay
+	 * @return void
+	 */
+	public function release($delay = 0)
+	{
+		//
+	}
+
+	/**
+	 * Get the number of times the job has been attempted.
+	 *
+	 * @return int
+	 */
+	public function attempts()
+	{
+		return 1;
+	}
+
+	/**
+	 * Get the job identifier.
+	 *
+	 * @return string
+	 */
+	public function getJobId()
+	{
+		return '';
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Listener.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Listener.php b/vendor/laravel/framework/src/Illuminate/Queue/Listener.php
new file mode 100755
index 0000000..edf3cda
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Listener.php
@@ -0,0 +1,238 @@
+<?php namespace Illuminate\Queue;
+
+use Closure;
+use Symfony\Component\Process\Process;
+
+class Listener {
+
+	/**
+	 * The command working path.
+	 *
+	 * @var string
+	 */
+	protected $commandPath;
+
+	/**
+	 * The environment the workers should run under.
+	 *
+	 * @var string
+	 */
+	protected $environment;
+
+	/**
+	 * The amount of seconds to wait before polling the queue.
+	 *
+	 * @var int
+	 */
+	protected $sleep = 3;
+
+	/**
+	 * The amount of times to try a job before logging it failed.
+	 *
+	 * @var int
+	 */
+	protected $maxTries = 0;
+
+	/**
+	 * The queue worker command line.
+	 *
+	 * @var string
+	 */
+	protected $workerCommand;
+
+	/**
+	 * The output handler callback.
+	 *
+	 * @var \Closure|null
+	 */
+	protected $outputHandler;
+
+	/**
+	 * Create a new queue listener.
+	 *
+	 * @param  string  $commandPath
+	 * @return void
+	 */
+	public function __construct($commandPath)
+	{
+		$this->commandPath = $commandPath;
+		$this->workerCommand =  '"'.PHP_BINARY.'" artisan queue:work %s --queue="%s" --delay=%s --memory=%s --sleep=%s --tries=%s';
+	}
+
+	/**
+	 * Listen to the given queue connection.
+	 *
+	 * @param  string  $connection
+	 * @param  string  $queue
+	 * @param  string  $delay
+	 * @param  string  $memory
+	 * @param  int     $timeout
+	 * @return void
+	 */
+	public function listen($connection, $queue, $delay, $memory, $timeout = 60)
+	{
+		$process = $this->makeProcess($connection, $queue, $delay, $memory, $timeout);
+
+		while(true)
+		{
+			$this->runProcess($process, $memory);
+		}
+	}
+
+	/**
+	 * Run the given process.
+	 *
+	 * @param  \Symfony\Component\Process\Process  $process
+	 * @param  int  $memory
+	 * @return void
+	 */
+	public function runProcess(Process $process, $memory)
+	{
+		$process->run(function($type, $line)
+		{
+			$this->handleWorkerOutput($type, $line);
+		});
+
+		// Once we have run the job we'll go check if the memory limit has been
+		// exceeded for the script. If it has, we will kill this script so a
+		// process managers will restart this with a clean slate of memory.
+		if ($this->memoryExceeded($memory))
+		{
+			$this->stop(); return;
+		}
+	}
+
+	/**
+	 * Create a new Symfony process for the worker.
+	 *
+	 * @param  string  $connection
+	 * @param  string  $queue
+	 * @param  int     $delay
+	 * @param  int     $memory
+	 * @param  int     $timeout
+	 * @return \Symfony\Component\Process\Process
+	 */
+	public function makeProcess($connection, $queue, $delay, $memory, $timeout)
+	{
+		$string = $this->workerCommand;
+
+		// If the environment is set, we will append it to the command string so the
+		// workers will run under the specified environment. Otherwise, they will
+		// just run under the production environment which is not always right.
+		if (isset($this->environment))
+		{
+			$string .= ' --env='.$this->environment;
+		}
+
+		// Next, we will just format out the worker commands with all of the various
+		// options available for the command. This will produce the final command
+		// line that we will pass into a Symfony process object for processing.
+		$command = sprintf(
+			$string, $connection, $queue, $delay,
+			$memory, $this->sleep, $this->maxTries
+		);
+
+		return new Process($command, $this->commandPath, null, null, $timeout);
+	}
+
+	/**
+	 * Handle output from the worker process.
+	 *
+	 * @param  int  $type
+	 * @param  string  $line
+	 * @return void
+	 */
+	protected function handleWorkerOutput($type, $line)
+	{
+		if (isset($this->outputHandler))
+		{
+			call_user_func($this->outputHandler, $type, $line);
+		}
+	}
+
+	/**
+	 * Determine if the memory limit has been exceeded.
+	 *
+	 * @param  int   $memoryLimit
+	 * @return bool
+	 */
+	public function memoryExceeded($memoryLimit)
+	{
+		return (memory_get_usage() / 1024 / 1024) >= $memoryLimit;
+	}
+
+	/**
+	 * Stop listening and bail out of the script.
+	 *
+	 * @return void
+	 */
+	public function stop()
+	{
+		die;
+	}
+
+	/**
+	 * Set the output handler callback.
+	 *
+	 * @param  \Closure  $outputHandler
+	 * @return void
+	 */
+	public function setOutputHandler(Closure $outputHandler)
+	{
+		$this->outputHandler = $outputHandler;
+	}
+
+	/**
+	 * Get the current listener environment.
+	 *
+	 * @return string
+	 */
+	public function getEnvironment()
+	{
+		return $this->environment;
+	}
+
+	/**
+	 * Set the current environment.
+	 *
+	 * @param  string  $environment
+	 * @return void
+	 */
+	public function setEnvironment($environment)
+	{
+		$this->environment = $environment;
+	}
+
+	/**
+	 * Get the amount of seconds to wait before polling the queue.
+	 *
+	 * @return int
+	 */
+	public function getSleep()
+	{
+		return $this->sleep;
+	}
+
+	/**
+	 * Set the amount of seconds to wait before polling the queue.
+	 *
+	 * @param  int  $sleep
+	 * @return void
+	 */
+	public function setSleep($sleep)
+	{
+		$this->sleep = $sleep;
+	}
+
+	/**
+	 * Set the amount of times to try a job before logging it failed.
+	 *
+	 * @param  int  $tries
+	 * @return void
+	 */
+	public function setMaxTries($tries)
+	{
+		$this->maxTries = $tries;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Queue.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Queue.php b/vendor/laravel/framework/src/Illuminate/Queue/Queue.php
new file mode 100755
index 0000000..e6cd428
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Queue.php
@@ -0,0 +1,139 @@
+<?php namespace Illuminate\Queue;
+
+use Closure;
+use DateTime;
+use Illuminate\Container\Container;
+use Illuminate\Encryption\Encrypter;
+use Illuminate\Support\SerializableClosure;
+
+abstract class Queue {
+
+	/**
+	 * The IoC container instance.
+	 *
+	 * @var \Illuminate\Container\Container
+	 */
+	protected $container;
+
+	/**
+	 * Marshal a push queue request and fire the job.
+	 *
+	 * @throws \RuntimeException
+	 */
+	public function marshal()
+	{
+		throw new \RuntimeException("Push queues only supported by Iron.");
+	}
+
+	/**
+	 * Push an array of jobs onto the queue.
+	 *
+	 * @param  array   $jobs
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @return mixed
+	 */
+	public function bulk($jobs, $data = '', $queue = null)
+	{
+		foreach ((array) $jobs as $job)
+		{
+			$this->push($job, $data, $queue);
+		}
+	}
+
+	/**
+	 * Create a payload string from the given job and data.
+	 *
+	 * @param  string  $job
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @return string
+	 */
+	protected function createPayload($job, $data = '', $queue = null)
+	{
+		if ($job instanceof Closure)
+		{
+			return json_encode($this->createClosurePayload($job, $data));
+		}
+
+		return json_encode(array('job' => $job, 'data' => $data));
+	}
+
+	/**
+	 * Create a payload string for the given Closure job.
+	 *
+	 * @param  \Closure  $job
+	 * @param  mixed     $data
+	 * @return string
+	 */
+	protected function createClosurePayload($job, $data)
+	{
+		$closure = $this->crypt->encrypt(serialize(new SerializableClosure($job)));
+
+		return array('job' => 'IlluminateQueueClosure', 'data' => compact('closure'));
+	}
+
+	/**
+	 * Set additional meta on a payload string.
+	 *
+	 * @param  string  $payload
+	 * @param  string  $key
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected function setMeta($payload, $key, $value)
+	{
+		$payload = json_decode($payload, true);
+
+		return json_encode(array_set($payload, $key, $value));
+	}
+
+	/**
+	 * Calculate the number of seconds with the given delay.
+	 *
+	 * @param  \DateTime|int  $delay
+	 * @return int
+	 */
+	protected function getSeconds($delay)
+	{
+		if ($delay instanceof DateTime)
+		{
+			return max(0, $delay->getTimestamp() - $this->getTime());
+		}
+
+		return (int) $delay;
+	}
+
+	/**
+	 * Get the current UNIX timestamp.
+	 *
+	 * @return int
+	 */
+	public function getTime()
+	{
+		return time();
+	}
+
+	/**
+	 * Set the IoC container instance.
+	 *
+	 * @param  \Illuminate\Container\Container  $container
+	 * @return void
+	 */
+	public function setContainer(Container $container)
+	{
+		$this->container = $container;
+	}
+
+	/**
+	 * Set the encrypter instance.
+	 *
+	 * @param  \Illuminate\Encryption\Encrypter  $crypt
+	 * @return void
+	 */
+	public function setEncrypter(Encrypter $crypt)
+	{
+		$this->crypt = $crypt;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/QueueInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/QueueInterface.php b/vendor/laravel/framework/src/Illuminate/Queue/QueueInterface.php
new file mode 100755
index 0000000..69f9241
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/QueueInterface.php
@@ -0,0 +1,44 @@
+<?php namespace Illuminate\Queue;
+
+interface QueueInterface {
+
+	/**
+	 * Push a new job onto the queue.
+	 *
+	 * @param  string  $job
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @return mixed
+	 */
+	public function push($job, $data = '', $queue = null);
+
+	/**
+	 * Push a raw payload onto the queue.
+	 *
+	 * @param  string  $payload
+	 * @param  string  $queue
+	 * @param  array   $options
+	 * @return mixed
+	 */
+	public function pushRaw($payload, $queue = null, array $options = array());
+
+	/**
+	 * Push a new job onto the queue after a delay.
+	 *
+	 * @param  \DateTime|int  $delay
+	 * @param  string  $job
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @return mixed
+	 */
+	public function later($delay, $job, $data = '', $queue = null);
+
+	/**
+	 * Pop the next job off of the queue.
+	 *
+	 * @param  string  $queue
+	 * @return \Illuminate\Queue\Jobs\Job|null
+	 */
+	public function pop($queue = null);
+
+}


[33/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/css/bootstrap.min.css
----------------------------------------------------------------------
diff --git a/public/css/bootstrap.min.css b/public/css/bootstrap.min.css
new file mode 100644
index 0000000..55d56ab
--- /dev/null
+++ b/public/css/bootstrap.min.css
@@ -0,0 +1,57 @@
+/*!
+ * Bootstrap v3.1.1 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-
 transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!import
 ant;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Hel
 vetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding
 :0;overflow:hidden;clip:rect(0,0,0,0);border:0}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#999}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-s
 ize:16px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#999}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.
 page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:b
 lock;font-size:80%;line-height:1.42857143;color:#999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;white-
 space:nowrap;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col
 -md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.333
 33333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:0}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:0}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.6
 6666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{ri
 ght:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:0}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:0}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.
 col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:0}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-pu
 sh-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:0}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-
 8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:0}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:0}.col-lg-o
 ffset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>capt
 ion+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[
 class*=col-]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hov
 er,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr
 >th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.t
 able-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-ch
 ild>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;pad
 ding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date]{line-height:34px}.form-gr
 oup{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allo
 wed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.has-feedback .form-control-feedback{position:absolute;top:25px;right:0;display:block;width:34px;height:34px;line-height:34px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inse
 t 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.h
 as-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.form-control-static{margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;ma
 rgin-bottom:0;padding-left:0;vertical-align:middle}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;
 -webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,
 .btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-prim
 ary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-succ
 ess.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disable
 d] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4
 e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:400;cursor:pointer;border-radius:0}.btn-link,.btn-link:activ
 e,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;tr
 ansition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-c
 loud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.gl
 yphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047
 "}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"
 \e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow
 -down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e11
 9"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphico
 n-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record
 :before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{con
 tent:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,
 0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.o
 pen>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:a
 ctive,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-
 group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-
 vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate
 }.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[m
 ultiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.
 input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-ch
 ild,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>l
 i.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left
 :auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdow
 n .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;overflow-x:
 visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-t
 op{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin
 :7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,25
 5,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{float:none;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-ri
 ght:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.n
 avbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#3
 33;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.nav
 bar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-n
 av .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.paginati
 on{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#428bca;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca;cursor:default}.pagination>.disabled>span,.pagination>.disab
 led>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;paddi
 ng:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:gray}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}
 .label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#999;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;c
 olor:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.
 alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;m
 argin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}
 .progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-ima
 ge:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-righ
 t:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:
 focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info
 .active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5p
 x}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-
 bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody
 :first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child
  td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,
 .panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bor
 dered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{bord
 er-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{mar
 gin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-succes
 s>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse .panel-
 body{border-top-color:#ebccd1}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade 
 .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out

<TRUNCATED>

[48/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/Airavata/API/Airavata.php
----------------------------------------------------------------------
diff --git a/app/libraries/Airavata/API/Airavata.php b/app/libraries/Airavata/API/Airavata.php
new file mode 100644
index 0000000..5d20b4f
--- /dev/null
+++ b/app/libraries/Airavata/API/Airavata.php
@@ -0,0 +1,34207 @@
+<?php
+namespace Airavata\API;
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+use Thrift\Base\TBase;
+use Thrift\Type\TType;
+use Thrift\Type\TMessageType;
+use Thrift\Exception\TException;
+use Thrift\Exception\TProtocolException;
+use Thrift\Protocol\TProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
+use Thrift\Exception\TApplicationException;
+
+
+interface AiravataIf {
+  public function getAPIVersion();
+  public function addGateway(\Airavata\Model\Workspace\Gateway $gateway);
+  public function updateGateway($gatewayId, \Airavata\Model\Workspace\Gateway $updatedGateway);
+  public function getGateway($gatewayId);
+  public function deleteGateway($gatewayId);
+  public function getAllGateways();
+  public function isGatewayExist($gatewayId);
+  public function generateAndRegisterSSHKeys($gatewayId, $userName);
+  public function getSSHPubKey($airavataCredStoreToken);
+  public function getAllUserSSHPubKeys($userName);
+  public function createProject($gatewayId, \Airavata\Model\Workspace\Project $project);
+  public function updateProject($projectId, \Airavata\Model\Workspace\Project $updatedProject);
+  public function getProject($projectId);
+  public function deleteProject($projectId);
+  public function getAllUserProjects($gatewayId, $userName);
+  public function searchProjectsByProjectName($gatewayId, $userName, $projectName);
+  public function searchProjectsByProjectDesc($gatewayId, $userName, $description);
+  public function searchExperimentsByName($gatewayId, $userName, $expName);
+  public function searchExperimentsByDesc($gatewayId, $userName, $description);
+  public function searchExperimentsByApplication($gatewayId, $userName, $applicationId);
+  public function searchExperimentsByStatus($gatewayId, $userName, $experimentState);
+  public function searchExperimentsByCreationTime($gatewayId, $userName, $fromTime, $toTime);
+  public function getAllExperimentsInProject($projectId);
+  public function getAllUserExperiments($gatewayId, $userName);
+  public function createExperiment($gatewayId, \Airavata\Model\Workspace\Experiment\Experiment $experiment);
+  public function getExperiment($airavataExperimentId);
+  public function updateExperiment($airavataExperimentId, \Airavata\Model\Workspace\Experiment\Experiment $experiment);
+  public function updateExperimentConfiguration($airavataExperimentId, \Airavata\Model\Workspace\Experiment\UserConfigurationData $userConfiguration);
+  public function updateResourceScheduleing($airavataExperimentId, \Airavata\Model\Workspace\Experiment\ComputationalResourceScheduling $resourceScheduling);
+  public function validateExperiment($airavataExperimentId);
+  public function launchExperiment($airavataExperimentId, $airavataCredStoreToken);
+  public function getExperimentStatus($airavataExperimentId);
+  public function getExperimentOutputs($airavataExperimentId);
+  public function getIntermediateOutputs($airavataExperimentId);
+  public function getJobStatuses($airavataExperimentId);
+  public function getJobDetails($airavataExperimentId);
+  public function getDataTransferDetails($airavataExperimentId);
+  public function cloneExperiment($existingExperimentID, $newExperimentName);
+  public function terminateExperiment($airavataExperimentId, $tokenId);
+  public function registerApplicationModule($gatewayId, \Airavata\Model\AppCatalog\AppDeployment\ApplicationModule $applicationModule);
+  public function getApplicationModule($appModuleId);
+  public function updateApplicationModule($appModuleId, \Airavata\Model\AppCatalog\AppDeployment\ApplicationModule $applicationModule);
+  public function getAllAppModules($gatewayId);
+  public function deleteApplicationModule($appModuleId);
+  public function registerApplicationDeployment($gatewayId, \Airavata\Model\AppCatalog\AppDeployment\ApplicationDeploymentDescription $applicationDeployment);
+  public function getApplicationDeployment($appDeploymentId);
+  public function updateApplicationDeployment($appDeploymentId, \Airavata\Model\AppCatalog\AppDeployment\ApplicationDeploymentDescription $applicationDeployment);
+  public function deleteApplicationDeployment($appDeploymentId);
+  public function getAllApplicationDeployments($gatewayId);
+  public function getAppModuleDeployedResources($appModuleId);
+  public function registerApplicationInterface($gatewayId, \Airavata\Model\AppCatalog\AppInterface\ApplicationInterfaceDescription $applicationInterface);
+  public function getApplicationInterface($appInterfaceId);
+  public function updateApplicationInterface($appInterfaceId, \Airavata\Model\AppCatalog\AppInterface\ApplicationInterfaceDescription $applicationInterface);
+  public function deleteApplicationInterface($appInterfaceId);
+  public function getAllApplicationInterfaceNames($gatewayId);
+  public function getAllApplicationInterfaces($gatewayId);
+  public function getApplicationInputs($appInterfaceId);
+  public function getApplicationOutputs($appInterfaceId);
+  public function getAvailableAppInterfaceComputeResources($appInterfaceId);
+  public function registerComputeResource(\Airavata\Model\AppCatalog\ComputeResource\ComputeResourceDescription $computeResourceDescription);
+  public function getComputeResource($computeResourceId);
+  public function getAllComputeResourceNames();
+  public function updateComputeResource($computeResourceId, \Airavata\Model\AppCatalog\ComputeResource\ComputeResourceDescription $computeResourceDescription);
+  public function deleteComputeResource($computeResourceId);
+  public function addLocalSubmissionDetails($computeResourceId, $priorityOrder, \Airavata\Model\AppCatalog\ComputeResource\LOCALSubmission $localSubmission);
+  public function updateLocalSubmissionDetails($jobSubmissionInterfaceId, \Airavata\Model\AppCatalog\ComputeResource\LOCALSubmission $localSubmission);
+  public function getLocalJobSubmission($jobSubmissionId);
+  public function addSSHJobSubmissionDetails($computeResourceId, $priorityOrder, \Airavata\Model\AppCatalog\ComputeResource\SSHJobSubmission $sshJobSubmission);
+  public function getSSHJobSubmission($jobSubmissionId);
+  public function addUNICOREJobSubmissionDetails($computeResourceId, $priorityOrder, \Airavata\Model\AppCatalog\ComputeResource\UnicoreJobSubmission $unicoreJobSubmission);
+  public function getUnicoreJobSubmission($jobSubmissionId);
+  public function addCloudJobSubmissionDetails($computeResourceId, $priorityOrder, \Airavata\Model\AppCatalog\ComputeResource\CloudJobSubmission $cloudSubmission);
+  public function getCloudJobSubmission($jobSubmissionId);
+  public function updateSSHJobSubmissionDetails($jobSubmissionInterfaceId, \Airavata\Model\AppCatalog\ComputeResource\SSHJobSubmission $sshJobSubmission);
+  public function updateCloudJobSubmissionDetails($jobSubmissionInterfaceId, \Airavata\Model\AppCatalog\ComputeResource\CloudJobSubmission $sshJobSubmission);
+  public function updateUnicoreJobSubmissionDetails($jobSubmissionInterfaceId, \Airavata\Model\AppCatalog\ComputeResource\UnicoreJobSubmission $unicoreJobSubmission);
+  public function addLocalDataMovementDetails($computeResourceId, $priorityOrder, \Airavata\Model\AppCatalog\ComputeResource\LOCALDataMovement $localDataMovement);
+  public function updateLocalDataMovementDetails($dataMovementInterfaceId, \Airavata\Model\AppCatalog\ComputeResource\LOCALDataMovement $localDataMovement);
+  public function getLocalDataMovement($dataMovementId);
+  public function addSCPDataMovementDetails($computeResourceId, $priorityOrder, \Airavata\Model\AppCatalog\ComputeResource\SCPDataMovement $scpDataMovement);
+  public function updateSCPDataMovementDetails($dataMovementInterfaceId, \Airavata\Model\AppCatalog\ComputeResource\SCPDataMovement $scpDataMovement);
+  public function getSCPDataMovement($dataMovementId);
+  public function addUnicoreDataMovementDetails($computeResourceId, $priorityOrder, \Airavata\Model\AppCatalog\ComputeResource\UnicoreDataMovement $unicoreDataMovement);
+  public function updateUnicoreDataMovementDetails($dataMovementInterfaceId, \Airavata\Model\AppCatalog\ComputeResource\UnicoreDataMovement $unicoreDataMovement);
+  public function getUnicoreDataMovement($dataMovementId);
+  public function addGridFTPDataMovementDetails($computeResourceId, $priorityOrder, \Airavata\Model\AppCatalog\ComputeResource\GridFTPDataMovement $gridFTPDataMovement);
+  public function updateGridFTPDataMovementDetails($dataMovementInterfaceId, \Airavata\Model\AppCatalog\ComputeResource\GridFTPDataMovement $gridFTPDataMovement);
+  public function getGridFTPDataMovement($dataMovementId);
+  public function changeJobSubmissionPriority($jobSubmissionInterfaceId, $newPriorityOrder);
+  public function changeDataMovementPriority($dataMovementInterfaceId, $newPriorityOrder);
+  public function changeJobSubmissionPriorities($jobSubmissionPriorityMap);
+  public function changeDataMovementPriorities($dataMovementPriorityMap);
+  public function deleteJobSubmissionInterface($computeResourceId, $jobSubmissionInterfaceId);
+  public function deleteDataMovementInterface($computeResourceId, $dataMovementInterfaceId);
+  public function registerResourceJobManager(\Airavata\Model\AppCatalog\ComputeResource\ResourceJobManager $resourceJobManager);
+  public function updateResourceJobManager($resourceJobManagerId, \Airavata\Model\AppCatalog\ComputeResource\ResourceJobManager $updatedResourceJobManager);
+  public function getResourceJobManager($resourceJobManagerId);
+  public function deleteResourceJobManager($resourceJobManagerId);
+  public function deleteBatchQueue($computeResourceId, $queueName);
+  public function registerGatewayResourceProfile(\Airavata\Model\AppCatalog\GatewayProfile\GatewayResourceProfile $gatewayResourceProfile);
+  public function getGatewayResourceProfile($gatewayID);
+  public function updateGatewayResourceProfile($gatewayID, \Airavata\Model\AppCatalog\GatewayProfile\GatewayResourceProfile $gatewayResourceProfile);
+  public function deleteGatewayResourceProfile($gatewayID);
+  public function addGatewayComputeResourcePreference($gatewayID, $computeResourceId, \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference $computeResourcePreference);
+  public function getGatewayComputeResourcePreference($gatewayID, $computeResourceId);
+  public function getAllGatewayComputeResourcePreferences($gatewayID);
+  public function getAllGatewayComputeResources();
+  public function updateGatewayComputeResourcePreference($gatewayID, $computeResourceId, \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference $computeResourcePreference);
+  public function deleteGatewayComputeResourcePreference($gatewayID, $computeResourceId);
+  public function getAllWorkflows($gatewayId);
+  public function getWorkflow($workflowTemplateId);
+  public function deleteWorkflow($workflowTemplateId);
+  public function registerWorkflow($gatewayId, \Airavata\Model\Workflow $workflow);
+  public function updateWorkflow($workflowTemplateId, \Airavata\Model\Workflow $workflow);
+  public function getWorkflowTemplateId($workflowName);
+  public function isWorkflowExistWithName($workflowName);
+}
+
+class AiravataClient implements \Airavata\API\AiravataIf {
+  protected $input_ = null;
+  protected $output_ = null;
+
+  protected $seqid_ = 0;
+
+  public function __construct($input, $output=null) {
+    $this->input_ = $input;
+    $this->output_ = $output ? $output : $input;
+  }
+
+  public function getAPIVersion()
+  {
+    $this->send_getAPIVersion();
+    return $this->recv_getAPIVersion();
+  }
+
+  public function send_getAPIVersion()
+  {
+    $args = new \Airavata\API\Airavata_getAPIVersion_args();
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getAPIVersion', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getAPIVersion', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getAPIVersion()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_getAPIVersion_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_getAPIVersion_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("getAPIVersion failed: unknown result");
+  }
+
+  public function addGateway(\Airavata\Model\Workspace\Gateway $gateway)
+  {
+    $this->send_addGateway($gateway);
+    return $this->recv_addGateway();
+  }
+
+  public function send_addGateway(\Airavata\Model\Workspace\Gateway $gateway)
+  {
+    $args = new \Airavata\API\Airavata_addGateway_args();
+    $args->gateway = $gateway;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'addGateway', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('addGateway', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_addGateway()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_addGateway_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_addGateway_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("addGateway failed: unknown result");
+  }
+
+  public function updateGateway($gatewayId, \Airavata\Model\Workspace\Gateway $updatedGateway)
+  {
+    $this->send_updateGateway($gatewayId, $updatedGateway);
+    $this->recv_updateGateway();
+  }
+
+  public function send_updateGateway($gatewayId, \Airavata\Model\Workspace\Gateway $updatedGateway)
+  {
+    $args = new \Airavata\API\Airavata_updateGateway_args();
+    $args->gatewayId = $gatewayId;
+    $args->updatedGateway = $updatedGateway;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'updateGateway', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('updateGateway', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_updateGateway()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_updateGateway_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_updateGateway_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    return;
+  }
+
+  public function getGateway($gatewayId)
+  {
+    $this->send_getGateway($gatewayId);
+    return $this->recv_getGateway();
+  }
+
+  public function send_getGateway($gatewayId)
+  {
+    $args = new \Airavata\API\Airavata_getGateway_args();
+    $args->gatewayId = $gatewayId;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getGateway', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getGateway', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getGateway()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_getGateway_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_getGateway_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("getGateway failed: unknown result");
+  }
+
+  public function deleteGateway($gatewayId)
+  {
+    $this->send_deleteGateway($gatewayId);
+    return $this->recv_deleteGateway();
+  }
+
+  public function send_deleteGateway($gatewayId)
+  {
+    $args = new \Airavata\API\Airavata_deleteGateway_args();
+    $args->gatewayId = $gatewayId;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'deleteGateway', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('deleteGateway', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_deleteGateway()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_deleteGateway_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_deleteGateway_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("deleteGateway failed: unknown result");
+  }
+
+  public function getAllGateways()
+  {
+    $this->send_getAllGateways();
+    return $this->recv_getAllGateways();
+  }
+
+  public function send_getAllGateways()
+  {
+    $args = new \Airavata\API\Airavata_getAllGateways_args();
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getAllGateways', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getAllGateways', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getAllGateways()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_getAllGateways_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_getAllGateways_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("getAllGateways failed: unknown result");
+  }
+
+  public function isGatewayExist($gatewayId)
+  {
+    $this->send_isGatewayExist($gatewayId);
+    return $this->recv_isGatewayExist();
+  }
+
+  public function send_isGatewayExist($gatewayId)
+  {
+    $args = new \Airavata\API\Airavata_isGatewayExist_args();
+    $args->gatewayId = $gatewayId;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'isGatewayExist', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('isGatewayExist', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_isGatewayExist()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_isGatewayExist_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_isGatewayExist_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("isGatewayExist failed: unknown result");
+  }
+
+  public function generateAndRegisterSSHKeys($gatewayId, $userName)
+  {
+    $this->send_generateAndRegisterSSHKeys($gatewayId, $userName);
+    return $this->recv_generateAndRegisterSSHKeys();
+  }
+
+  public function send_generateAndRegisterSSHKeys($gatewayId, $userName)
+  {
+    $args = new \Airavata\API\Airavata_generateAndRegisterSSHKeys_args();
+    $args->gatewayId = $gatewayId;
+    $args->userName = $userName;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'generateAndRegisterSSHKeys', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('generateAndRegisterSSHKeys', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_generateAndRegisterSSHKeys()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_generateAndRegisterSSHKeys_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_generateAndRegisterSSHKeys_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("generateAndRegisterSSHKeys failed: unknown result");
+  }
+
+  public function getSSHPubKey($airavataCredStoreToken)
+  {
+    $this->send_getSSHPubKey($airavataCredStoreToken);
+    return $this->recv_getSSHPubKey();
+  }
+
+  public function send_getSSHPubKey($airavataCredStoreToken)
+  {
+    $args = new \Airavata\API\Airavata_getSSHPubKey_args();
+    $args->airavataCredStoreToken = $airavataCredStoreToken;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getSSHPubKey', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getSSHPubKey', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getSSHPubKey()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_getSSHPubKey_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_getSSHPubKey_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("getSSHPubKey failed: unknown result");
+  }
+
+  public function getAllUserSSHPubKeys($userName)
+  {
+    $this->send_getAllUserSSHPubKeys($userName);
+    return $this->recv_getAllUserSSHPubKeys();
+  }
+
+  public function send_getAllUserSSHPubKeys($userName)
+  {
+    $args = new \Airavata\API\Airavata_getAllUserSSHPubKeys_args();
+    $args->userName = $userName;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getAllUserSSHPubKeys', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getAllUserSSHPubKeys', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getAllUserSSHPubKeys()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_getAllUserSSHPubKeys_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_getAllUserSSHPubKeys_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("getAllUserSSHPubKeys failed: unknown result");
+  }
+
+  public function createProject($gatewayId, \Airavata\Model\Workspace\Project $project)
+  {
+    $this->send_createProject($gatewayId, $project);
+    return $this->recv_createProject();
+  }
+
+  public function send_createProject($gatewayId, \Airavata\Model\Workspace\Project $project)
+  {
+    $args = new \Airavata\API\Airavata_createProject_args();
+    $args->gatewayId = $gatewayId;
+    $args->project = $project;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'createProject', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('createProject', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_createProject()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_createProject_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_createProject_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("createProject failed: unknown result");
+  }
+
+  public function updateProject($projectId, \Airavata\Model\Workspace\Project $updatedProject)
+  {
+    $this->send_updateProject($projectId, $updatedProject);
+    $this->recv_updateProject();
+  }
+
+  public function send_updateProject($projectId, \Airavata\Model\Workspace\Project $updatedProject)
+  {
+    $args = new \Airavata\API\Airavata_updateProject_args();
+    $args->projectId = $projectId;
+    $args->updatedProject = $updatedProject;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'updateProject', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('updateProject', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_updateProject()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_updateProject_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_updateProject_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    if ($result->pnfe !== null) {
+      throw $result->pnfe;
+    }
+    return;
+  }
+
+  public function getProject($projectId)
+  {
+    $this->send_getProject($projectId);
+    return $this->recv_getProject();
+  }
+
+  public function send_getProject($projectId)
+  {
+    $args = new \Airavata\API\Airavata_getProject_args();
+    $args->projectId = $projectId;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getProject', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getProject', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getProject()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_getProject_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_getProject_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    if ($result->pnfe !== null) {
+      throw $result->pnfe;
+    }
+    throw new \Exception("getProject failed: unknown result");
+  }
+
+  public function deleteProject($projectId)
+  {
+    $this->send_deleteProject($projectId);
+    return $this->recv_deleteProject();
+  }
+
+  public function send_deleteProject($projectId)
+  {
+    $args = new \Airavata\API\Airavata_deleteProject_args();
+    $args->projectId = $projectId;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'deleteProject', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('deleteProject', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_deleteProject()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_deleteProject_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_deleteProject_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    if ($result->pnfe !== null) {
+      throw $result->pnfe;
+    }
+    throw new \Exception("deleteProject failed: unknown result");
+  }
+
+  public function getAllUserProjects($gatewayId, $userName)
+  {
+    $this->send_getAllUserProjects($gatewayId, $userName);
+    return $this->recv_getAllUserProjects();
+  }
+
+  public function send_getAllUserProjects($gatewayId, $userName)
+  {
+    $args = new \Airavata\API\Airavata_getAllUserProjects_args();
+    $args->gatewayId = $gatewayId;
+    $args->userName = $userName;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getAllUserProjects', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getAllUserProjects', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getAllUserProjects()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_getAllUserProjects_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_getAllUserProjects_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("getAllUserProjects failed: unknown result");
+  }
+
+  public function searchProjectsByProjectName($gatewayId, $userName, $projectName)
+  {
+    $this->send_searchProjectsByProjectName($gatewayId, $userName, $projectName);
+    return $this->recv_searchProjectsByProjectName();
+  }
+
+  public function send_searchProjectsByProjectName($gatewayId, $userName, $projectName)
+  {
+    $args = new \Airavata\API\Airavata_searchProjectsByProjectName_args();
+    $args->gatewayId = $gatewayId;
+    $args->userName = $userName;
+    $args->projectName = $projectName;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'searchProjectsByProjectName', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('searchProjectsByProjectName', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_searchProjectsByProjectName()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_searchProjectsByProjectName_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_searchProjectsByProjectName_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("searchProjectsByProjectName failed: unknown result");
+  }
+
+  public function searchProjectsByProjectDesc($gatewayId, $userName, $description)
+  {
+    $this->send_searchProjectsByProjectDesc($gatewayId, $userName, $description);
+    return $this->recv_searchProjectsByProjectDesc();
+  }
+
+  public function send_searchProjectsByProjectDesc($gatewayId, $userName, $description)
+  {
+    $args = new \Airavata\API\Airavata_searchProjectsByProjectDesc_args();
+    $args->gatewayId = $gatewayId;
+    $args->userName = $userName;
+    $args->description = $description;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'searchProjectsByProjectDesc', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('searchProjectsByProjectDesc', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_searchProjectsByProjectDesc()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_searchProjectsByProjectDesc_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_searchProjectsByProjectDesc_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("searchProjectsByProjectDesc failed: unknown result");
+  }
+
+  public function searchExperimentsByName($gatewayId, $userName, $expName)
+  {
+    $this->send_searchExperimentsByName($gatewayId, $userName, $expName);
+    return $this->recv_searchExperimentsByName();
+  }
+
+  public function send_searchExperimentsByName($gatewayId, $userName, $expName)
+  {
+    $args = new \Airavata\API\Airavata_searchExperimentsByName_args();
+    $args->gatewayId = $gatewayId;
+    $args->userName = $userName;
+    $args->expName = $expName;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'searchExperimentsByName', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('searchExperimentsByName', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_searchExperimentsByName()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_searchExperimentsByName_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_searchExperimentsByName_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("searchExperimentsByName failed: unknown result");
+  }
+
+  public function searchExperimentsByDesc($gatewayId, $userName, $description)
+  {
+    $this->send_searchExperimentsByDesc($gatewayId, $userName, $description);
+    return $this->recv_searchExperimentsByDesc();
+  }
+
+  public function send_searchExperimentsByDesc($gatewayId, $userName, $description)
+  {
+    $args = new \Airavata\API\Airavata_searchExperimentsByDesc_args();
+    $args->gatewayId = $gatewayId;
+    $args->userName = $userName;
+    $args->description = $description;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'searchExperimentsByDesc', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('searchExperimentsByDesc', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_searchExperimentsByDesc()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_searchExperimentsByDesc_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_searchExperimentsByDesc_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("searchExperimentsByDesc failed: unknown result");
+  }
+
+  public function searchExperimentsByApplication($gatewayId, $userName, $applicationId)
+  {
+    $this->send_searchExperimentsByApplication($gatewayId, $userName, $applicationId);
+    return $this->recv_searchExperimentsByApplication();
+  }
+
+  public function send_searchExperimentsByApplication($gatewayId, $userName, $applicationId)
+  {
+    $args = new \Airavata\API\Airavata_searchExperimentsByApplication_args();
+    $args->gatewayId = $gatewayId;
+    $args->userName = $userName;
+    $args->applicationId = $applicationId;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'searchExperimentsByApplication', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('searchExperimentsByApplication', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_searchExperimentsByApplication()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_searchExperimentsByApplication_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_searchExperimentsByApplication_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("searchExperimentsByApplication failed: unknown result");
+  }
+
+  public function searchExperimentsByStatus($gatewayId, $userName, $experimentState)
+  {
+    $this->send_searchExperimentsByStatus($gatewayId, $userName, $experimentState);
+    return $this->recv_searchExperimentsByStatus();
+  }
+
+  public function send_searchExperimentsByStatus($gatewayId, $userName, $experimentState)
+  {
+    $args = new \Airavata\API\Airavata_searchExperimentsByStatus_args();
+    $args->gatewayId = $gatewayId;
+    $args->userName = $userName;
+    $args->experimentState = $experimentState;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'searchExperimentsByStatus', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('searchExperimentsByStatus', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_searchExperimentsByStatus()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_searchExperimentsByStatus_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_searchExperimentsByStatus_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("searchExperimentsByStatus failed: unknown result");
+  }
+
+  public function searchExperimentsByCreationTime($gatewayId, $userName, $fromTime, $toTime)
+  {
+    $this->send_searchExperimentsByCreationTime($gatewayId, $userName, $fromTime, $toTime);
+    return $this->recv_searchExperimentsByCreationTime();
+  }
+
+  public function send_searchExperimentsByCreationTime($gatewayId, $userName, $fromTime, $toTime)
+  {
+    $args = new \Airavata\API\Airavata_searchExperimentsByCreationTime_args();
+    $args->gatewayId = $gatewayId;
+    $args->userName = $userName;
+    $args->fromTime = $fromTime;
+    $args->toTime = $toTime;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'searchExperimentsByCreationTime', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('searchExperimentsByCreationTime', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_searchExperimentsByCreationTime()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_searchExperimentsByCreationTime_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_searchExperimentsByCreationTime_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("searchExperimentsByCreationTime failed: unknown result");
+  }
+
+  public function getAllExperimentsInProject($projectId)
+  {
+    $this->send_getAllExperimentsInProject($projectId);
+    return $this->recv_getAllExperimentsInProject();
+  }
+
+  public function send_getAllExperimentsInProject($projectId)
+  {
+    $args = new \Airavata\API\Airavata_getAllExperimentsInProject_args();
+    $args->projectId = $projectId;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getAllExperimentsInProject', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getAllExperimentsInProject', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getAllExperimentsInProject()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_getAllExperimentsInProject_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_getAllExperimentsInProject_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    if ($result->pnfe !== null) {
+      throw $result->pnfe;
+    }
+    throw new \Exception("getAllExperimentsInProject failed: unknown result");
+  }
+
+  public function getAllUserExperiments($gatewayId, $userName)
+  {
+    $this->send_getAllUserExperiments($gatewayId, $userName);
+    return $this->recv_getAllUserExperiments();
+  }
+
+  public function send_getAllUserExperiments($gatewayId, $userName)
+  {
+    $args = new \Airavata\API\Airavata_getAllUserExperiments_args();
+    $args->gatewayId = $gatewayId;
+    $args->userName = $userName;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getAllUserExperiments', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getAllUserExperiments', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getAllUserExperiments()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_getAllUserExperiments_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_getAllUserExperiments_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("getAllUserExperiments failed: unknown result");
+  }
+
+  public function createExperiment($gatewayId, \Airavata\Model\Workspace\Experiment\Experiment $experiment)
+  {
+    $this->send_createExperiment($gatewayId, $experiment);
+    return $this->recv_createExperiment();
+  }
+
+  public function send_createExperiment($gatewayId, \Airavata\Model\Workspace\Experiment\Experiment $experiment)
+  {
+    $args = new \Airavata\API\Airavata_createExperiment_args();
+    $args->gatewayId = $gatewayId;
+    $args->experiment = $experiment;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'createExperiment', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('createExperiment', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_createExperiment()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_createExperiment_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_createExperiment_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("createExperiment failed: unknown result");
+  }
+
+  public function getExperiment($airavataExperimentId)
+  {
+    $this->send_getExperiment($airavataExperimentId);
+    return $this->recv_getExperiment();
+  }
+
+  public function send_getExperiment($airavataExperimentId)
+  {
+    $args = new \Airavata\API\Airavata_getExperiment_args();
+    $args->airavataExperimentId = $airavataExperimentId;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getExperiment', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getExperiment', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getExperiment()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_getExperiment_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_getExperiment_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->enf !== null) {
+      throw $result->enf;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("getExperiment failed: unknown result");
+  }
+
+  public function updateExperiment($airavataExperimentId, \Airavata\Model\Workspace\Experiment\Experiment $experiment)
+  {
+    $this->send_updateExperiment($airavataExperimentId, $experiment);
+    $this->recv_updateExperiment();
+  }
+
+  public function send_updateExperiment($airavataExperimentId, \Airavata\Model\Workspace\Experiment\Experiment $experiment)
+  {
+    $args = new \Airavata\API\Airavata_updateExperiment_args();
+    $args->airavataExperimentId = $airavataExperimentId;
+    $args->experiment = $experiment;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'updateExperiment', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('updateExperiment', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_updateExperiment()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_updateExperiment_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_updateExperiment_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->enf !== null) {
+      throw $result->enf;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    return;
+  }
+
+  public function updateExperimentConfiguration($airavataExperimentId, \Airavata\Model\Workspace\Experiment\UserConfigurationData $userConfiguration)
+  {
+    $this->send_updateExperimentConfiguration($airavataExperimentId, $userConfiguration);
+    $this->recv_updateExperimentConfiguration();
+  }
+
+  public function send_updateExperimentConfiguration($airavataExperimentId, \Airavata\Model\Workspace\Experiment\UserConfigurationData $userConfiguration)
+  {
+    $args = new \Airavata\API\Airavata_updateExperimentConfiguration_args();
+    $args->airavataExperimentId = $airavataExperimentId;
+    $args->userConfiguration = $userConfiguration;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'updateExperimentConfiguration', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('updateExperimentConfiguration', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_updateExperimentConfiguration()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_updateExperimentConfiguration_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_updateExperimentConfiguration_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    return;
+  }
+
+  public function updateResourceScheduleing($airavataExperimentId, \Airavata\Model\Workspace\Experiment\ComputationalResourceScheduling $resourceScheduling)
+  {
+    $this->send_updateResourceScheduleing($airavataExperimentId, $resourceScheduling);
+    $this->recv_updateResourceScheduleing();
+  }
+
+  public function send_updateResourceScheduleing($airavataExperimentId, \Airavata\Model\Workspace\Experiment\ComputationalResourceScheduling $resourceScheduling)
+  {
+    $args = new \Airavata\API\Airavata_updateResourceScheduleing_args();
+    $args->airavataExperimentId = $airavataExperimentId;
+    $args->resourceScheduling = $resourceScheduling;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'updateResourceScheduleing', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('updateResourceScheduleing', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_updateResourceScheduleing()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_updateResourceScheduleing_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_updateResourceScheduleing_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    return;
+  }
+
+  public function validateExperiment($airavataExperimentId)
+  {
+    $this->send_validateExperiment($airavataExperimentId);
+    return $this->recv_validateExperiment();
+  }
+
+  public function send_validateExperiment($airavataExperimentId)
+  {
+    $args = new \Airavata\API\Airavata_validateExperiment_args();
+    $args->airavataExperimentId = $airavataExperimentId;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'validateExperiment', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('validateExperiment', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_validateExperiment()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_validateExperiment_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_validateExperiment_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->enf !== null) {
+      throw $result->enf;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("validateExperiment failed: unknown result");
+  }
+
+  public function launchExperiment($airavataExperimentId, $airavataCredStoreToken)
+  {
+    $this->send_launchExperiment($airavataExperimentId, $airavataCredStoreToken);
+    $this->recv_launchExperiment();
+  }
+
+  public function send_launchExperiment($airavataExperimentId, $airavataCredStoreToken)
+  {
+    $args = new \Airavata\API\Airavata_launchExperiment_args();
+    $args->airavataExperimentId = $airavataExperimentId;
+    $args->airavataCredStoreToken = $airavataCredStoreToken;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'launchExperiment', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('launchExperiment', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_launchExperiment()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_launchExperiment_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_launchExperiment_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->enf !== null) {
+      throw $result->enf;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    if ($result->lve !== null) {
+      throw $result->lve;
+    }
+    return;
+  }
+
+  public function getExperimentStatus($airavataExperimentId)
+  {
+    $this->send_getExperimentStatus($airavataExperimentId);
+    return $this->recv_getExperimentStatus();
+  }
+
+  public function send_getExperimentStatus($airavataExperimentId)
+  {
+    $args = new \Airavata\API\Airavata_getExperimentStatus_args();
+    $args->airavataExperimentId = $airavataExperimentId;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getExperimentStatus', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getExperimentStatus', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getExperimentStatus()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_getExperimentStatus_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_getExperimentStatus_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->enf !== null) {
+      throw $result->enf;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("getExperimentStatus failed: unknown result");
+  }
+
+  public function getExperimentOutputs($airavataExperimentId)
+  {
+    $this->send_getExperimentOutputs($airavataExperimentId);
+    return $this->recv_getExperimentOutputs();
+  }
+
+  public function send_getExperimentOutputs($airavataExperimentId)
+  {
+    $args = new \Airavata\API\Airavata_getExperimentOutputs_args();
+    $args->airavataExperimentId = $airavataExperimentId;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getExperimentOutputs', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getExperimentOutputs', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getExperimentOutputs()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_getExperimentOutputs_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_getExperimentOutputs_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->enf !== null) {
+      throw $result->enf;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("getExperimentOutputs failed: unknown result");
+  }
+
+  public function getIntermediateOutputs($airavataExperimentId)
+  {
+    $this->send_getIntermediateOutputs($airavataExperimentId);
+    return $this->recv_getIntermediateOutputs();
+  }
+
+  public function send_getIntermediateOutputs($airavataExperimentId)
+  {
+    $args = new \Airavata\API\Airavata_getIntermediateOutputs_args();
+    $args->airavataExperimentId = $airavataExperimentId;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getIntermediateOutputs', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getIntermediateOutputs', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getIntermediateOutputs()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_getIntermediateOutputs_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_getIntermediateOutputs_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->enf !== null) {
+      throw $result->enf;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("getIntermediateOutputs failed: unknown result");
+  }
+
+  public function getJobStatuses($airavataExperimentId)
+  {
+    $this->send_getJobStatuses($airavataExperimentId);
+    return $this->recv_getJobStatuses();
+  }
+
+  public function send_getJobStatuses($airavataExperimentId)
+  {
+    $args = new \Airavata\API\Airavata_getJobStatuses_args();
+    $args->airavataExperimentId = $airavataExperimentId;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getJobStatuses', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getJobStatuses', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getJobStatuses()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_getJobStatuses_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_getJobStatuses_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->enf !== null) {
+      throw $result->enf;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("getJobStatuses failed: unknown result");
+  }
+
+  public function getJobDetails($airavataExperimentId)
+  {
+    $this->send_getJobDetails($airavataExperimentId);
+    return $this->recv_getJobDetails();
+  }
+
+  public function send_getJobDetails($airavataExperimentId)
+  {
+    $args = new \Airavata\API\Airavata_getJobDetails_args();
+    $args->airavataExperimentId = $airavataExperimentId;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getJobDetails', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getJobDetails', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getJobDetails()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_getJobDetails_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_getJobDetails_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $r

<TRUNCATED>

[18/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php
new file mode 100755
index 0000000..034917d
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php
@@ -0,0 +1,1055 @@
+<?php namespace Illuminate\Database\Eloquent\Relations;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Query\Expression;
+use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Database\Eloquent\ModelNotFoundException;
+
+class BelongsToMany extends Relation {
+
+	/**
+	 * The intermediate table for the relation.
+	 *
+	 * @var string
+	 */
+	protected $table;
+
+	/**
+	 * The foreign key of the parent model.
+	 *
+	 * @var string
+	 */
+	protected $foreignKey;
+
+	/**
+	 * The associated key of the relation.
+	 *
+	 * @var string
+	 */
+	protected $otherKey;
+
+	/**
+	 * The "name" of the relationship.
+	 *
+	 * @var string
+	 */
+	protected $relationName;
+
+	/**
+	 * The pivot table columns to retrieve.
+	 *
+	 * @var array
+	 */
+	protected $pivotColumns = array();
+
+	/**
+	 * Any pivot table restrictions.
+	 *
+	 * @var array
+	 */
+	protected $pivotWheres = [];
+
+	/**
+	 * Create a new has many relationship instance.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @param  \Illuminate\Database\Eloquent\Model  $parent
+	 * @param  string  $table
+	 * @param  string  $foreignKey
+	 * @param  string  $otherKey
+	 * @param  string  $relationName
+	 * @return void
+	 */
+	public function __construct(Builder $query, Model $parent, $table, $foreignKey, $otherKey, $relationName = null)
+	{
+		$this->table = $table;
+		$this->otherKey = $otherKey;
+		$this->foreignKey = $foreignKey;
+		$this->relationName = $relationName;
+
+		parent::__construct($query, $parent);
+	}
+
+	/**
+	 * Get the results of the relationship.
+	 *
+	 * @return mixed
+	 */
+	public function getResults()
+	{
+		return $this->get();
+	}
+
+	/**
+	 * Set a where clause for a pivot table column.
+	 *
+	 * @param  string  $column
+	 * @param  string  $operator
+	 * @param  mixed   $value
+	 * @param  string  $boolean
+	 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
+	 */
+	public function wherePivot($column, $operator = null, $value = null, $boolean = 'and')
+	{
+		$this->pivotWheres[] = func_get_args();
+
+		return $this->where($this->table.'.'.$column, $operator, $value, $boolean);
+	}
+
+	/**
+	 * Set an or where clause for a pivot table column.
+	 *
+	 * @param  string  $column
+	 * @param  string  $operator
+	 * @param  mixed   $value
+	 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
+	 */
+	public function orWherePivot($column, $operator = null, $value = null)
+	{
+		return $this->wherePivot($column, $operator, $value, 'or');
+	}
+
+	/**
+	 * Execute the query and get the first result.
+	 *
+	 * @param  array   $columns
+	 * @return mixed
+	 */
+	public function first($columns = array('*'))
+	{
+		$results = $this->take(1)->get($columns);
+
+		return count($results) > 0 ? $results->first() : null;
+	}
+
+	/**
+	 * Execute the query and get the first result or throw an exception.
+	 *
+	 * @param  array  $columns
+	 * @return \Illuminate\Database\Eloquent\Model|static
+	 *
+	 * @throws \Illuminate\Database\Eloquent\ModelNotFoundException
+	 */
+	public function firstOrFail($columns = array('*'))
+	{
+		if ( ! is_null($model = $this->first($columns))) return $model;
+
+		throw new ModelNotFoundException;
+	}
+
+	/**
+	 * Execute the query as a "select" statement.
+	 *
+	 * @param  array  $columns
+	 * @return \Illuminate\Database\Eloquent\Collection
+	 */
+	public function get($columns = array('*'))
+	{
+		// First we'll add the proper select columns onto the query so it is run with
+		// the proper columns. Then, we will get the results and hydrate out pivot
+		// models with the result of those columns as a separate model relation.
+		$columns = $this->query->getQuery()->columns ? array() : $columns;
+
+		$select = $this->getSelectColumns($columns);
+
+		$models = $this->query->addSelect($select)->getModels();
+
+		$this->hydratePivotRelation($models);
+
+		// If we actually found models we will also eager load any relationships that
+		// have been specified as needing to be eager loaded. This will solve the
+		// n + 1 query problem for the developer and also increase performance.
+		if (count($models) > 0)
+		{
+			$models = $this->query->eagerLoadRelations($models);
+		}
+
+		return $this->related->newCollection($models);
+	}
+
+	/**
+	 * Get a paginator for the "select" statement.
+	 *
+	 * @param  int    $perPage
+	 * @param  array  $columns
+	 * @return \Illuminate\Pagination\Paginator
+	 */
+	public function paginate($perPage = null, $columns = array('*'))
+	{
+		$this->query->addSelect($this->getSelectColumns($columns));
+
+		// When paginating results, we need to add the pivot columns to the query and
+		// then hydrate into the pivot objects once the results have been gathered
+		// from the database since this isn't performed by the Eloquent builder.
+		$pager = $this->query->paginate($perPage, $columns);
+
+		$this->hydratePivotRelation($pager->getItems());
+
+		return $pager;
+	}
+
+	/**
+	 * Hydrate the pivot table relationship on the models.
+	 *
+	 * @param  array  $models
+	 * @return void
+	 */
+	protected function hydratePivotRelation(array $models)
+	{
+		// To hydrate the pivot relationship, we will just gather the pivot attributes
+		// and create a new Pivot model, which is basically a dynamic model that we
+		// will set the attributes, table, and connections on so it they be used.
+		foreach ($models as $model)
+		{
+			$pivot = $this->newExistingPivot($this->cleanPivotAttributes($model));
+
+			$model->setRelation('pivot', $pivot);
+		}
+	}
+
+	/**
+	 * Get the pivot attributes from a model.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Model  $model
+	 * @return array
+	 */
+	protected function cleanPivotAttributes(Model $model)
+	{
+		$values = array();
+
+		foreach ($model->getAttributes() as $key => $value)
+		{
+			// To get the pivots attributes we will just take any of the attributes which
+			// begin with "pivot_" and add those to this arrays, as well as unsetting
+			// them from the parent's models since they exist in a different table.
+			if (strpos($key, 'pivot_') === 0)
+			{
+				$values[substr($key, 6)] = $value;
+
+				unset($model->$key);
+			}
+		}
+
+		return $values;
+	}
+
+	/**
+	 * Set the base constraints on the relation query.
+	 *
+	 * @return void
+	 */
+	public function addConstraints()
+	{
+		$this->setJoin();
+
+		if (static::$constraints) $this->setWhere();
+	}
+
+	/**
+	 * Add the constraints for a relationship count query.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @param  \Illuminate\Database\Eloquent\Builder  $parent
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	public function getRelationCountQuery(Builder $query, Builder $parent)
+	{
+		if ($parent->getQuery()->from == $query->getQuery()->from)
+		{
+			return $this->getRelationCountQueryForSelfJoin($query, $parent);
+		}
+
+		$this->setJoin($query);
+
+		return parent::getRelationCountQuery($query, $parent);
+	}
+
+	/**
+	 * Add the constraints for a relationship count query on the same table.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @param  \Illuminate\Database\Eloquent\Builder  $parent
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	public function getRelationCountQueryForSelfJoin(Builder $query, Builder $parent)
+	{
+		$query->select(new Expression('count(*)'));
+
+		$tablePrefix = $this->query->getQuery()->getConnection()->getTablePrefix();
+
+		$query->from($this->table.' as '.$tablePrefix.$hash = $this->getRelationCountHash());
+
+		$key = $this->wrap($this->getQualifiedParentKeyName());
+
+		return $query->where($hash.'.'.$this->foreignKey, '=', new Expression($key));
+	}
+
+	/**
+	 * Get a relationship join table hash.
+	 *
+	 * @return string
+	 */
+	public function getRelationCountHash()
+	{
+		return 'self_'.md5(microtime(true));
+	}
+
+	/**
+	 * Set the select clause for the relation query.
+	 *
+	 * @param  array  $columns
+	 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
+	 */
+	protected function getSelectColumns(array $columns = array('*'))
+	{
+		if ($columns == array('*'))
+		{
+			$columns = array($this->related->getTable().'.*');
+		}
+
+		return array_merge($columns, $this->getAliasedPivotColumns());
+	}
+
+	/**
+	 * Get the pivot columns for the relation.
+	 *
+	 * @return array
+	 */
+	protected function getAliasedPivotColumns()
+	{
+		$defaults = array($this->foreignKey, $this->otherKey);
+
+		// We need to alias all of the pivot columns with the "pivot_" prefix so we
+		// can easily extract them out of the models and put them into the pivot
+		// relationships when they are retrieved and hydrated into the models.
+		$columns = array();
+
+		foreach (array_merge($defaults, $this->pivotColumns) as $column)
+		{
+			$columns[] = $this->table.'.'.$column.' as pivot_'.$column;
+		}
+
+		return array_unique($columns);
+	}
+
+	/**
+	 * Determine whether the given column is defined as a pivot column.
+	 *
+	 * @param  string  $column
+	 * @return bool
+	 */
+	protected function hasPivotColumn($column)
+	{
+		return in_array($column, $this->pivotColumns);
+	}
+
+	/**
+	 * Set the join clause for the relation query.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder|null
+	 * @return $this
+	 */
+	protected function setJoin($query = null)
+	{
+		$query = $query ?: $this->query;
+
+		// We need to join to the intermediate table on the related model's primary
+		// key column with the intermediate table's foreign key for the related
+		// model instance. Then we can set the "where" for the parent models.
+		$baseTable = $this->related->getTable();
+
+		$key = $baseTable.'.'.$this->related->getKeyName();
+
+		$query->join($this->table, $key, '=', $this->getOtherKey());
+
+		return $this;
+	}
+
+	/**
+	 * Set the where clause for the relation query.
+	 *
+	 * @return $this
+	 */
+	protected function setWhere()
+	{
+		$foreign = $this->getForeignKey();
+
+		$this->query->where($foreign, '=', $this->parent->getKey());
+
+		return $this;
+	}
+
+	/**
+	 * Set the constraints for an eager load of the relation.
+	 *
+	 * @param  array  $models
+	 * @return void
+	 */
+	public function addEagerConstraints(array $models)
+	{
+		$this->query->whereIn($this->getForeignKey(), $this->getKeys($models));
+	}
+
+	/**
+	 * Initialize the relation on a set of models.
+	 *
+	 * @param  array   $models
+	 * @param  string  $relation
+	 * @return array
+	 */
+	public function initRelation(array $models, $relation)
+	{
+		foreach ($models as $model)
+		{
+			$model->setRelation($relation, $this->related->newCollection());
+		}
+
+		return $models;
+	}
+
+	/**
+	 * Match the eagerly loaded results to their parents.
+	 *
+	 * @param  array   $models
+	 * @param  \Illuminate\Database\Eloquent\Collection  $results
+	 * @param  string  $relation
+	 * @return array
+	 */
+	public function match(array $models, Collection $results, $relation)
+	{
+		$dictionary = $this->buildDictionary($results);
+
+		// Once we have an array dictionary of child objects we can easily match the
+		// children back to their parent using the dictionary and the keys on the
+		// the parent models. Then we will return the hydrated models back out.
+		foreach ($models as $model)
+		{
+			if (isset($dictionary[$key = $model->getKey()]))
+			{
+				$collection = $this->related->newCollection($dictionary[$key]);
+
+				$model->setRelation($relation, $collection);
+			}
+		}
+
+		return $models;
+	}
+
+	/**
+	 * Build model dictionary keyed by the relation's foreign key.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Collection  $results
+	 * @return array
+	 */
+	protected function buildDictionary(Collection $results)
+	{
+		$foreign = $this->foreignKey;
+
+		// First we will build a dictionary of child models keyed by the foreign key
+		// of the relation so that we will easily and quickly match them to their
+		// parents without having a possibly slow inner loops for every models.
+		$dictionary = array();
+
+		foreach ($results as $result)
+		{
+			$dictionary[$result->pivot->$foreign][] = $result;
+		}
+
+		return $dictionary;
+	}
+
+	/**
+	 * Touch all of the related models for the relationship.
+	 *
+	 * E.g.: Touch all roles associated with this user.
+	 *
+	 * @return void
+	 */
+	public function touch()
+	{
+		$key = $this->getRelated()->getKeyName();
+
+		$columns = $this->getRelatedFreshUpdate();
+
+		// If we actually have IDs for the relation, we will run the query to update all
+		// the related model's timestamps, to make sure these all reflect the changes
+		// to the parent models. This will help us keep any caching synced up here.
+		$ids = $this->getRelatedIds();
+
+		if (count($ids) > 0)
+		{
+			$this->getRelated()->newQuery()->whereIn($key, $ids)->update($columns);
+		}
+	}
+
+	/**
+	 * Get all of the IDs for the related models.
+	 *
+	 * @return array
+	 */
+	public function getRelatedIds()
+	{
+		$related = $this->getRelated();
+
+		$fullKey = $related->getQualifiedKeyName();
+
+		return $this->getQuery()->select($fullKey)->lists($related->getKeyName());
+	}
+
+	/**
+	 * Save a new model and attach it to the parent model.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Model  $model
+	 * @param  array  $joining
+	 * @param  bool   $touch
+	 * @return \Illuminate\Database\Eloquent\Model
+	 */
+	public function save(Model $model, array $joining = array(), $touch = true)
+	{
+		$model->save(array('touch' => false));
+
+		$this->attach($model->getKey(), $joining, $touch);
+
+		return $model;
+	}
+
+	/**
+	 * Save an array of new models and attach them to the parent model.
+	 *
+	 * @param  array  $models
+	 * @param  array  $joinings
+	 * @return array
+	 */
+	public function saveMany(array $models, array $joinings = array())
+	{
+		foreach ($models as $key => $model)
+		{
+			$this->save($model, (array) array_get($joinings, $key), false);
+		}
+
+		$this->touchIfTouching();
+
+		return $models;
+	}
+
+	/**
+	 * Create a new instance of the related model.
+	 *
+	 * @param  array  $attributes
+	 * @param  array  $joining
+	 * @param  bool   $touch
+	 * @return \Illuminate\Database\Eloquent\Model
+	 */
+	public function create(array $attributes, array $joining = array(), $touch = true)
+	{
+		$instance = $this->related->newInstance($attributes);
+
+		// Once we save the related model, we need to attach it to the base model via
+		// through intermediate table so we'll use the existing "attach" method to
+		// accomplish this which will insert the record and any more attributes.
+		$instance->save(array('touch' => false));
+
+		$this->attach($instance->getKey(), $joining, $touch);
+
+		return $instance;
+	}
+
+	/**
+	 * Create an array of new instances of the related models.
+	 *
+	 * @param  array  $records
+	 * @param  array  $joinings
+	 * @return \Illuminate\Database\Eloquent\Model
+	 */
+	public function createMany(array $records, array $joinings = array())
+	{
+		$instances = array();
+
+		foreach ($records as $key => $record)
+		{
+			$instances[] = $this->create($record, (array) array_get($joinings, $key), false);
+		}
+
+		$this->touchIfTouching();
+
+		return $instances;
+	}
+
+	/**
+	 * Sync the intermediate tables with a list of IDs or collection of models.
+	 *
+	 * @param  array  $ids
+	 * @param  bool   $detaching
+	 * @return array
+	 */
+	public function sync($ids, $detaching = true)
+	{
+		$changes = array(
+			'attached' => array(), 'detached' => array(), 'updated' => array()
+		);
+
+		if ($ids instanceof Collection) $ids = $ids->modelKeys();
+
+		// First we need to attach any of the associated models that are not currently
+		// in this joining table. We'll spin through the given IDs, checking to see
+		// if they exist in the array of current ones, and if not we will insert.
+		$current = $this->newPivotQuery()->lists($this->otherKey);
+
+		$records = $this->formatSyncList($ids);
+
+		$detach = array_diff($current, array_keys($records));
+
+		// Next, we will take the differences of the currents and given IDs and detach
+		// all of the entities that exist in the "current" array but are not in the
+		// the array of the IDs given to the method which will complete the sync.
+		if ($detaching && count($detach) > 0)
+		{
+			$this->detach($detach);
+
+			$changes['detached'] = (array) array_map(function($v) { return (int) $v; }, $detach);
+		}
+
+		// Now we are finally ready to attach the new records. Note that we'll disable
+		// touching until after the entire operation is complete so we don't fire a
+		// ton of touch operations until we are totally done syncing the records.
+		$changes = array_merge(
+			$changes, $this->attachNew($records, $current, false)
+		);
+
+		if (count($changes['attached']) || count($changes['updated']))
+		{
+			$this->touchIfTouching();
+		}
+
+		return $changes;
+	}
+
+	/**
+	 * Format the sync list so that it is keyed by ID.
+	 *
+	 * @param  array  $records
+	 * @return array
+	 */
+	protected function formatSyncList(array $records)
+	{
+		$results = array();
+
+		foreach ($records as $id => $attributes)
+		{
+			if ( ! is_array($attributes))
+			{
+				list($id, $attributes) = array($attributes, array());
+			}
+
+			$results[$id] = $attributes;
+		}
+
+		return $results;
+	}
+
+	/**
+	 * Attach all of the IDs that aren't in the current array.
+	 *
+	 * @param  array  $records
+	 * @param  array  $current
+	 * @param  bool   $touch
+	 * @return array
+	 */
+	protected function attachNew(array $records, array $current, $touch = true)
+	{
+		$changes = array('attached' => array(), 'updated' => array());
+
+		foreach ($records as $id => $attributes)
+		{
+			// If the ID is not in the list of existing pivot IDs, we will insert a new pivot
+			// record, otherwise, we will just update this existing record on this joining
+			// table, so that the developers will easily update these records pain free.
+			if ( ! in_array($id, $current))
+			{
+				$this->attach($id, $attributes, $touch);
+
+				$changes['attached'][] = (int) $id;
+			}
+
+			// Now we'll try to update an existing pivot record with the attributes that were
+			// given to the method. If the model is actually updated we will add it to the
+			// list of updated pivot records so we return them back out to the consumer.
+			elseif (count($attributes) > 0 &&
+				$this->updateExistingPivot($id, $attributes, $touch))
+			{
+				$changes['updated'][] = (int) $id;
+			}
+		}
+
+		return $changes;
+	}
+
+	/**
+	 * Update an existing pivot record on the table.
+	 *
+	 * @param  mixed  $id
+	 * @param  array  $attributes
+	 * @param  bool   $touch
+	 * @return void
+	 */
+	public function updateExistingPivot($id, array $attributes, $touch = true)
+	{
+		if (in_array($this->updatedAt(), $this->pivotColumns))
+		{
+			$attributes = $this->setTimestampsOnAttach($attributes, true);
+		}
+
+		$updated = $this->newPivotStatementForId($id)->update($attributes);
+
+		if ($touch) $this->touchIfTouching();
+
+		return $updated;
+	}
+
+	/**
+	 * Attach a model to the parent.
+	 *
+	 * @param  mixed  $id
+	 * @param  array  $attributes
+	 * @param  bool   $touch
+	 * @return void
+	 */
+	public function attach($id, array $attributes = array(), $touch = true)
+	{
+		if ($id instanceof Model) $id = $id->getKey();
+
+		$query = $this->newPivotStatement();
+
+		$query->insert($this->createAttachRecords((array) $id, $attributes));
+
+		if ($touch) $this->touchIfTouching();
+	}
+
+	/**
+	 * Create an array of records to insert into the pivot table.
+	 *
+	 * @param  array  $ids
+	 * @param  array  $attributes
+	 * @return array
+	 */
+	protected function createAttachRecords($ids, array $attributes)
+	{
+		$records = array();
+
+		$timed = ($this->hasPivotColumn($this->createdAt()) || $this->hasPivotColumn($this->updatedAt()));
+
+		// To create the attachment records, we will simply spin through the IDs given
+		// and create a new record to insert for each ID. Each ID may actually be a
+		// key in the array, with extra attributes to be placed in other columns.
+		foreach ($ids as $key => $value)
+		{
+			$records[] = $this->attacher($key, $value, $attributes, $timed);
+		}
+
+		return $records;
+	}
+
+	/**
+	 * Create a full attachment record payload.
+	 *
+	 * @param  int    $key
+	 * @param  mixed  $value
+	 * @param  array  $attributes
+	 * @param  bool   $timed
+	 * @return array
+	 */
+	protected function attacher($key, $value, $attributes, $timed)
+	{
+		list($id, $extra) = $this->getAttachId($key, $value, $attributes);
+
+		// To create the attachment records, we will simply spin through the IDs given
+		// and create a new record to insert for each ID. Each ID may actually be a
+		// key in the array, with extra attributes to be placed in other columns.
+		$record = $this->createAttachRecord($id, $timed);
+
+		return array_merge($record, $extra);
+	}
+
+	/**
+	 * Get the attach record ID and extra attributes.
+	 *
+	 * @param  mixed  $key
+	 * @param  mixed  $value
+	 * @param  array  $attributes
+	 * @return array
+	 */
+	protected function getAttachId($key, $value, array $attributes)
+	{
+		if (is_array($value))
+		{
+			return array($key, array_merge($value, $attributes));
+		}
+
+		return array($value, $attributes);
+	}
+
+	/**
+	 * Create a new pivot attachment record.
+	 *
+	 * @param  int   $id
+	 * @param  bool  $timed
+	 * @return array
+	 */
+	protected function createAttachRecord($id, $timed)
+	{
+		$record[$this->foreignKey] = $this->parent->getKey();
+
+		$record[$this->otherKey] = $id;
+
+		// If the record needs to have creation and update timestamps, we will make
+		// them by calling the parent model's "freshTimestamp" method which will
+		// provide us with a fresh timestamp in this model's preferred format.
+		if ($timed)
+		{
+			$record = $this->setTimestampsOnAttach($record);
+		}
+
+		return $record;
+	}
+
+	/**
+	 * Set the creation and update timestamps on an attach record.
+	 *
+	 * @param  array  $record
+	 * @param  bool   $exists
+	 * @return array
+	 */
+	protected function setTimestampsOnAttach(array $record, $exists = false)
+	{
+		$fresh = $this->parent->freshTimestamp();
+
+		if ( ! $exists && $this->hasPivotColumn($this->createdAt()))
+		{
+			$record[$this->createdAt()] = $fresh;
+		}
+
+		if ($this->hasPivotColumn($this->updatedAt()))
+		{
+			$record[$this->updatedAt()] = $fresh;
+		}
+
+		return $record;
+	}
+
+	/**
+	 * Detach models from the relationship.
+	 *
+	 * @param  int|array  $ids
+	 * @param  bool  $touch
+	 * @return int
+	 */
+	public function detach($ids = array(), $touch = true)
+	{
+		if ($ids instanceof Model) $ids = (array) $ids->getKey();
+
+		$query = $this->newPivotQuery();
+
+		// If associated IDs were passed to the method we will only delete those
+		// associations, otherwise all of the association ties will be broken.
+		// We'll return the numbers of affected rows when we do the deletes.
+		$ids = (array) $ids;
+
+		if (count($ids) > 0)
+		{
+			$query->whereIn($this->otherKey, (array) $ids);
+		}
+
+		if ($touch) $this->touchIfTouching();
+
+		// Once we have all of the conditions set on the statement, we are ready
+		// to run the delete on the pivot table. Then, if the touch parameter
+		// is true, we will go ahead and touch all related models to sync.
+		$results = $query->delete();
+
+		return $results;
+	}
+
+	/**
+	 * If we're touching the parent model, touch.
+	 *
+	 * @return void
+	 */
+	public function touchIfTouching()
+	{
+		if ($this->touchingParent()) $this->getParent()->touch();
+
+		if ($this->getParent()->touches($this->relationName)) $this->touch();
+	}
+
+	/**
+	 * Determine if we should touch the parent on sync.
+	 *
+	 * @return bool
+	 */
+	protected function touchingParent()
+	{
+		return $this->getRelated()->touches($this->guessInverseRelation());
+	}
+
+	/**
+	 * Attempt to guess the name of the inverse of the relation.
+	 *
+	 * @return string
+	 */
+	protected function guessInverseRelation()
+	{
+		return camel_case(str_plural(class_basename($this->getParent())));
+	}
+
+	/**
+	 * Create a new query builder for the pivot table.
+	 *
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	protected function newPivotQuery()
+	{
+		$query = $this->newPivotStatement();
+
+		foreach ($this->pivotWheres as $whereArgs)
+		{
+			call_user_func_array([$query, 'where'], $whereArgs);
+		}
+
+		return $query->where($this->foreignKey, $this->parent->getKey());
+	}
+
+	/**
+	 * Get a new plain query builder for the pivot table.
+	 *
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	public function newPivotStatement()
+	{
+		return $this->query->getQuery()->newQuery()->from($this->table);
+	}
+
+	/**
+	 * Get a new pivot statement for a given "other" ID.
+	 *
+	 * @param  mixed  $id
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	public function newPivotStatementForId($id)
+	{
+		return $this->newPivotQuery()->where($this->otherKey, $id);
+	}
+
+	/**
+	 * Create a new pivot model instance.
+	 *
+	 * @param  array  $attributes
+	 * @param  bool   $exists
+	 * @return \Illuminate\Database\Eloquent\Relations\Pivot
+	 */
+	public function newPivot(array $attributes = array(), $exists = false)
+	{
+		$pivot = $this->related->newPivot($this->parent, $attributes, $this->table, $exists);
+
+		return $pivot->setPivotKeys($this->foreignKey, $this->otherKey);
+	}
+
+	/**
+	 * Create a new existing pivot model instance.
+	 *
+	 * @param  array  $attributes
+	 * @return \Illuminate\Database\Eloquent\Relations\Pivot
+	 */
+	public function newExistingPivot(array $attributes = array())
+	{
+		return $this->newPivot($attributes, true);
+	}
+
+	/**
+	 * Set the columns on the pivot table to retrieve.
+	 *
+	 * @param  mixed  $columns
+	 * @return $this
+	 */
+	public function withPivot($columns)
+	{
+		$columns = is_array($columns) ? $columns : func_get_args();
+
+		$this->pivotColumns = array_merge($this->pivotColumns, $columns);
+
+		return $this;
+	}
+
+	/**
+	 * Specify that the pivot table has creation and update timestamps.
+	 *
+	 * @param  mixed  $createdAt
+	 * @param  mixed  $updatedAt
+	 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
+	 */
+	public function withTimestamps($createdAt = null, $updatedAt = null)
+	{
+		return $this->withPivot($createdAt ?: $this->createdAt(), $updatedAt ?: $this->updatedAt());
+	}
+
+	/**
+	 * Get the related model's updated at column name.
+	 *
+	 * @return string
+	 */
+	public function getRelatedFreshUpdate()
+	{
+		return array($this->related->getUpdatedAtColumn() => $this->related->freshTimestamp());
+	}
+
+	/**
+	 * Get the key for comparing against the parent key in "has" query.
+	 *
+	 * @return string
+	 */
+	public function getHasCompareKey()
+	{
+		return $this->getForeignKey();
+	}
+
+	/**
+	 * Get the fully qualified foreign key for the relation.
+	 *
+	 * @return string
+	 */
+	public function getForeignKey()
+	{
+		return $this->table.'.'.$this->foreignKey;
+	}
+
+	/**
+	 * Get the fully qualified "other key" for the relation.
+	 *
+	 * @return string
+	 */
+	public function getOtherKey()
+	{
+		return $this->table.'.'.$this->otherKey;
+	}
+
+	/**
+	 * Get the intermediate table for the relationship.
+	 *
+	 * @return string
+	 */
+	public function getTable()
+	{
+		return $this->table;
+	}
+
+	/**
+	 * Get the relationship name for the relationship.
+	 *
+	 * @return string
+	 */
+	public function getRelationName()
+	{
+		return $this->relationName;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasMany.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasMany.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasMany.php
new file mode 100755
index 0000000..159a658
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasMany.php
@@ -0,0 +1,47 @@
+<?php namespace Illuminate\Database\Eloquent\Relations;
+
+use Illuminate\Database\Eloquent\Collection;
+
+class HasMany extends HasOneOrMany {
+
+	/**
+	 * Get the results of the relationship.
+	 *
+	 * @return mixed
+	 */
+	public function getResults()
+	{
+		return $this->query->get();
+	}
+
+	/**
+	 * Initialize the relation on a set of models.
+	 *
+	 * @param  array   $models
+	 * @param  string  $relation
+	 * @return array
+	 */
+	public function initRelation(array $models, $relation)
+	{
+		foreach ($models as $model)
+		{
+			$model->setRelation($relation, $this->related->newCollection());
+		}
+
+		return $models;
+	}
+
+	/**
+	 * Match the eagerly loaded results to their parents.
+	 *
+	 * @param  array   $models
+	 * @param  \Illuminate\Database\Eloquent\Collection  $results
+	 * @param  string  $relation
+	 * @return array
+	 */
+	public function match(array $models, Collection $results, $relation)
+	{
+		return $this->matchMany($models, $results, $relation);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasManyThrough.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasManyThrough.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasManyThrough.php
new file mode 100644
index 0000000..d0e33a7
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasManyThrough.php
@@ -0,0 +1,263 @@
+<?php namespace Illuminate\Database\Eloquent\Relations;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Query\Expression;
+use Illuminate\Database\Eloquent\Collection;
+
+class HasManyThrough extends Relation {
+
+	/**
+	 * The distance parent model instance.
+	 *
+	 * @var \Illuminate\Database\Eloquent\Model
+	 */
+	protected $farParent;
+
+	/**
+	 * The near key on the relationship.
+	 *
+	 * @var string
+	 */
+	protected $firstKey;
+
+	/**
+	 * The far key on the relationship.
+	 *
+	 * @var string
+	 */
+	protected $secondKey;
+
+	/**
+	 * Create a new has many relationship instance.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @param  \Illuminate\Database\Eloquent\Model  $farParent
+	 * @param  \Illuminate\Database\Eloquent\Model  $parent
+	 * @param  string  $firstKey
+	 * @param  string  $secondKey
+	 * @return void
+	 */
+	public function __construct(Builder $query, Model $farParent, Model $parent, $firstKey, $secondKey)
+	{
+		$this->firstKey = $firstKey;
+		$this->secondKey = $secondKey;
+		$this->farParent = $farParent;
+
+		parent::__construct($query, $parent);
+	}
+
+	/**
+	 * Set the base constraints on the relation query.
+	 *
+	 * @return void
+	 */
+	public function addConstraints()
+	{
+		$parentTable = $this->parent->getTable();
+
+		$this->setJoin();
+
+		if (static::$constraints)
+		{
+			$this->query->where($parentTable.'.'.$this->firstKey, '=', $this->farParent->getKey());
+		}
+	}
+
+	/**
+	 * Add the constraints for a relationship count query.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @param  \Illuminate\Database\Eloquent\Builder  $parent
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	public function getRelationCountQuery(Builder $query, Builder $parent)
+	{
+		$parentTable = $this->parent->getTable();
+
+		$this->setJoin($query);
+
+		$query->select(new Expression('count(*)'));
+
+		$key = $this->wrap($parentTable.'.'.$this->firstKey);
+
+		return $query->where($this->getHasCompareKey(), '=', new Expression($key));
+	}
+
+	/**
+	 * Set the join clause on the query.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder|null  $query
+	 * @return void
+	 */
+	protected function setJoin(Builder $query = null)
+	{
+		$query = $query ?: $this->query;
+
+		$foreignKey = $this->related->getTable().'.'.$this->secondKey;
+
+		$query->join($this->parent->getTable(), $this->getQualifiedParentKeyName(), '=', $foreignKey);
+	}
+
+	/**
+	 * Set the constraints for an eager load of the relation.
+	 *
+	 * @param  array  $models
+	 * @return void
+	 */
+	public function addEagerConstraints(array $models)
+	{
+		$table = $this->parent->getTable();
+
+		$this->query->whereIn($table.'.'.$this->firstKey, $this->getKeys($models));
+	}
+
+	/**
+	 * Initialize the relation on a set of models.
+	 *
+	 * @param  array   $models
+	 * @param  string  $relation
+	 * @return array
+	 */
+	public function initRelation(array $models, $relation)
+	{
+		foreach ($models as $model)
+		{
+			$model->setRelation($relation, $this->related->newCollection());
+		}
+
+		return $models;
+	}
+
+	/**
+	 * Match the eagerly loaded results to their parents.
+	 *
+	 * @param  array   $models
+	 * @param  \Illuminate\Database\Eloquent\Collection  $results
+	 * @param  string  $relation
+	 * @return array
+	 */
+	public function match(array $models, Collection $results, $relation)
+	{
+		$dictionary = $this->buildDictionary($results);
+
+		// Once we have the dictionary we can simply spin through the parent models to
+		// link them up with their children using the keyed dictionary to make the
+		// matching very convenient and easy work. Then we'll just return them.
+		foreach ($models as $model)
+		{
+			$key = $model->getKey();
+
+			if (isset($dictionary[$key]))
+			{
+				$value = $this->related->newCollection($dictionary[$key]);
+
+				$model->setRelation($relation, $value);
+			}
+		}
+
+		return $models;
+	}
+
+	/**
+	 * Build model dictionary keyed by the relation's foreign key.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Collection  $results
+	 * @return array
+	 */
+	protected function buildDictionary(Collection $results)
+	{
+		$dictionary = array();
+
+		$foreign = $this->firstKey;
+
+		// First we will create a dictionary of models keyed by the foreign key of the
+		// relationship as this will allow us to quickly access all of the related
+		// models without having to do nested looping which will be quite slow.
+		foreach ($results as $result)
+		{
+			$dictionary[$result->{$foreign}][] = $result;
+		}
+
+		return $dictionary;
+	}
+
+	/**
+	 * Get the results of the relationship.
+	 *
+	 * @return mixed
+	 */
+	public function getResults()
+	{
+		return $this->get();
+	}
+
+	/**
+	 * Execute the query as a "select" statement.
+	 *
+	 * @param  array  $columns
+	 * @return \Illuminate\Database\Eloquent\Collection
+	 */
+	public function get($columns = array('*'))
+	{
+		// First we'll add the proper select columns onto the query so it is run with
+		// the proper columns. Then, we will get the results and hydrate out pivot
+		// models with the result of those columns as a separate model relation.
+		$select = $this->getSelectColumns($columns);
+
+		$models = $this->query->addSelect($select)->getModels();
+
+		// If we actually found models we will also eager load any relationships that
+		// have been specified as needing to be eager loaded. This will solve the
+		// n + 1 query problem for the developer and also increase performance.
+		if (count($models) > 0)
+		{
+			$models = $this->query->eagerLoadRelations($models);
+		}
+
+		return $this->related->newCollection($models);
+	}
+
+	/**
+	 * Set the select clause for the relation query.
+	 *
+	 * @param  array  $columns
+	 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
+	 */
+	protected function getSelectColumns(array $columns = array('*'))
+	{
+		if ($columns == array('*'))
+		{
+			$columns = array($this->related->getTable().'.*');
+		}
+
+		return array_merge($columns, array($this->parent->getTable().'.'.$this->firstKey));
+	}
+
+	/**
+	 * Get a paginator for the "select" statement.
+	 *
+	 * @param  int    $perPage
+	 * @param  array  $columns
+	 * @return \Illuminate\Pagination\Paginator
+	 */
+	public function paginate($perPage = null, $columns = array('*'))
+	{
+		$this->query->addSelect($this->getSelectColumns($columns));
+
+		$pager = $this->query->paginate($perPage, $columns);
+
+		return $pager;
+	}
+
+	/**
+	 * Get the key for comparing against the parent key in "has" query.
+	 *
+	 * @return string
+	 */
+	public function getHasCompareKey()
+	{
+		return $this->farParent->getQualifiedKeyName();
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOne.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOne.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOne.php
new file mode 100755
index 0000000..fd0f9a0
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOne.php
@@ -0,0 +1,47 @@
+<?php namespace Illuminate\Database\Eloquent\Relations;
+
+use Illuminate\Database\Eloquent\Collection;
+
+class HasOne extends HasOneOrMany {
+
+	/**
+	 * Get the results of the relationship.
+	 *
+	 * @return mixed
+	 */
+	public function getResults()
+	{
+		return $this->query->first();
+	}
+
+	/**
+	 * Initialize the relation on a set of models.
+	 *
+	 * @param  array   $models
+	 * @param  string  $relation
+	 * @return array
+	 */
+	public function initRelation(array $models, $relation)
+	{
+		foreach ($models as $model)
+		{
+			$model->setRelation($relation, null);
+		}
+
+		return $models;
+	}
+
+	/**
+	 * Match the eagerly loaded results to their parents.
+	 *
+	 * @param  array   $models
+	 * @param  \Illuminate\Database\Eloquent\Collection  $results
+	 * @param  string  $relation
+	 * @return array
+	 */
+	public function match(array $models, Collection $results, $relation)
+	{
+		return $this->matchOne($models, $results, $relation);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php
new file mode 100755
index 0000000..83bc7ee
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php
@@ -0,0 +1,291 @@
+<?php namespace Illuminate\Database\Eloquent\Relations;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Collection;
+
+abstract class HasOneOrMany extends Relation {
+
+	/**
+	 * The foreign key of the parent model.
+	 *
+	 * @var string
+	 */
+	protected $foreignKey;
+
+	/**
+	 * The local key of the parent model.
+	 *
+	 * @var string
+	 */
+	protected $localKey;
+
+	/**
+	 * Create a new has many relationship instance.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @param  \Illuminate\Database\Eloquent\Model  $parent
+	 * @param  string  $foreignKey
+	 * @param  string  $localKey
+	 * @return void
+	 */
+	public function __construct(Builder $query, Model $parent, $foreignKey, $localKey)
+	{
+		$this->localKey = $localKey;
+		$this->foreignKey = $foreignKey;
+
+		parent::__construct($query, $parent);
+	}
+
+	/**
+	 * Set the base constraints on the relation query.
+	 *
+	 * @return void
+	 */
+	public function addConstraints()
+	{
+		if (static::$constraints)
+		{
+			$this->query->where($this->foreignKey, '=', $this->getParentKey());
+		}
+	}
+
+	/**
+	 * Set the constraints for an eager load of the relation.
+	 *
+	 * @param  array  $models
+	 * @return void
+	 */
+	public function addEagerConstraints(array $models)
+	{
+		$this->query->whereIn($this->foreignKey, $this->getKeys($models, $this->localKey));
+	}
+
+	/**
+	 * Match the eagerly loaded results to their single parents.
+	 *
+	 * @param  array   $models
+	 * @param  \Illuminate\Database\Eloquent\Collection  $results
+	 * @param  string  $relation
+	 * @return array
+	 */
+	public function matchOne(array $models, Collection $results, $relation)
+	{
+		return $this->matchOneOrMany($models, $results, $relation, 'one');
+	}
+
+	/**
+	 * Match the eagerly loaded results to their many parents.
+	 *
+	 * @param  array   $models
+	 * @param  \Illuminate\Database\Eloquent\Collection  $results
+	 * @param  string  $relation
+	 * @return array
+	 */
+	public function matchMany(array $models, Collection $results, $relation)
+	{
+		return $this->matchOneOrMany($models, $results, $relation, 'many');
+	}
+
+	/**
+	 * Match the eagerly loaded results to their many parents.
+	 *
+	 * @param  array   $models
+	 * @param  \Illuminate\Database\Eloquent\Collection  $results
+	 * @param  string  $relation
+	 * @param  string  $type
+	 * @return array
+	 */
+	protected function matchOneOrMany(array $models, Collection $results, $relation, $type)
+	{
+		$dictionary = $this->buildDictionary($results);
+
+		// Once we have the dictionary we can simply spin through the parent models to
+		// link them up with their children using the keyed dictionary to make the
+		// matching very convenient and easy work. Then we'll just return them.
+		foreach ($models as $model)
+		{
+			$key = $model->getAttribute($this->localKey);
+
+			if (isset($dictionary[$key]))
+			{
+				$value = $this->getRelationValue($dictionary, $key, $type);
+
+				$model->setRelation($relation, $value);
+			}
+		}
+
+		return $models;
+	}
+
+	/**
+	 * Get the value of a relationship by one or many type.
+	 *
+	 * @param  array   $dictionary
+	 * @param  string  $key
+	 * @param  string  $type
+	 * @return mixed
+	 */
+	protected function getRelationValue(array $dictionary, $key, $type)
+	{
+		$value = $dictionary[$key];
+
+		return $type == 'one' ? reset($value) : $this->related->newCollection($value);
+	}
+
+	/**
+	 * Build model dictionary keyed by the relation's foreign key.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Collection  $results
+	 * @return array
+	 */
+	protected function buildDictionary(Collection $results)
+	{
+		$dictionary = array();
+
+		$foreign = $this->getPlainForeignKey();
+
+		// First we will create a dictionary of models keyed by the foreign key of the
+		// relationship as this will allow us to quickly access all of the related
+		// models without having to do nested looping which will be quite slow.
+		foreach ($results as $result)
+		{
+			$dictionary[$result->{$foreign}][] = $result;
+		}
+
+		return $dictionary;
+	}
+
+	/**
+	 * Attach a model instance to the parent model.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Model  $model
+	 * @return \Illuminate\Database\Eloquent\Model
+	 */
+	public function save(Model $model)
+	{
+		$model->setAttribute($this->getPlainForeignKey(), $this->getParentKey());
+
+		return $model->save() ? $model : false;
+	}
+
+	/**
+	 * Attach an array of models to the parent instance.
+	 *
+	 * @param  array  $models
+	 * @return array
+	 */
+	public function saveMany(array $models)
+	{
+		array_walk($models, array($this, 'save'));
+
+		return $models;
+	}
+
+	/**
+	 * Create a new instance of the related model.
+	 *
+	 * @param  array  $attributes
+	 * @return \Illuminate\Database\Eloquent\Model
+	 */
+	public function create(array $attributes)
+	{
+		// Here we will set the raw attributes to avoid hitting the "fill" method so
+		// that we do not have to worry about a mass accessor rules blocking sets
+		// on the models. Otherwise, some of these attributes will not get set.
+		$instance = $this->related->newInstance($attributes);
+
+		$instance->setAttribute($this->getPlainForeignKey(), $this->getParentKey());
+
+		$instance->save();
+
+		return $instance;
+	}
+
+	/**
+	 * Create an array of new instances of the related model.
+	 *
+	 * @param  array  $records
+	 * @return array
+	 */
+	public function createMany(array $records)
+	{
+		$instances = array();
+
+		foreach ($records as $record)
+		{
+			$instances[] = $this->create($record);
+		}
+
+		return $instances;
+	}
+
+	/**
+	 * Perform an update on all the related models.
+	 *
+	 * @param  array  $attributes
+	 * @return int
+	 */
+	public function update(array $attributes)
+	{
+		if ($this->related->usesTimestamps())
+		{
+			$attributes[$this->relatedUpdatedAt()] = $this->related->freshTimestamp();
+		}
+
+		return $this->query->update($attributes);
+	}
+
+	/**
+	 * Get the key for comparing against the parent key in "has" query.
+	 *
+	 * @return string
+	 */
+	public function getHasCompareKey()
+	{
+		return $this->getForeignKey();
+	}
+
+	/**
+	 * Get the foreign key for the relationship.
+	 *
+	 * @return string
+	 */
+	public function getForeignKey()
+	{
+		return $this->foreignKey;
+	}
+
+	/**
+	 * Get the plain foreign key.
+	 *
+	 * @return string
+	 */
+	public function getPlainForeignKey()
+	{
+		$segments = explode('.', $this->getForeignKey());
+
+		return $segments[count($segments) - 1];
+	}
+
+	/**
+	 * Get the key value of the parent's local key.
+	 *
+	 * @return mixed
+	 */
+	public function getParentKey()
+	{
+		return $this->parent->getAttribute($this->localKey);
+	}
+
+	/**
+	 * Get the fully qualified parent key name.
+	 *
+	 * @return string
+	 */
+	public function getQualifiedParentKeyName()
+	{
+		return $this->parent->getTable().'.'.$this->localKey;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphMany.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphMany.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphMany.php
new file mode 100755
index 0000000..1abdf37
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphMany.php
@@ -0,0 +1,47 @@
+<?php namespace Illuminate\Database\Eloquent\Relations;
+
+use Illuminate\Database\Eloquent\Collection;
+
+class MorphMany extends MorphOneOrMany {
+
+	/**
+	 * Get the results of the relationship.
+	 *
+	 * @return mixed
+	 */
+	public function getResults()
+	{
+		return $this->query->get();
+	}
+
+	/**
+	 * Initialize the relation on a set of models.
+	 *
+	 * @param  array   $models
+	 * @param  string  $relation
+	 * @return array
+	 */
+	public function initRelation(array $models, $relation)
+	{
+		foreach ($models as $model)
+		{
+			$model->setRelation($relation, $this->related->newCollection());
+		}
+
+		return $models;
+	}
+
+	/**
+	 * Match the eagerly loaded results to their parents.
+	 *
+	 * @param  array   $models
+	 * @param  \Illuminate\Database\Eloquent\Collection  $results
+	 * @param  string  $relation
+	 * @return array
+	 */
+	public function match(array $models, Collection $results, $relation)
+	{
+		return $this->matchMany($models, $results, $relation);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOne.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOne.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOne.php
new file mode 100755
index 0000000..fdebc24
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOne.php
@@ -0,0 +1,47 @@
+<?php namespace Illuminate\Database\Eloquent\Relations;
+
+use Illuminate\Database\Eloquent\Collection;
+
+class MorphOne extends MorphOneOrMany {
+
+	/**
+	 * Get the results of the relationship.
+	 *
+	 * @return mixed
+	 */
+	public function getResults()
+	{
+		return $this->query->first();
+	}
+
+	/**
+	 * Initialize the relation on a set of models.
+	 *
+	 * @param  array   $models
+	 * @param  string  $relation
+	 * @return array
+	 */
+	public function initRelation(array $models, $relation)
+	{
+		foreach ($models as $model)
+		{
+			$model->setRelation($relation, null);
+		}
+
+		return $models;
+	}
+
+	/**
+	 * Match the eagerly loaded results to their parents.
+	 *
+	 * @param  array   $models
+	 * @param  \Illuminate\Database\Eloquent\Collection  $results
+	 * @param  string  $relation
+	 * @return array
+	 */
+	public function match(array $models, Collection $results, $relation)
+	{
+		return $this->matchOne($models, $results, $relation);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOneOrMany.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOneOrMany.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOneOrMany.php
new file mode 100755
index 0000000..4a20351
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOneOrMany.php
@@ -0,0 +1,159 @@
+<?php namespace Illuminate\Database\Eloquent\Relations;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Builder;
+
+abstract class MorphOneOrMany extends HasOneOrMany {
+
+	/**
+	 * The foreign key type for the relationship.
+	 *
+	 * @var string
+	 */
+	protected $morphType;
+
+	/**
+	 * The class name of the parent model.
+	 *
+	 * @var string
+	 */
+	protected $morphClass;
+
+	/**
+	 * Create a new has many relationship instance.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @param  \Illuminate\Database\Eloquent\Model  $parent
+	 * @param  string  $type
+	 * @param  string  $id
+	 * @param  string  $localKey
+	 * @return void
+	 */
+	public function __construct(Builder $query, Model $parent, $type, $id, $localKey)
+	{
+		$this->morphType = $type;
+
+		$this->morphClass = $parent->getMorphClass();
+
+		parent::__construct($query, $parent, $id, $localKey);
+	}
+
+	/**
+	 * Set the base constraints on the relation query.
+	 *
+	 * @return void
+	 */
+	public function addConstraints()
+	{
+		if (static::$constraints)
+		{
+			parent::addConstraints();
+
+			$this->query->where($this->morphType, $this->morphClass);
+		}
+	}
+
+	/**
+	 * Get the relationship count query.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @param  \Illuminate\Database\Eloquent\Builder  $parent
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	public function getRelationCountQuery(Builder $query, Builder $parent)
+	{
+		$query = parent::getRelationCountQuery($query, $parent);
+
+		return $query->where($this->morphType, $this->morphClass);
+	}
+
+	/**
+	 * Set the constraints for an eager load of the relation.
+	 *
+	 * @param  array  $models
+	 * @return void
+	 */
+	public function addEagerConstraints(array $models)
+	{
+		parent::addEagerConstraints($models);
+
+		$this->query->where($this->morphType, $this->morphClass);
+	}
+
+	/**
+	 * Attach a model instance to the parent model.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Model  $model
+	 * @return \Illuminate\Database\Eloquent\Model
+	 */
+	public function save(Model $model)
+	{
+		$model->setAttribute($this->getPlainMorphType(), $this->morphClass);
+
+		return parent::save($model);
+	}
+
+	/**
+	 * Create a new instance of the related model.
+	 *
+	 * @param  array  $attributes
+	 * @return \Illuminate\Database\Eloquent\Model
+	 */
+	public function create(array $attributes)
+	{
+		$instance = $this->related->newInstance($attributes);
+
+		// When saving a polymorphic relationship, we need to set not only the foreign
+		// key, but also the foreign key type, which is typically the class name of
+		// the parent model. This makes the polymorphic item unique in the table.
+		$this->setForeignAttributesForCreate($instance);
+
+		$instance->save();
+
+		return $instance;
+	}
+
+	/**
+	 * Set the foreign ID and type for creating a related model.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Model  $model
+	 * @return void
+	 */
+	protected function setForeignAttributesForCreate(Model $model)
+	{
+		$model->{$this->getPlainForeignKey()} = $this->getParentKey();
+
+		$model->{last(explode('.', $this->morphType))} = $this->morphClass;
+	}
+
+	/**
+	 * Get the foreign key "type" name.
+	 *
+	 * @return string
+	 */
+	public function getMorphType()
+	{
+		return $this->morphType;
+	}
+
+	/**
+	 * Get the plain morph type name without the table.
+	 *
+	 * @return string
+	 */
+	public function getPlainMorphType()
+	{
+		return last(explode('.', $this->morphType));
+	}
+
+	/**
+	 * Get the class name of the parent model.
+	 *
+	 * @return string
+	 */
+	public function getMorphClass()
+	{
+		return $this->morphClass;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphPivot.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphPivot.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphPivot.php
new file mode 100644
index 0000000..d6c773f
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphPivot.php
@@ -0,0 +1,79 @@
+<?php namespace Illuminate\Database\Eloquent\Relations;
+
+use Illuminate\Database\Eloquent\Builder;
+
+class MorphPivot extends Pivot {
+
+	/**
+	 * The type of the polymorphic relation.
+	 *
+	 * Explicitly define this so it's not included in saved attributes.
+	 *
+	 * @var string
+	 */
+	protected $morphType;
+
+	/**
+	 * The value of the polymorphic relation.
+	 *
+	 * Explicitly define this so it's not included in saved attributes.
+	 *
+	 * @var string
+	 */
+	protected $morphClass;
+
+	/**
+	 * Set the keys for a save update query.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	protected function setKeysForSaveQuery(Builder $query)
+	{
+		$query->where($this->morphType, $this->morphClass);
+
+		return parent::setKeysForSaveQuery($query);
+	}
+
+	/**
+	 * Delete the pivot model record from the database.
+	 *
+	 * @return int
+	 */
+	public function delete()
+	{
+		$query = $this->getDeleteQuery();
+
+		$query->where($this->morphType, $this->morphClass);
+
+		return $query->delete();
+	}
+
+	/**
+	 * Set the morph type for the pivot.
+	 *
+	 * @param  string  $morphType
+	 * @return $this
+	 */
+	public function setMorphType($morphType)
+	{
+		$this->morphType = $morphType;
+
+		return $this;
+	}
+
+	/**
+	 * Set the morph class for the pivot.
+	 *
+	 * @param  string  $morphClass
+	 * @return \Illuminate\Database\Eloquent\Relations\MorphPivot
+	 */
+	public function setMorphClass($morphClass)
+	{
+			$this->morphClass = $morphClass;
+
+			return $this;
+	}
+
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphTo.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphTo.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphTo.php
new file mode 100644
index 0000000..cd9948f
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphTo.php
@@ -0,0 +1,246 @@
+<?php namespace Illuminate\Database\Eloquent\Relations;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Support\Collection as BaseCollection;
+
+class MorphTo extends BelongsTo {
+
+	/**
+	 * The type of the polymorphic relation.
+	 *
+	 * @var string
+	 */
+	protected $morphType;
+
+	/**
+	 * The models whose relations are being eager loaded.
+	 *
+	 * @var \Illuminate\Database\Eloquent\Collection
+	 */
+	protected $models;
+
+	/**
+	 * All of the models keyed by ID.
+	 *
+	 * @var array
+	 */
+	protected $dictionary = array();
+
+	/*
+	 * Indicates if soft-deleted model instances should be fetched.
+	 *
+	 * @var bool
+	 */
+	protected $withTrashed = false;
+
+	/**
+	 * Create a new belongs to relationship instance.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @param  \Illuminate\Database\Eloquent\Model  $parent
+	 * @param  string  $foreignKey
+	 * @param  string  $otherKey
+	 * @param  string  $type
+	 * @param  string  $relation
+	 * @return void
+	 */
+	public function __construct(Builder $query, Model $parent, $foreignKey, $otherKey, $type, $relation)
+	{
+		$this->morphType = $type;
+
+		parent::__construct($query, $parent, $foreignKey, $otherKey, $relation);
+	}
+
+	/**
+	 * Set the constraints for an eager load of the relation.
+	 *
+	 * @param  array  $models
+	 * @return void
+	 */
+	public function addEagerConstraints(array $models)
+	{
+		$this->buildDictionary($this->models = Collection::make($models));
+	}
+
+	/**
+	 * Build a dictionary with the models.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Collection  $models
+	 * @return void
+	 */
+	protected function buildDictionary(Collection $models)
+	{
+		foreach ($models as $model)
+		{
+			if ($model->{$this->morphType})
+			{
+				$this->dictionary[$model->{$this->morphType}][$model->{$this->foreignKey}][] = $model;
+			}
+		}
+	}
+
+	/**
+	 * Match the eagerly loaded results to their parents.
+	 *
+	 * @param  array   $models
+	 * @param  \Illuminate\Database\Eloquent\Collection  $results
+	 * @param  string  $relation
+	 * @return array
+	 */
+	public function match(array $models, Collection $results, $relation)
+	{
+		return $models;
+	}
+
+	/**
+	 * Associate the model instance to the given parent.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Model  $model
+	 * @return \Illuminate\Database\Eloquent\Model
+	 */
+	public function associate(Model $model)
+	{
+		$this->parent->setAttribute($this->foreignKey, $model->getKey());
+
+		$this->parent->setAttribute($this->morphType, $model->getMorphClass());
+
+		return $this->parent->setRelation($this->relation, $model);
+	}
+
+	/**
+	 * Get the results of the relationship.
+	 *
+	 * Called via eager load method of Eloquent query builder.
+	 *
+	 * @return mixed
+	 */
+	public function getEager()
+	{
+		foreach (array_keys($this->dictionary) as $type)
+		{
+			$this->matchToMorphParents($type, $this->getResultsByType($type));
+		}
+
+		return $this->models;
+	}
+
+	/**
+	 * Match the results for a given type to their parents.
+	 *
+	 * @param  string  $type
+	 * @param  \Illuminate\Database\Eloquent\Collection  $results
+	 * @return void
+	 */
+	protected function matchToMorphParents($type, Collection $results)
+	{
+		foreach ($results as $result)
+		{
+			if (isset($this->dictionary[$type][$result->getKey()]))
+			{
+				foreach ($this->dictionary[$type][$result->getKey()] as $model)
+				{
+					$model->setRelation($this->relation, $result);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Get all of the relation results for a type.
+	 *
+	 * @param  string  $type
+	 * @return \Illuminate\Database\Eloquent\Collection
+	 */
+	protected function getResultsByType($type)
+	{
+		$instance = $this->createModelByType($type);
+
+		$key = $instance->getKeyName();
+
+		$query = $instance->newQuery();
+
+		$query = $this->useWithTrashed($query);
+
+		return $query->whereIn($key, $this->gatherKeysByType($type)->all())->get();
+	}
+
+	/**
+	 * Gather all of the foreign keys for a given type.
+	 *
+	 * @param  string  $type
+	 * @return array
+	 */
+	protected function gatherKeysByType($type)
+	{
+		$foreign = $this->foreignKey;
+
+		return BaseCollection::make($this->dictionary[$type])->map(function($models) use ($foreign)
+		{
+			return head($models)->{$foreign};
+
+		})->unique();
+	}
+
+	/**
+	 * Create a new model instance by type.
+	 *
+	 * @param  string  $type
+	 * @return \Illuminate\Database\Eloquent\Model
+	 */
+	public function createModelByType($type)
+	{
+		return new $type;
+	}
+
+	/**
+	 * Get the foreign key "type" name.
+	 *
+	 * @return string
+	 */
+	public function getMorphType()
+	{
+		return $this->morphType;
+	}
+
+	/**
+	 * Get the dictionary used by the relationship.
+	 *
+	 * @return array
+	 */
+	public function getDictionary()
+	{
+		return $this->dictionary;
+	}
+
+	/**
+	 * Fetch soft-deleted model instances with query
+	 *
+	 * @return $this
+	 */
+	public function withTrashed()
+	{
+		$this->withTrashed = true;
+
+		$this->query = $this->useWithTrashed($this->query);
+
+		return $this;
+	}
+
+	/**
+	 * Return trashed models with query if told so
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	protected function useWithTrashed(Builder $query)
+	{
+		if ($this->withTrashed && $query->getMacro('withTrashed') !== null)
+		{
+			return $query->withTrashed();
+		}
+		return $query;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphToMany.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphToMany.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphToMany.php
new file mode 100644
index 0000000..2d8d6ac
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphToMany.php
@@ -0,0 +1,158 @@
+<?php namespace Illuminate\Database\Eloquent\Relations;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Builder;
+
+class MorphToMany extends BelongsToMany {
+
+	/**
+	 * The type of the polymorphic relation.
+	 *
+	 * @var string
+	 */
+	protected $morphType;
+
+	/**
+	 * The class name of the morph type constraint.
+	 *
+	 * @var string
+	 */
+	protected $morphClass;
+
+	/**
+	 * Indicates if we are connecting the inverse of the relation.
+	 *
+	 * This primarily affects the morphClass constraint.
+	 *
+	 * @var bool
+	 */
+	protected $inverse;
+
+	/**
+	 * Create a new has many relationship instance.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @param  \Illuminate\Database\Eloquent\Model  $parent
+	 * @param  string  $name
+	 * @param  string  $table
+	 * @param  string  $foreignKey
+	 * @param  string  $otherKey
+	 * @param  string  $relationName
+	 * @param  bool   $inverse
+	 * @return void
+	 */
+	public function __construct(Builder $query, Model $parent, $name, $table, $foreignKey, $otherKey, $relationName = null, $inverse = false)
+	{
+		$this->inverse = $inverse;
+		$this->morphType = $name.'_type';
+		$this->morphClass = $inverse ? $query->getModel()->getMorphClass() : $parent->getMorphClass();
+
+		parent::__construct($query, $parent, $table, $foreignKey, $otherKey, $relationName);
+	}
+
+	/**
+	 * Set the where clause for the relation query.
+	 *
+	 * @return $this
+	 */
+	protected function setWhere()
+	{
+		parent::setWhere();
+
+		$this->query->where($this->table.'.'.$this->morphType, $this->morphClass);
+
+		return $this;
+	}
+
+	/**
+	 * Add the constraints for a relationship count query.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @param  \Illuminate\Database\Eloquent\Builder  $parent
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	public function getRelationCountQuery(Builder $query, Builder $parent)
+	{
+		$query = parent::getRelationCountQuery($query, $parent);
+
+		return $query->where($this->table.'.'.$this->morphType, $this->morphClass);
+	}
+
+	/**
+	 * Set the constraints for an eager load of the relation.
+	 *
+	 * @param  array  $models
+	 * @return void
+	 */
+	public function addEagerConstraints(array $models)
+	{
+		parent::addEagerConstraints($models);
+
+		$this->query->where($this->table.'.'.$this->morphType, $this->morphClass);
+	}
+
+	/**
+	 * Create a new pivot attachment record.
+	 *
+	 * @param  int   $id
+	 * @param  bool  $timed
+	 * @return array
+	 */
+	protected function createAttachRecord($id, $timed)
+	{
+		$record = parent::createAttachRecord($id, $timed);
+
+		return array_add($record, $this->morphType, $this->morphClass);
+	}
+
+	/**
+	 * Create a new query builder for the pivot table.
+	 *
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	protected function newPivotQuery()
+	{
+		$query = parent::newPivotQuery();
+
+		return $query->where($this->morphType, $this->morphClass);
+	}
+
+	/**
+	 * Create a new pivot model instance.
+	 *
+	 * @param  array  $attributes
+	 * @param  bool   $exists
+	 * @return \Illuminate\Database\Eloquent\Relations\Pivot
+	 */
+	public function newPivot(array $attributes = array(), $exists = false)
+	{
+		$pivot = new MorphPivot($this->parent, $attributes, $this->table, $exists);
+
+		$pivot->setPivotKeys($this->foreignKey, $this->otherKey)
+			  ->setMorphType($this->morphType)
+			  ->setMorphClass($this->morphClass);
+
+		return $pivot;
+	}
+
+	/**
+	 * Get the foreign key "type" name.
+	 *
+	 * @return string
+	 */
+	public function getMorphType()
+	{
+		return $this->morphType;
+	}
+
+	/**
+	 * Get the class name of the parent model.
+	 *
+	 * @return string
+	 */
+	public function getMorphClass()
+	{
+		return $this->morphClass;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Pivot.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Pivot.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Pivot.php
new file mode 100755
index 0000000..365477e
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Pivot.php
@@ -0,0 +1,171 @@
+<?php namespace Illuminate\Database\Eloquent\Relations;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Builder;
+
+class Pivot extends Model {
+
+	/**
+	 * The parent model of the relationship.
+	 *
+	 * @var \Illuminate\Database\Eloquent\Model
+	 */
+	protected $parent;
+
+	/**
+	 * The name of the foreign key column.
+	 *
+	 * @var string
+	 */
+	protected $foreignKey;
+
+	/**
+	 * The name of the "other key" column.
+	 *
+	 * @var string
+	 */
+	protected $otherKey;
+
+	/**
+	 * The attributes that aren't mass assignable.
+	 *
+	 * @var array
+	 */
+	protected $guarded = array();
+
+	/**
+	 * Create a new pivot model instance.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Model  $parent
+	 * @param  array   $attributes
+	 * @param  string  $table
+	 * @param  bool    $exists
+	 * @return void
+	 */
+	public function __construct(Model $parent, $attributes, $table, $exists = false)
+	{
+		parent::__construct();
+
+		// The pivot model is a "dynamic" model since we will set the tables dynamically
+		// for the instance. This allows it work for any intermediate tables for the
+		// many to many relationship that are defined by this developer's classes.
+		$this->setRawAttributes($attributes, true);
+
+		$this->setTable($table);
+
+		$this->setConnection($parent->getConnectionName());
+
+		// We store off the parent instance so we will access the timestamp column names
+		// for the model, since the pivot model timestamps aren't easily configurable
+		// from the developer's point of view. We can use the parents to get these.
+		$this->parent = $parent;
+
+		$this->exists = $exists;
+
+		$this->timestamps = $this->hasTimestampAttributes();
+	}
+
+	/**
+	 * Set the keys for a save update query.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	protected function setKeysForSaveQuery(Builder $query)
+	{
+		$query->where($this->foreignKey, $this->getAttribute($this->foreignKey));
+
+		return $query->where($this->otherKey, $this->getAttribute($this->otherKey));
+	}
+
+	/**
+	 * Delete the pivot model record from the database.
+	 *
+	 * @return int
+	 */
+	public function delete()
+	{
+		return $this->getDeleteQuery()->delete();
+	}
+
+	/**
+	 * Get the query builder for a delete operation on the pivot.
+	 *
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	protected function getDeleteQuery()
+	{
+		$foreign = $this->getAttribute($this->foreignKey);
+
+		$query = $this->newQuery()->where($this->foreignKey, $foreign);
+
+		return $query->where($this->otherKey, $this->getAttribute($this->otherKey));
+	}
+
+	/**
+	 * Get the foreign key column name.
+	 *
+	 * @return string
+	 */
+	public function getForeignKey()
+	{
+		return $this->foreignKey;
+	}
+
+	/**
+	 * Get the "other key" column name.
+	 *
+	 * @return string
+	 */
+	public function getOtherKey()
+	{
+		return $this->otherKey;
+	}
+
+	/**
+	 * Set the key names for the pivot model instance.
+	 *
+	 * @param  string  $foreignKey
+	 * @param  string  $otherKey
+	 * @return $this
+	 */
+	public function setPivotKeys($foreignKey, $otherKey)
+	{
+		$this->foreignKey = $foreignKey;
+
+		$this->otherKey = $otherKey;
+
+		return $this;
+	}
+
+	/**
+	 * Determine if the pivot model has timestamp attributes.
+	 *
+	 * @return bool
+	 */
+	public function hasTimestampAttributes()
+	{
+		return array_key_exists($this->getCreatedAtColumn(), $this->attributes);
+	}
+
+	/**
+	 * Get the name of the "created at" column.
+	 *
+	 * @return string
+	 */
+	public function getCreatedAtColumn()
+	{
+		return $this->parent->getCreatedAtColumn();
+	}
+
+	/**
+	 * Get the name of the "updated at" column.
+	 *
+	 * @return string
+	 */
+	public function getUpdatedAtColumn()
+	{
+		return $this->parent->getUpdatedAtColumn();
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Relation.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Relation.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Relation.php
new file mode 100755
index 0000000..24125bb
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Relation.php
@@ -0,0 +1,288 @@
+<?php namespace Illuminate\Database\Eloquent\Relations;
+
+use Closure;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Query\Expression;
+use Illuminate\Database\Eloquent\Collection;
+
+abstract class Relation {
+
+	/**
+	 * The Eloquent query builder instance.
+	 *
+	 * @var \Illuminate\Database\Eloquent\Builder
+	 */
+	protected $query;
+
+	/**
+	 * The parent model instance.
+	 *
+	 * @var \Illuminate\Database\Eloquent\Model
+	 */
+	protected $parent;
+
+	/**
+	 * The related model instance.
+	 *
+	 * @var \Illuminate\Database\Eloquent\Model
+	 */
+	protected $related;
+
+	/**
+	 * Indicates if the relation is adding constraints.
+	 *
+	 * @var bool
+	 */
+	protected static $constraints = true;
+
+	/**
+	 * Create a new relation instance.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @param  \Illuminate\Database\Eloquent\Model  $parent
+	 * @return void
+	 */
+	public function __construct(Builder $query, Model $parent)
+	{
+		$this->query = $query;
+		$this->parent = $parent;
+		$this->related = $query->getModel();
+
+		$this->addConstraints();
+	}
+
+	/**
+	 * Set the base constraints on the relation query.
+	 *
+	 * @return void
+	 */
+	abstract public function addConstraints();
+
+	/**
+	 * Set the constraints for an eager load of the relation.
+	 *
+	 * @param  array  $models
+	 * @return void
+	 */
+	abstract public function addEagerConstraints(array $models);
+
+	/**
+	 * Initialize the relation on a set of models.
+	 *
+	 * @param  array   $models
+	 * @param  string  $relation
+	 * @return array
+	 */
+	abstract public function initRelation(array $models, $relation);
+
+	/**
+	 * Match the eagerly loaded results to their parents.
+	 *
+	 * @param  array   $models
+	 * @param  \Illuminate\Database\Eloquent\Collection  $results
+	 * @param  string  $relation
+	 * @return array
+	 */
+	abstract public function match(array $models, Collection $results, $relation);
+
+	/**
+	 * Get the results of the relationship.
+	 *
+	 * @return mixed
+	 */
+	abstract public function getResults();
+
+	/**
+	 * Get the relationship for eager loading.
+	 *
+	 * @return \Illuminate\Database\Eloquent\Collection
+	 */
+	public function getEager()
+	{
+		return $this->get();
+	}
+
+	/**
+	 * Touch all of the related models for the relationship.
+	 *
+	 * @return void
+	 */
+	public function touch()
+	{
+		$column = $this->getRelated()->getUpdatedAtColumn();
+
+		$this->rawUpdate(array($column => $this->getRelated()->freshTimestampString()));
+	}
+
+	/**
+	 * Run a raw update against the base query.
+	 *
+	 * @param  array  $attributes
+	 * @return int
+	 */
+	public function rawUpdate(array $attributes = array())
+	{
+		return $this->query->update($attributes);
+	}
+
+	/**
+	 * Add the constraints for a relationship count query.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @param  \Illuminate\Database\Eloquent\Builder  $parent
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	public function getRelationCountQuery(Builder $query, Builder $parent)
+	{
+		$query->select(new Expression('count(*)'));
+
+		$key = $this->wrap($this->getQualifiedParentKeyName());
+
+		return $query->where($this->getHasCompareKey(), '=', new Expression($key));
+	}
+
+	/**
+	 * Run a callback with constraints disabled on the relation.
+	 *
+	 * @param  \Closure  $callback
+	 * @return mixed
+	 */
+	public static function noConstraints(Closure $callback)
+	{
+		static::$constraints = false;
+
+		// When resetting the relation where clause, we want to shift the first element
+		// off of the bindings, leaving only the constraints that the developers put
+		// as "extra" on the relationships, and not original relation constraints.
+		$results = call_user_func($callback);
+
+		static::$constraints = true;
+
+		return $results;
+	}
+
+	/**
+	 * Get all of the primary keys for an array of models.
+	 *
+	 * @param  array   $models
+	 * @param  string  $key
+	 * @return array
+	 */
+	protected function getKeys(array $models, $key = null)
+	{
+		return array_unique(array_values(array_map(function($value) use ($key)
+		{
+			return $key ? $value->getAttribute($key) : $value->getKey();
+
+		}, $models)));
+	}
+
+	/**
+	 * Get the underlying query for the relation.
+	 *
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	public function getQuery()
+	{
+		return $this->query;
+	}
+
+	/**
+	 * Get the base query builder driving the Eloquent builder.
+	 *
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	public function getBaseQuery()
+	{
+		return $this->query->getQuery();
+	}
+
+	/**
+	 * Get the parent model of the relation.
+	 *
+	 * @return \Illuminate\Database\Eloquent\Model
+	 */
+	public function getParent()
+	{
+		return $this->parent;
+	}
+
+	/**
+	 * Get the fully qualified parent key name.
+	 *
+	 * @return string
+	 */
+	public function getQualifiedParentKeyName()
+	{
+		return $this->parent->getQualifiedKeyName();
+	}
+
+	/**
+	 * Get the related model of the relation.
+	 *
+	 * @return \Illuminate\Database\Eloquent\Model
+	 */
+	public function getRelated()
+	{
+		return $this->related;
+	}
+
+	/**
+	 * Get the name of the "created at" column.
+	 *
+	 * @return string
+	 */
+	public function createdAt()
+	{
+		return $this->parent->getCreatedAtColumn();
+	}
+
+	/**
+	 * Get the name of the "updated at" column.
+	 *
+	 * @return string
+	 */
+	public function updatedAt()
+	{
+		return $this->parent->getUpdatedAtColumn();
+	}
+
+	/**
+	 * Get the name of the related model's "updated at" column.
+	 *
+	 * @return string
+	 */
+	public function relatedUpdatedAt()
+	{
+		return $this->related->getUpdatedAtColumn();
+	}
+
+	/**
+	 * Wrap the given value with the parent query's grammar.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	public function wrap($value)
+	{
+		return $this->parent->newQueryWithoutScopes()->getQuery()->getGrammar()->wrap($value);
+	}
+
+	/**
+	 * Handle dynamic method calls to the relationship.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 */
+	public function __call($method, $parameters)
+	{
+		$result = call_user_func_array(array($this->query, $method), $parameters);
+
+		if ($result === $this->query) return $this;
+
+		return $result;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/ScopeInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/ScopeInterface.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/ScopeInterface.php
new file mode 100644
index 0000000..b0a93a9
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/ScopeInterface.php
@@ -0,0 +1,21 @@
+<?php namespace Illuminate\Database\Eloquent;
+
+interface ScopeInterface {
+
+	/**
+	 * Apply the scope to a given Eloquent query builder.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $builder
+	 * @return void
+	 */
+	public function apply(Builder $builder);
+
+	/**
+	 * Remove the scope from the given Eloquent query builder.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $builder
+	 * @return void
+	 */
+	public function remove(Builder $builder);
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingScope.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingScope.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingScope.php
new file mode 100644
index 0000000..61c5d5c
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingScope.php
@@ -0,0 +1,170 @@
+<?php namespace Illuminate\Database\Eloquent;
+
+class SoftDeletingScope implements ScopeInterface {
+
+	/**
+	 * All of the extensions to be added to the builder.
+	 *
+	 * @var array
+	 */
+	protected $extensions = ['ForceDelete', 'Restore', 'WithTrashed', 'OnlyTrashed'];
+
+	/**
+	 * Apply the scope to a given Eloquent query builder.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $builder
+	 * @return void
+	 */
+	public function apply(Builder $builder)
+	{
+		$model = $builder->getModel();
+
+		$builder->whereNull($model->getQualifiedDeletedAtColumn());
+
+		$this->extend($builder);
+	}
+
+	/**
+	 * Remove the scope from the given Eloquent query builder.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $builder
+	 * @return void
+	 */
+	public function remove(Builder $builder)
+	{
+		$column = $builder->getModel()->getQualifiedDeletedAtColumn();
+
+		$query = $builder->getQuery();
+
+		foreach ((array) $query->wheres as $key => $where)
+		{
+			// If the where clause is a soft delete date constraint, we will remove it from
+			// the query and reset the keys on the wheres. This allows this developer to
+			// include deleted model in a relationship result set that is lazy loaded.
+			if ($this->isSoftDeleteConstraint($where, $column))
+			{
+				unset($query->wheres[$key]);
+
+				$query->wheres = array_values($query->wheres);
+			}
+		}
+	}
+
+	/**
+	 * Extend the query builder with the needed functions.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $builder
+	 * @return void
+	 */
+	public function extend(Builder $builder)
+	{
+		foreach ($this->extensions as $extension)
+		{
+			$this->{"add{$extension}"}($builder);
+		}
+
+		$builder->onDelete(function(Builder $builder)
+		{
+			$column = $this->getDeletedAtColumn($builder);
+
+			return $builder->update(array(
+				$column => $builder->getModel()->freshTimestampString()
+			));
+		});
+	}
+
+	/**
+	 * Get the "deleted at" column for the builder.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $builder
+	 * @return string
+	 */
+	protected function getDeletedAtColumn(Builder $builder)
+	{
+		if (count($builder->getQuery()->joins) > 0)
+		{
+			return $builder->getModel()->getQualifiedDeletedAtColumn();
+		}
+		else
+		{
+			return $builder->getModel()->getDeletedAtColumn();
+		}
+	}
+
+	/**
+	 * Add the force delete extension to the builder.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $builder
+	 * @return void
+	 */
+	protected function addForceDelete(Builder $builder)
+	{
+		$builder->macro('forceDelete', function(Builder $builder)
+		{
+			return $builder->getQuery()->delete();
+		});
+	}
+
+	/**
+	 * Add the restore extension to the builder.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $builder
+	 * @return void
+	 */
+	protected function addRestore(Builder $builder)
+	{
+		$builder->macro('restore', function(Builder $builder)
+		{
+			$builder->withTrashed();
+
+			return $builder->update(array($builder->getModel()->getDeletedAtColumn() => null));
+		});
+	}
+
+	/**
+	 * Add the with-trashed extension to the builder.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $builder
+	 * @return void
+	 */
+	protected function addWithTrashed(Builder $builder)
+	{
+		$builder->macro('withTrashed', function(Builder $builder)
+		{
+			$this->remove($builder);
+
+			return $builder;
+		});
+	}
+
+	/**
+	 * Add the only-trashed extension to the builder.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $builder
+	 * @return void
+	 */
+	protected function addOnlyTrashed(Builder $builder)
+	{
+		$builder->macro('onlyTrashed', function(Builder $builder)
+		{
+			$this->remove($builder);
+
+			$builder->getQuery()->whereNotNull($builder->getModel()->getQualifiedDeletedAtColumn());
+
+			return $builder;
+		});
+	}
+
+	/**
+	 * Determine if the given where clause is a soft delete constraint.
+	 *
+	 * @param  array   $where
+	 * @param  string  $column
+	 * @return bool
+	 */
+	protected function isSoftDeleteConstraint(array $where, $column)
+	{
+		return $where['type'] == 'Null' && $where['column'] == $column;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingTrait.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingTrait.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingTrait.php
new file mode 100644
index 0000000..617c019
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingTrait.php
@@ -0,0 +1,170 @@
+<?php namespace Illuminate\Database\Eloquent;
+
+trait SoftDeletingTrait {
+
+	/**
+	 * Indicates if the model is currently force deleting.
+	 *
+	 * @var bool
+	 */
+	protected $forceDeleting = false;
+
+	/**
+	 * Boot the soft deleting trait for a model.
+	 *
+	 * @return void
+	 */
+	public static function bootSoftDeletingTrait()
+	{
+		static::addGlobalScope(new SoftDeletingScope);
+	}
+
+	/**
+	 * Force a hard delete on a soft deleted model.
+	 *
+	 * @return void
+	 */
+	public function forceDelete()
+	{
+		$this->forceDeleting = true;
+
+		$this->delete();
+
+		$this->forceDeleting = false;
+	}
+
+	/**
+	 * Perform the actual delete query on this model instance.
+	 *
+	 * @return void
+	 */
+	protected function performDeleteOnModel()
+	{
+		if ($this->forceDeleting)
+		{
+			return $this->withTrashed()->where($this->getKeyName(), $this->getKey())->forceDelete();
+		}
+
+		return $this->runSoftDelete();
+	}
+
+	/**
+	 * Perform the actual delete query on this model instance.
+	 *
+	 * @return void
+	 */
+	protected function runSoftDelete()
+	{
+		$query = $this->newQuery()->where($this->getKeyName(), $this->getKey());
+
+		$this->{$this->getDeletedAtColumn()} = $time = $this->freshTimestamp();
+
+		$query->update(array($this->getDeletedAtColumn() => $this->fromDateTime($time)));
+	}
+
+	/**
+	 * Restore a soft-deleted model instance.
+	 *
+	 * @return bool|null
+	 */
+	public function restore()
+	{
+		// If the restoring event does not return false, we will proceed with this
+		// restore operation. Otherwise, we bail out so the developer will stop
+		// the restore totally. We will clear the deleted timestamp and save.
+		if ($this->fireModelEvent('restoring') === false)
+		{
+			return false;
+		}
+
+		$this->{$this->getDeletedAtColumn()} = null;
+
+		// Once we have saved the model, we will fire the "restored" event so this
+		// developer will do anything they need to after a restore operation is
+		// totally finished. Then we will return the result of the save call.
+		$this->exists = true;
+
+		$result = $this->save();
+
+		$this->fireModelEvent('restored', false);
+
+		return $result;
+	}
+
+	/**
+	 * Determine if the model instance has been soft-deleted.
+	 *
+	 * @return bool
+	 */
+	public function trashed()
+	{
+		return ! is_null($this->{$this->getDeletedAtColumn()});
+	}
+
+	/**
+	 * Get a new query builder that includes soft deletes.
+	 *
+	 * @return \Illuminate\Database\Eloquent\Builder|static
+	 */
+	public static function withTrashed()
+	{
+		return (new static)->newQueryWithoutScope(new SoftDeletingScope);
+	}
+
+	/**
+	 * Get a new query builder that only includes soft deletes.
+	 *
+	 * @return \Illuminate\Database\Eloquent\Builder|static
+	 */
+	public static function onlyTrashed()
+	{
+		$instance = new static;
+
+		$column = $instance->getQualifiedDeletedAtColumn();
+
+		return $instance->newQueryWithoutScope(new SoftDeletingScope)->whereNotNull($column);
+	}
+
+	/**
+	 * Register a restoring model event with the dispatcher.
+	 *
+	 * @param  \Closure|string  $callback
+	 * @return void
+	 */
+	public static function restoring($callback)
+	{
+		static::registerModelEvent('restoring', $callback);
+	}
+
+	/**
+	 * Register a restored model event with the dispatcher.
+	 *
+	 * @param  \Closure|string  $callback
+	 * @return void
+	 */
+	public static function restored($callback)
+	{
+		static::registerModelEvent('restored', $callback);
+	}
+
+	/**
+	 * Get the name of the "deleted at" column.
+	 *
+	 * @return string
+	 */
+	public function getDeletedAtColumn()
+	{
+		return defined('static::DELETED_AT') ? static::DELETED_AT : 'deleted_at';
+	}
+
+	/**
+	 * Get the fully qualified "deleted at" column.
+	 *
+	 * @return string
+	 */
+	public function getQualifiedDeletedAtColumn()
+	{
+		return $this->getTable().'.'.$this->getDeletedAtColumn();
+	}
+
+}


[41/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/Airavata/Model/Workspace/Experiment/Types.php
----------------------------------------------------------------------
diff --git a/app/libraries/Airavata/Model/Workspace/Experiment/Types.php b/app/libraries/Airavata/Model/Workspace/Experiment/Types.php
new file mode 100644
index 0000000..753dc13
--- /dev/null
+++ b/app/libraries/Airavata/Model/Workspace/Experiment/Types.php
@@ -0,0 +1,4374 @@
+<?php
+namespace Airavata\Model\Workspace\Experiment;
+
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+use Thrift\Base\TBase;
+use Thrift\Type\TType;
+use Thrift\Type\TMessageType;
+use Thrift\Exception\TException;
+use Thrift\Exception\TProtocolException;
+use Thrift\Protocol\TProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
+use Thrift\Exception\TApplicationException;
+
+
+final class ExperimentState {
+  const CREATED = 0;
+  const VALIDATED = 1;
+  const SCHEDULED = 2;
+  const LAUNCHED = 3;
+  const EXECUTING = 4;
+  const CANCELING = 5;
+  const CANCELED = 6;
+  const SUSPENDED = 7;
+  const COMPLETED = 8;
+  const FAILED = 9;
+  const UNKNOWN = 10;
+  static public $__names = array(
+    0 => 'CREATED',
+    1 => 'VALIDATED',
+    2 => 'SCHEDULED',
+    3 => 'LAUNCHED',
+    4 => 'EXECUTING',
+    5 => 'CANCELING',
+    6 => 'CANCELED',
+    7 => 'SUSPENDED',
+    8 => 'COMPLETED',
+    9 => 'FAILED',
+    10 => 'UNKNOWN',
+  );
+}
+
+final class WorkflowNodeState {
+  const INVOKED = 0;
+  const EXECUTING = 1;
+  const CANCELING = 2;
+  const CANCELED = 3;
+  const SUSPENDED = 4;
+  const COMPLETED = 5;
+  const FAILED = 6;
+  const UNKNOWN = 7;
+  static public $__names = array(
+    0 => 'INVOKED',
+    1 => 'EXECUTING',
+    2 => 'CANCELING',
+    3 => 'CANCELED',
+    4 => 'SUSPENDED',
+    5 => 'COMPLETED',
+    6 => 'FAILED',
+    7 => 'UNKNOWN',
+  );
+}
+
+final class TaskState {
+  const WAITING = 0;
+  const STARTED = 1;
+  const PRE_PROCESSING = 2;
+  const CONFIGURING_WORKSPACE = 3;
+  const INPUT_DATA_STAGING = 4;
+  const OUTPUT_DATA_STAGING = 5;
+  const POST_PROCESSING = 6;
+  const EXECUTING = 7;
+  const CANCELING = 8;
+  const CANCELED = 9;
+  const COMPLETED = 10;
+  const FAILED = 11;
+  const UNKNOWN = 12;
+  static public $__names = array(
+    0 => 'WAITING',
+    1 => 'STARTED',
+    2 => 'PRE_PROCESSING',
+    3 => 'CONFIGURING_WORKSPACE',
+    4 => 'INPUT_DATA_STAGING',
+    5 => 'OUTPUT_DATA_STAGING',
+    6 => 'POST_PROCESSING',
+    7 => 'EXECUTING',
+    8 => 'CANCELING',
+    9 => 'CANCELED',
+    10 => 'COMPLETED',
+    11 => 'FAILED',
+    12 => 'UNKNOWN',
+  );
+}
+
+final class JobState {
+  const SUBMITTED = 0;
+  const UN_SUBMITTED = 1;
+  const SETUP = 2;
+  const QUEUED = 3;
+  const ACTIVE = 4;
+  const COMPLETE = 5;
+  const CANCELING = 6;
+  const CANCELED = 7;
+  const FAILED = 8;
+  const HELD = 9;
+  const SUSPENDED = 10;
+  const UNKNOWN = 11;
+  static public $__names = array(
+    0 => 'SUBMITTED',
+    1 => 'UN_SUBMITTED',
+    2 => 'SETUP',
+    3 => 'QUEUED',
+    4 => 'ACTIVE',
+    5 => 'COMPLETE',
+    6 => 'CANCELING',
+    7 => 'CANCELED',
+    8 => 'FAILED',
+    9 => 'HELD',
+    10 => 'SUSPENDED',
+    11 => 'UNKNOWN',
+  );
+}
+
+final class TransferState {
+  const DIRECTORY_SETUP = 0;
+  const UPLOAD = 1;
+  const DOWNLOAD = 2;
+  const ACTIVE = 3;
+  const COMPLETE = 4;
+  const STDOUT_DOWNLOAD = 5;
+  const STDERROR_DOWNLOAD = 6;
+  const CANCELING = 7;
+  const CANCELED = 8;
+  const FAILED = 9;
+  const HELD = 10;
+  const SUSPENDED = 11;
+  const UNKNOWN = 12;
+  static public $__names = array(
+    0 => 'DIRECTORY_SETUP',
+    1 => 'UPLOAD',
+    2 => 'DOWNLOAD',
+    3 => 'ACTIVE',
+    4 => 'COMPLETE',
+    5 => 'STDOUT_DOWNLOAD',
+    6 => 'STDERROR_DOWNLOAD',
+    7 => 'CANCELING',
+    8 => 'CANCELED',
+    9 => 'FAILED',
+    10 => 'HELD',
+    11 => 'SUSPENDED',
+    12 => 'UNKNOWN',
+  );
+}
+
+final class ActionableGroup {
+  const RESOURCE_ADMINS = 0;
+  const AIRAVATA_ADMINS = 1;
+  const GATEWAYS_ADMINS = 2;
+  const USER = 3;
+  const CANNOT_BE_DETERMINED = 4;
+  static public $__names = array(
+    0 => 'RESOURCE_ADMINS',
+    1 => 'AIRAVATA_ADMINS',
+    2 => 'GATEWAYS_ADMINS',
+    3 => 'USER',
+    4 => 'CANNOT_BE_DETERMINED',
+  );
+}
+
+final class ErrorCategory {
+  const FILE_SYSTEM_FAILURE = 0;
+  const APPLICATION_FAILURE = 1;
+  const RESOURCE_NODE_FAILURE = 2;
+  const DISK_FULL = 3;
+  const INSUFFICIENT_ALLOCATION = 4;
+  const SYSTEM_MAINTENANCE = 5;
+  const AIRAVATA_INTERNAL_ERROR = 6;
+  const CANNOT_BE_DETERMINED = 7;
+  static public $__names = array(
+    0 => 'FILE_SYSTEM_FAILURE',
+    1 => 'APPLICATION_FAILURE',
+    2 => 'RESOURCE_NODE_FAILURE',
+    3 => 'DISK_FULL',
+    4 => 'INSUFFICIENT_ALLOCATION',
+    5 => 'SYSTEM_MAINTENANCE',
+    6 => 'AIRAVATA_INTERNAL_ERROR',
+    7 => 'CANNOT_BE_DETERMINED',
+  );
+}
+
+final class CorrectiveAction {
+  const RETRY_SUBMISSION = 0;
+  const CONTACT_SUPPORT = 1;
+  const CANNOT_BE_DETERMINED = 2;
+  static public $__names = array(
+    0 => 'RETRY_SUBMISSION',
+    1 => 'CONTACT_SUPPORT',
+    2 => 'CANNOT_BE_DETERMINED',
+  );
+}
+
+final class ExecutionUnit {
+  const INPUT = 0;
+  const APPLICATION = 1;
+  const OUTPUT = 2;
+  const OTHER = 3;
+  static public $__names = array(
+    0 => 'INPUT',
+    1 => 'APPLICATION',
+    2 => 'OUTPUT',
+    3 => 'OTHER',
+  );
+}
+
+class ExperimentStatus {
+  static $_TSPEC;
+
+  public $experimentState = null;
+  public $timeOfStateChange = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'experimentState',
+          'type' => TType::I32,
+          ),
+        2 => array(
+          'var' => 'timeOfStateChange',
+          'type' => TType::I64,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['experimentState'])) {
+        $this->experimentState = $vals['experimentState'];
+      }
+      if (isset($vals['timeOfStateChange'])) {
+        $this->timeOfStateChange = $vals['timeOfStateChange'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ExperimentStatus';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->experimentState);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->timeOfStateChange);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ExperimentStatus');
+    if ($this->experimentState !== null) {
+      $xfer += $output->writeFieldBegin('experimentState', TType::I32, 1);
+      $xfer += $output->writeI32($this->experimentState);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->timeOfStateChange !== null) {
+      $xfer += $output->writeFieldBegin('timeOfStateChange', TType::I64, 2);
+      $xfer += $output->writeI64($this->timeOfStateChange);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class WorkflowNodeStatus {
+  static $_TSPEC;
+
+  public $workflowNodeState = null;
+  public $timeOfStateChange = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'workflowNodeState',
+          'type' => TType::I32,
+          ),
+        2 => array(
+          'var' => 'timeOfStateChange',
+          'type' => TType::I64,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['workflowNodeState'])) {
+        $this->workflowNodeState = $vals['workflowNodeState'];
+      }
+      if (isset($vals['timeOfStateChange'])) {
+        $this->timeOfStateChange = $vals['timeOfStateChange'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'WorkflowNodeStatus';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->workflowNodeState);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->timeOfStateChange);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('WorkflowNodeStatus');
+    if ($this->workflowNodeState !== null) {
+      $xfer += $output->writeFieldBegin('workflowNodeState', TType::I32, 1);
+      $xfer += $output->writeI32($this->workflowNodeState);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->timeOfStateChange !== null) {
+      $xfer += $output->writeFieldBegin('timeOfStateChange', TType::I64, 2);
+      $xfer += $output->writeI64($this->timeOfStateChange);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class TaskStatus {
+  static $_TSPEC;
+
+  public $executionState = null;
+  public $timeOfStateChange = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'executionState',
+          'type' => TType::I32,
+          ),
+        2 => array(
+          'var' => 'timeOfStateChange',
+          'type' => TType::I64,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['executionState'])) {
+        $this->executionState = $vals['executionState'];
+      }
+      if (isset($vals['timeOfStateChange'])) {
+        $this->timeOfStateChange = $vals['timeOfStateChange'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'TaskStatus';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->executionState);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->timeOfStateChange);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('TaskStatus');
+    if ($this->executionState !== null) {
+      $xfer += $output->writeFieldBegin('executionState', TType::I32, 1);
+      $xfer += $output->writeI32($this->executionState);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->timeOfStateChange !== null) {
+      $xfer += $output->writeFieldBegin('timeOfStateChange', TType::I64, 2);
+      $xfer += $output->writeI64($this->timeOfStateChange);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class JobStatus {
+  static $_TSPEC;
+
+  public $jobState = null;
+  public $timeOfStateChange = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'jobState',
+          'type' => TType::I32,
+          ),
+        2 => array(
+          'var' => 'timeOfStateChange',
+          'type' => TType::I64,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['jobState'])) {
+        $this->jobState = $vals['jobState'];
+      }
+      if (isset($vals['timeOfStateChange'])) {
+        $this->timeOfStateChange = $vals['timeOfStateChange'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'JobStatus';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->jobState);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->timeOfStateChange);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('JobStatus');
+    if ($this->jobState !== null) {
+      $xfer += $output->writeFieldBegin('jobState', TType::I32, 1);
+      $xfer += $output->writeI32($this->jobState);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->timeOfStateChange !== null) {
+      $xfer += $output->writeFieldBegin('timeOfStateChange', TType::I64, 2);
+      $xfer += $output->writeI64($this->timeOfStateChange);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class TransferStatus {
+  static $_TSPEC;
+
+  public $transferState = null;
+  public $timeOfStateChange = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'transferState',
+          'type' => TType::I32,
+          ),
+        2 => array(
+          'var' => 'timeOfStateChange',
+          'type' => TType::I64,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['transferState'])) {
+        $this->transferState = $vals['transferState'];
+      }
+      if (isset($vals['timeOfStateChange'])) {
+        $this->timeOfStateChange = $vals['timeOfStateChange'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'TransferStatus';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->transferState);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->timeOfStateChange);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('TransferStatus');
+    if ($this->transferState !== null) {
+      $xfer += $output->writeFieldBegin('transferState', TType::I32, 1);
+      $xfer += $output->writeI32($this->transferState);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->timeOfStateChange !== null) {
+      $xfer += $output->writeFieldBegin('timeOfStateChange', TType::I64, 2);
+      $xfer += $output->writeI64($this->timeOfStateChange);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ApplicationStatus {
+  static $_TSPEC;
+
+  public $applicationState = null;
+  public $timeOfStateChange = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'applicationState',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'timeOfStateChange',
+          'type' => TType::I64,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['applicationState'])) {
+        $this->applicationState = $vals['applicationState'];
+      }
+      if (isset($vals['timeOfStateChange'])) {
+        $this->timeOfStateChange = $vals['timeOfStateChange'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ApplicationStatus';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->applicationState);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->timeOfStateChange);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ApplicationStatus');
+    if ($this->applicationState !== null) {
+      $xfer += $output->writeFieldBegin('applicationState', TType::STRING, 1);
+      $xfer += $output->writeString($this->applicationState);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->timeOfStateChange !== null) {
+      $xfer += $output->writeFieldBegin('timeOfStateChange', TType::I64, 2);
+      $xfer += $output->writeI64($this->timeOfStateChange);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ComputationalResourceScheduling {
+  static $_TSPEC;
+
+  public $resourceHostId = null;
+  public $totalCPUCount = null;
+  public $nodeCount = null;
+  public $numberOfThreads = null;
+  public $queueName = null;
+  public $wallTimeLimit = null;
+  public $jobStartTime = null;
+  public $totalPhysicalMemory = null;
+  public $computationalProjectAccount = null;
+  public $chassisName = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'resourceHostId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'totalCPUCount',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'nodeCount',
+          'type' => TType::I32,
+          ),
+        4 => array(
+          'var' => 'numberOfThreads',
+          'type' => TType::I32,
+          ),
+        5 => array(
+          'var' => 'queueName',
+          'type' => TType::STRING,
+          ),
+        6 => array(
+          'var' => 'wallTimeLimit',
+          'type' => TType::I32,
+          ),
+        7 => array(
+          'var' => 'jobStartTime',
+          'type' => TType::I32,
+          ),
+        8 => array(
+          'var' => 'totalPhysicalMemory',
+          'type' => TType::I32,
+          ),
+        9 => array(
+          'var' => 'computationalProjectAccount',
+          'type' => TType::STRING,
+          ),
+        10 => array(
+          'var' => 'chassisName',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['resourceHostId'])) {
+        $this->resourceHostId = $vals['resourceHostId'];
+      }
+      if (isset($vals['totalCPUCount'])) {
+        $this->totalCPUCount = $vals['totalCPUCount'];
+      }
+      if (isset($vals['nodeCount'])) {
+        $this->nodeCount = $vals['nodeCount'];
+      }
+      if (isset($vals['numberOfThreads'])) {
+        $this->numberOfThreads = $vals['numberOfThreads'];
+      }
+      if (isset($vals['queueName'])) {
+        $this->queueName = $vals['queueName'];
+      }
+      if (isset($vals['wallTimeLimit'])) {
+        $this->wallTimeLimit = $vals['wallTimeLimit'];
+      }
+      if (isset($vals['jobStartTime'])) {
+        $this->jobStartTime = $vals['jobStartTime'];
+      }
+      if (isset($vals['totalPhysicalMemory'])) {
+        $this->totalPhysicalMemory = $vals['totalPhysicalMemory'];
+      }
+      if (isset($vals['computationalProjectAccount'])) {
+        $this->computationalProjectAccount = $vals['computationalProjectAccount'];
+      }
+      if (isset($vals['chassisName'])) {
+        $this->chassisName = $vals['chassisName'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ComputationalResourceScheduling';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->resourceHostId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->totalCPUCount);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->nodeCount);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->numberOfThreads);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->queueName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->wallTimeLimit);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->jobStartTime);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 8:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->totalPhysicalMemory);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 9:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->computationalProjectAccount);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 10:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->chassisName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ComputationalResourceScheduling');
+    if ($this->resourceHostId !== null) {
+      $xfer += $output->writeFieldBegin('resourceHostId', TType::STRING, 1);
+      $xfer += $output->writeString($this->resourceHostId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->totalCPUCount !== null) {
+      $xfer += $output->writeFieldBegin('totalCPUCount', TType::I32, 2);
+      $xfer += $output->writeI32($this->totalCPUCount);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->nodeCount !== null) {
+      $xfer += $output->writeFieldBegin('nodeCount', TType::I32, 3);
+      $xfer += $output->writeI32($this->nodeCount);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->numberOfThreads !== null) {
+      $xfer += $output->writeFieldBegin('numberOfThreads', TType::I32, 4);
+      $xfer += $output->writeI32($this->numberOfThreads);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->queueName !== null) {
+      $xfer += $output->writeFieldBegin('queueName', TType::STRING, 5);
+      $xfer += $output->writeString($this->queueName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->wallTimeLimit !== null) {
+      $xfer += $output->writeFieldBegin('wallTimeLimit', TType::I32, 6);
+      $xfer += $output->writeI32($this->wallTimeLimit);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->jobStartTime !== null) {
+      $xfer += $output->writeFieldBegin('jobStartTime', TType::I32, 7);
+      $xfer += $output->writeI32($this->jobStartTime);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->totalPhysicalMemory !== null) {
+      $xfer += $output->writeFieldBegin('totalPhysicalMemory', TType::I32, 8);
+      $xfer += $output->writeI32($this->totalPhysicalMemory);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->computationalProjectAccount !== null) {
+      $xfer += $output->writeFieldBegin('computationalProjectAccount', TType::STRING, 9);
+      $xfer += $output->writeString($this->computationalProjectAccount);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->chassisName !== null) {
+      $xfer += $output->writeFieldBegin('chassisName', TType::STRING, 10);
+      $xfer += $output->writeString($this->chassisName);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class AdvancedInputDataHandling {
+  static $_TSPEC;
+
+  public $stageInputFilesToWorkingDir = false;
+  public $parentWorkingDirectory = null;
+  public $uniqueWorkingDirectory = null;
+  public $cleanUpWorkingDirAfterJob = false;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'stageInputFilesToWorkingDir',
+          'type' => TType::BOOL,
+          ),
+        2 => array(
+          'var' => 'parentWorkingDirectory',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'uniqueWorkingDirectory',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'cleanUpWorkingDirAfterJob',
+          'type' => TType::BOOL,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['stageInputFilesToWorkingDir'])) {
+        $this->stageInputFilesToWorkingDir = $vals['stageInputFilesToWorkingDir'];
+      }
+      if (isset($vals['parentWorkingDirectory'])) {
+        $this->parentWorkingDirectory = $vals['parentWorkingDirectory'];
+      }
+      if (isset($vals['uniqueWorkingDirectory'])) {
+        $this->uniqueWorkingDirectory = $vals['uniqueWorkingDirectory'];
+      }
+      if (isset($vals['cleanUpWorkingDirAfterJob'])) {
+        $this->cleanUpWorkingDirAfterJob = $vals['cleanUpWorkingDirAfterJob'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'AdvancedInputDataHandling';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->stageInputFilesToWorkingDir);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->parentWorkingDirectory);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->uniqueWorkingDirectory);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->cleanUpWorkingDirAfterJob);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('AdvancedInputDataHandling');
+    if ($this->stageInputFilesToWorkingDir !== null) {
+      $xfer += $output->writeFieldBegin('stageInputFilesToWorkingDir', TType::BOOL, 1);
+      $xfer += $output->writeBool($this->stageInputFilesToWorkingDir);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->parentWorkingDirectory !== null) {
+      $xfer += $output->writeFieldBegin('parentWorkingDirectory', TType::STRING, 2);
+      $xfer += $output->writeString($this->parentWorkingDirectory);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->uniqueWorkingDirectory !== null) {
+      $xfer += $output->writeFieldBegin('uniqueWorkingDirectory', TType::STRING, 3);
+      $xfer += $output->writeString($this->uniqueWorkingDirectory);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->cleanUpWorkingDirAfterJob !== null) {
+      $xfer += $output->writeFieldBegin('cleanUpWorkingDirAfterJob', TType::BOOL, 4);
+      $xfer += $output->writeBool($this->cleanUpWorkingDirAfterJob);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class AdvancedOutputDataHandling {
+  static $_TSPEC;
+
+  public $outputDataDir = null;
+  public $dataRegistryURL = null;
+  public $persistOutputData = true;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        2 => array(
+          'var' => 'outputDataDir',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'dataRegistryURL',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'persistOutputData',
+          'type' => TType::BOOL,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['outputDataDir'])) {
+        $this->outputDataDir = $vals['outputDataDir'];
+      }
+      if (isset($vals['dataRegistryURL'])) {
+        $this->dataRegistryURL = $vals['dataRegistryURL'];
+      }
+      if (isset($vals['persistOutputData'])) {
+        $this->persistOutputData = $vals['persistOutputData'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'AdvancedOutputDataHandling';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->outputDataDir);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->dataRegistryURL);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->persistOutputData);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('AdvancedOutputDataHandling');
+    if ($this->outputDataDir !== null) {
+      $xfer += $output->writeFieldBegin('outputDataDir', TType::STRING, 2);
+      $xfer += $output->writeString($this->outputDataDir);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->dataRegistryURL !== null) {
+      $xfer += $output->writeFieldBegin('dataRegistryURL', TType::STRING, 3);
+      $xfer += $output->writeString($this->dataRegistryURL);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->persistOutputData !== null) {
+      $xfer += $output->writeFieldBegin('persistOutputData', TType::BOOL, 4);
+      $xfer += $output->writeBool($this->persistOutputData);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class QualityOfServiceParams {
+  static $_TSPEC;
+
+  public $startExecutionAt = null;
+  public $executeBefore = null;
+  public $numberofRetries = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'startExecutionAt',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'executeBefore',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'numberofRetries',
+          'type' => TType::I32,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['startExecutionAt'])) {
+        $this->startExecutionAt = $vals['startExecutionAt'];
+      }
+      if (isset($vals['executeBefore'])) {
+        $this->executeBefore = $vals['executeBefore'];
+      }
+      if (isset($vals['numberofRetries'])) {
+        $this->numberofRetries = $vals['numberofRetries'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'QualityOfServiceParams';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->startExecutionAt);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->executeBefore);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->numberofRetries);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('QualityOfServiceParams');
+    if ($this->startExecutionAt !== null) {
+      $xfer += $output->writeFieldBegin('startExecutionAt', TType::STRING, 1);
+      $xfer += $output->writeString($this->startExecutionAt);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->executeBefore !== null) {
+      $xfer += $output->writeFieldBegin('executeBefore', TType::STRING, 2);
+      $xfer += $output->writeString($this->executeBefore);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->numberofRetries !== null) {
+      $xfer += $output->writeFieldBegin('numberofRetries', TType::I32, 3);
+      $xfer += $output->writeI32($this->numberofRetries);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class UserConfigurationData {
+  static $_TSPEC;
+
+  public $airavataAutoSchedule = false;
+  public $overrideManualScheduledParams = false;
+  public $shareExperimentPublicly = false;
+  public $computationalResourceScheduling = null;
+  public $advanceInputDataHandling = null;
+  public $advanceOutputDataHandling = null;
+  public $qosParams = null;
+  public $throttleResources = false;
+  public $userDN = null;
+  public $generateCert = false;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'airavataAutoSchedule',
+          'type' => TType::BOOL,
+          ),
+        2 => array(
+          'var' => 'overrideManualScheduledParams',
+          'type' => TType::BOOL,
+          ),
+        3 => array(
+          'var' => 'shareExperimentPublicly',
+          'type' => TType::BOOL,
+          ),
+        4 => array(
+          'var' => 'computationalResourceScheduling',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workspace\Experiment\ComputationalResourceScheduling',
+          ),
+        5 => array(
+          'var' => 'advanceInputDataHandling',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workspace\Experiment\AdvancedInputDataHandling',
+          ),
+        6 => array(
+          'var' => 'advanceOutputDataHandling',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workspace\Experiment\AdvancedOutputDataHandling',
+          ),
+        7 => array(
+          'var' => 'qosParams',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workspace\Experiment\QualityOfServiceParams',
+          ),
+        8 => array(
+          'var' => 'throttleResources',
+          'type' => TType::BOOL,
+          ),
+        9 => array(
+          'var' => 'userDN',
+          'type' => TType::STRING,
+          ),
+        10 => array(
+          'var' => 'generateCert',
+          'type' => TType::BOOL,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['airavataAutoSchedule'])) {
+        $this->airavataAutoSchedule = $vals['airavataAutoSchedule'];
+      }
+      if (isset($vals['overrideManualScheduledParams'])) {
+        $this->overrideManualScheduledParams = $vals['overrideManualScheduledParams'];
+      }
+      if (isset($vals['shareExperimentPublicly'])) {
+        $this->shareExperimentPublicly = $vals['shareExperimentPublicly'];
+      }
+      if (isset($vals['computationalResourceScheduling'])) {
+        $this->computationalResourceScheduling = $vals['computationalResourceScheduling'];
+      }
+      if (isset($vals['advanceInputDataHandling'])) {
+        $this->advanceInputDataHandling = $vals['advanceInputDataHandling'];
+      }
+      if (isset($vals['advanceOutputDataHandling'])) {
+        $this->advanceOutputDataHandling = $vals['advanceOutputDataHandling'];
+      }
+      if (isset($vals['qosParams'])) {
+        $this->qosParams = $vals['qosParams'];
+      }
+      if (isset($vals['throttleResources'])) {
+        $this->throttleResources = $vals['throttleResources'];
+      }
+      if (isset($vals['userDN'])) {
+        $this->userDN = $vals['userDN'];
+      }
+      if (isset($vals['generateCert'])) {
+        $this->generateCert = $vals['generateCert'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'UserConfigurationData';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->airavataAutoSchedule);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->overrideManualScheduledParams);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->shareExperimentPublicly);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRUCT) {
+            $this->computationalResourceScheduling = new \Airavata\Model\Workspace\Experiment\ComputationalResourceScheduling();
+            $xfer += $this->computationalResourceScheduling->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::STRUCT) {
+            $this->advanceInputDataHandling = new \Airavata\Model\Workspace\Experiment\AdvancedInputDataHandling();
+            $xfer += $this->advanceInputDataHandling->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::STRUCT) {
+            $this->advanceOutputDataHandling = new \Airavata\Model\Workspace\Experiment\AdvancedOutputDataHandling();
+            $xfer += $this->advanceOutputDataHandling->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::STRUCT) {
+            $this->qosParams = new \Airavata\Model\Workspace\Experiment\QualityOfServiceParams();
+            $xfer += $this->qosParams->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 8:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->throttleResources);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 9:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->userDN);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 10:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->generateCert);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('UserConfigurationData');
+    if ($this->airavataAutoSchedule !== null) {
+      $xfer += $output->writeFieldBegin('airavataAutoSchedule', TType::BOOL, 1);
+      $xfer += $output->writeBool($this->airavataAutoSchedule);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->overrideManualScheduledParams !== null) {
+      $xfer += $output->writeFieldBegin('overrideManualScheduledParams', TType::BOOL, 2);
+      $xfer += $output->writeBool($this->overrideManualScheduledParams);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->shareExperimentPublicly !== null) {
+      $xfer += $output->writeFieldBegin('shareExperimentPublicly', TType::BOOL, 3);
+      $xfer += $output->writeBool($this->shareExperimentPublicly);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->computationalResourceScheduling !== null) {
+      if (!is_object($this->computationalResourceScheduling)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('computationalResourceScheduling', TType::STRUCT, 4);
+      $xfer += $this->computationalResourceScheduling->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->advanceInputDataHandling !== null) {
+      if (!is_object($this->advanceInputDataHandling)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('advanceInputDataHandling', TType::STRUCT, 5);
+      $xfer += $this->advanceInputDataHandling->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->advanceOutputDataHandling !== null) {
+      if (!is_object($this->advanceOutputDataHandling)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('advanceOutputDataHandling', TType::STRUCT, 6);
+      $xfer += $this->advanceOutputDataHandling->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->qosParams !== null) {
+      if (!is_object($this->qosParams)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('qosParams', TType::STRUCT, 7);
+      $xfer += $this->qosParams->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->throttleResources !== null) {
+      $xfer += $output->writeFieldBegin('throttleResources', TType::BOOL, 8);
+      $xfer += $output->writeBool($this->throttleResources);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->userDN !== null) {
+      $xfer += $output->writeFieldBegin('userDN', TType::STRING, 9);
+      $xfer += $output->writeString($this->userDN);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->generateCert !== null) {
+      $xfer += $output->writeFieldBegin('generateCert', TType::BOOL, 10);
+      $xfer += $output->writeBool($this->generateCert);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ErrorDetails {
+  static $_TSPEC;
+
+  public $errorID = "DO_NOT_SET_AT_CLIENTS";
+  public $creationTime = null;
+  public $actualErrorMessage = null;
+  public $userFriendlyMessage = null;
+  public $errorCategory = null;
+  public $transientOrPersistent = false;
+  public $correctiveAction = null;
+  public $actionableGroup = null;
+  public $rootCauseErrorIdList = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'errorID',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'creationTime',
+          'type' => TType::I64,
+          ),
+        3 => array(
+          'var' => 'actualErrorMessage',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'userFriendlyMessage',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'errorCategory',
+          'type' => TType::I32,
+          ),
+        6 => array(
+          'var' => 'transientOrPersistent',
+          'type' => TType::BOOL,
+          ),
+        7 => array(
+          'var' => 'correctiveAction',
+          'type' => TType::I32,
+          ),
+        8 => array(
+          'var' => 'actionableGroup',
+          'type' => TType::I32,
+          ),
+        9 => array(
+          'var' => 'rootCauseErrorIdList',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['errorID'])) {
+        $this->errorID = $vals['errorID'];
+      }
+      if (isset($vals['creationTime'])) {
+        $this->creationTime = $vals['creationTime'];
+      }
+      if (isset($vals['actualErrorMessage'])) {
+        $this->actualErrorMessage = $vals['actualErrorMessage'];
+      }
+      if (isset($vals['userFriendlyMessage'])) {
+        $this->userFriendlyMessage = $vals['userFriendlyMessage'];
+      }
+      if (isset($vals['errorCategory'])) {
+        $this->errorCategory = $vals['errorCategory'];
+      }
+      if (isset($vals['transientOrPersistent'])) {
+        $this->transientOrPersistent = $vals['transientOrPersistent'];
+      }
+      if (isset($vals['correctiveAction'])) {
+        $this->correctiveAction = $vals['correctiveAction'];
+      }
+      if (isset($vals['actionableGroup'])) {
+        $this->actionableGroup = $vals['actionableGroup'];
+      }
+      if (isset($vals['rootCauseErrorIdList'])) {
+        $this->rootCauseErrorIdList = $vals['rootCauseErrorIdList'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ErrorDetails';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->errorID);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->creationTime);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->actualErrorMessage);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->userFriendlyMessage);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->errorCategory);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->transientOrPersistent);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->correctiveAction);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 8:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->actionableGroup);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 9:
+          if ($ftype == TType::LST) {
+            $this->rootCauseErrorIdList = array();
+            $_size0 = 0;
+            $_etype3 = 0;
+            $xfer += $input->readListBegin($_etype3, $_size0);
+            for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
+            {
+              $elem5 = null;
+              $xfer += $input->readString($elem5);
+              $this->rootCauseErrorIdList []= $elem5;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ErrorDetails');
+    if ($this->errorID !== null) {
+      $xfer += $output->writeFieldBegin('errorID', TType::STRING, 1);
+      $xfer += $output->writeString($this->errorID);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->creationTime !== null) {
+      $xfer += $output->writeFieldBegin('creationTime', TType::I64, 2);
+      $xfer += $output->writeI64($this->creationTime);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->actualErrorMessage !== null) {
+      $xfer += $output->writeFieldBegin('actualErrorMessage', TType::STRING, 3);
+      $xfer += $output->writeString($this->actualErrorMessage);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->userFriendlyMessage !== null) {
+      $xfer += $output->writeFieldBegin('userFriendlyMessage', TType::STRING, 4);
+      $xfer += $output->writeString($this->userFriendlyMessage);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->errorCategory !== null) {
+      $xfer += $output->writeFieldBegin('errorCategory', TType::I32, 5);
+      $xfer += $output->writeI32($this->errorCategory);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->transientOrPersistent !== null) {
+      $xfer += $output->writeFieldBegin('transientOrPersistent', TType::BOOL, 6);
+      $xfer += $output->writeBool($this->transientOrPersistent);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->correctiveAction !== null) {
+      $xfer += $output->writeFieldBegin('correctiveAction', TType::I32, 7);
+      $xfer += $output->writeI32($this->correctiveAction);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->actionableGroup !== null) {
+      $xfer += $output->writeFieldBegin('actionableGroup', TType::I32, 8);
+      $xfer += $output->writeI32($this->actionableGroup);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->rootCauseErrorIdList !== null) {
+      if (!is_array($this->rootCauseErrorIdList)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('rootCauseErrorIdList', TType::LST, 9);
+      {
+        $output->writeListBegin(TType::STRING, count($this->rootCauseErrorIdList));
+        {
+          foreach ($this->rootCauseErrorIdList as $iter6)
+          {
+            $xfer += $output->writeString($iter6);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class JobDetails {
+  static $_TSPEC;
+
+  public $jobID = "DO_NOT_SET_AT_CLIENTS";
+  public $jobDescription = null;
+  public $creationTime = null;
+  public $jobStatus = null;
+  public $applicationStatus = null;
+  public $errors = null;
+  public $computeResourceConsumed = null;
+  public $jobName = null;
+  public $workingDir = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'jobID',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'jobDescription',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'creationTime',
+          'type' => TType::I64,
+          ),
+        4 => array(
+          'var' => 'jobStatus',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workspace\Experiment\JobStatus',
+          ),
+        5 => array(
+          'var' => 'applicationStatus',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workspace\Experiment\ApplicationStatus',
+          ),
+        6 => array(
+          'var' => 'errors',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Workspace\Experiment\ErrorDetails',
+            ),
+          ),
+        7 => array(
+          'var' => 'computeResourceConsumed',
+          'type' => TType::STRING,
+          ),
+        8 => array(
+          'var' => 'jobName',
+          'type' => TType::STRING,
+          ),
+        9 => array(
+          'var' => 'workingDir',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['jobID'])) {
+        $this->jobID = $vals['jobID'];
+      }
+      if (isset($vals['jobDescription'])) {
+        $this->jobDescription = $vals['jobDescription'];
+      }
+      if (isset($vals['creationTime'])) {
+        $this->creationTime = $vals['creationTime'];
+      }
+      if (isset($vals['jobStatus'])) {
+        $this->jobStatus = $vals['jobStatus'];
+      }
+      if (isset($vals['applicationStatus'])) {
+        $this->applicationStatus = $vals['applicationStatus'];
+      }
+      if (isset($vals['errors'])) {
+        $this->errors = $vals['errors'];
+      }
+      if (isset($vals['computeResourceConsumed'])) {
+        $this->computeResourceConsumed = $vals['computeResourceConsumed'];
+      }
+      if (isset($vals['jobName'])) {
+        $this->jobName = $vals['jobName'];
+      }
+      if (isset($vals['workingDir'])) {
+        $this->workingDir = $vals['workingDir'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'JobDetails';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->jobID);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->jobDescription);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->creationTime);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRUCT) {
+            $this->jobStatus = new \Airavata\Model\Workspace\Experiment\JobStatus();
+            $xfer += $this->jobStatus->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::STRUCT) {
+            $this->applicationStatus = new \Airavata\Model\Workspace\Experiment\ApplicationStatus();
+            $xfer += $this->applicationStatus->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::LST) {
+            $this->errors = array();
+            $_size7 = 0;
+            $_etype10 = 0;
+            $xfer += $input->readListBegin($_etype10, $_size7);
+            for ($_i11 = 0; $_i11 < $_size7; ++$_i11)
+            {
+              $elem12 = null;
+              $elem12 = new \Airavata\Model\Workspace\Experiment\ErrorDetails();
+              $xfer += $elem12->read($input);
+              $this->errors []= $elem12;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->computeResourceConsumed);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 8:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->jobName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 9:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->workingDir);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('JobDetails');
+    if ($this->jobID !== null) {
+      $xfer += $output->writeFieldBegin('jobID', TType::STRING, 1);
+      $xfer += $output->writeString($this->jobID);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->jobDescription !== null) {
+      $xfer += $output->writeFieldBegin('jobDescription', TType::STRING, 2);
+      $xfer += $output->writeString($this->jobDescription);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->creationTime !== null) {
+      $xfer += $output->writeFieldBegin('creationTime', TType::I64, 3);
+      $xfer += $output->writeI64($this->creationTime);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->jobStatus !== null) {
+      if (!is_object($this->jobStatus)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('jobStatus', TType::STRUCT, 4);
+      $xfer += $this->jobStatus->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationStatus !== null) {
+      if (!is_object($this->applicationStatus)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('applicationStatus', TType::STRUCT, 5);
+      $xfer += $this->applicationStatus->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->errors !== null) {
+      if (!is_array($this->errors)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('errors', TType::LST, 6);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->errors));
+        {
+          foreach ($this->errors as $iter13)
+          {
+            $xfer += $iter13->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->computeResourceConsumed !== null) {
+      $xfer += $output->writeFieldBegin('computeResourceConsumed', TType::STRING, 7);
+      $xfer += $output->writeString($this->computeResourceConsumed);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->jobName !== null) {
+      $xfer += $output->writeFieldBegin('jobName', TType::STRING, 8);
+      $xfer += $output->writeString($this->jobName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->workingDir !== null) {
+      $xfer += $output->writeFieldBegin('workingDir', TType::STRING, 9);
+      $xfer += $output->writeString($this->workingDir);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class DataTransferDetails {
+  static $_TSPEC;
+
+  public $transferID = "DO_NOT_SET_AT_CLIENTS";
+  public $creationTime = null;
+  public $transferDescription = null;
+  public $transferStatus = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'transferID',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'creationTime',
+          'type' => TType::I64,
+          ),
+        3 => array(
+          'var' => 'transferDescription',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'transferStatus',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workspace\Experiment\TransferStatus',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['transferID'])) {
+        $this->transferID = $vals['transferID'];
+      }
+      if (isset($vals['creationTime'])) {
+        $this->creationTime = $vals['creationTime'];
+      }
+      if (isset($vals['transferDescription'])) {
+        $this->transferDescription = $vals['transferDescription'];
+      }
+      if (isset($vals['transferStatus'])) {
+        $this->transferStatus = $vals['transferStatus'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'DataTransferDetails';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->transferID);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->creationTime);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->transferDescription);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRUCT) {
+            $this->transferStatus = new \Airavata\Model\Workspace\Experiment\TransferStatus();
+            $xfer += $this->transferStatus->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('DataTransferDetails');
+    if ($this->transferID !== null) {
+      $xfer += $output->writeFieldBegin('transferID', TType::STRING, 1);
+      $xfer += $output->writeString($this->transferID);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->creationTime !== null) {
+      $xfer += $output->writeFieldBegin('creationTime', TType::I64, 2);
+      $xfer += $output->writeI64($this->creationTime);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->transferDescription !== null) {
+      $xfer += $output->writeFieldBegin('transferDescription', TType::STRING, 3);
+      $xfer += $output->writeString($this->transferDescription);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->transferStatus !== null) {
+      if (!is_object($this->transferStatus)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('transferStatus', TType::STRUCT, 4);
+      $xfer += $this->transferStatus->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class TaskDetails {
+  static $_TSPEC;
+
+  public $taskID = "DO_NOT_SET_AT_CLIENTS";
+  public $creationTime = null;
+  public $applicationId = null;
+  public $applicationVersion = null;
+  public $applicationDeploymentId = null;
+  public $applicationInputs = null;
+  public $applicationOutputs = null;
+  public $taskScheduling = null;
+  public $advancedInputDataHandling = null;
+  public $advancedOutputDataHandling = null;
+  public $taskStatus = null;
+  public $jobDetailsList = null;
+  public $dataTransferDetailsList = null;
+  public $errors = null;
+  public $enableEmailNotification = null;
+  public $emailAddresses = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'taskID',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'creationTime',
+          'type' => TType::I64,
+          ),
+        3 => array(
+          'var' => 'applicationId',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'applicationVersion',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'applicationDeploymentId',
+          'type' => TType::STRING,
+          ),
+        6 => array(
+          'var' => 'applicationInputs',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\AppInterface\InputDataObjectType',
+            ),
+          ),
+        7 => array(
+          'var' => 'applicationOutputs',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType',
+            ),
+          ),
+        8 => array(
+          'var' => 'taskScheduling',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workspace\Experiment\ComputationalResourceScheduling',
+          ),
+        9 => array(
+          'var' => 'advancedInputDataHandling',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workspace\Experiment\AdvancedInputDataHandling',
+          ),
+        10 => array(
+          'var' => 'advancedOutputDataHandling',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workspace\Experiment\AdvancedOutputDataHandling',
+          ),
+        11 => array(
+          'var' => 'taskStatus',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workspace\Experiment\TaskStatus',
+          ),
+        12 => array(
+          'var' => 'jobDetailsList',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Workspace\Experiment\JobDetails',
+            ),
+          ),
+        13 => array(
+          'var' => 'dataTransferDetailsList',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Workspace\Experiment\DataTransferDetails',
+            ),
+          ),
+        14 => array(
+          'var' => 'errors',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Workspace\Experiment\ErrorDetails',
+            ),
+          ),
+        15 => array(
+          'var' => 'enableEmailNotification',
+          'type' => TType::BOOL,
+          ),
+        16 => array(
+          'var' => 'emailAddresses',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['taskID'])) {
+        $this->taskID = $vals['taskID'];
+      }
+      if (isset($vals['creationTime'])) {
+        $this->creationTime = $vals['creationTime'];
+      }
+      if (isset($vals['applicationId'])) {
+        $this->applicationId = $vals['applicationId'];
+      }
+      if (isset($vals['applicationVersion'])) {
+        $this->applicationVersion = $vals['applicationVersion'];
+      }
+      if (isset($vals['applicationDeploymentId'])) {
+        $this->applicationDeploymentId = $vals['applicationDeploymentId'];
+      }
+      if (isset($vals['applicationInputs'])) {
+        $this->applicationInputs = $vals['applicationInputs'];
+      }
+      if (isset($vals['applicationOutputs'])) {
+        $this->applicationOutputs = $vals['applicationOutputs'];
+      }
+      if (isset($vals['taskScheduling'])) {
+        $this->taskScheduling = $vals['taskScheduling'];
+      }
+      if (isset($vals['advancedInputDataHandling'])) {
+        $this->advancedInputDataHandling = $vals['advancedInputDataHandling'];
+      }
+      if (isset($vals['advancedOutputDataHandling'])) {
+        $this->advancedOutputDataHandling = $vals['advancedOutputDataHandling'];
+      }
+      if (isset($vals['taskStatus'])) {
+        $this->taskStatus = $vals['taskStatus'];
+      }
+      if (isset($vals['jobDetailsList'])) {
+        $this->jobDetailsList = $vals['jobDetailsList'];
+      }
+      if (isset($vals['dataTransferDetailsList'])) {
+        $this->dataTransferDetailsList = $vals['dataTransferDetailsList'];
+      }
+      if (isset($vals['errors'])) {
+        $this->errors = $vals['errors'];
+      }
+      if (isset($vals['enableEmailNotification'])) {
+        $this->enableEmailNotification = $vals['enableEmailNotification'];
+      }
+      if (isset($vals['emailAddresses'])) {
+        $this->emailAddresses = $vals['emailAddresses'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'TaskDetails';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->taskID);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->creationTime);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->applicationId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->applicationVersion);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->applicationDeploymentId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::LST) {
+            $this->applicationInputs = array();
+            $_size14 = 0;
+            $_etype17 = 0;
+            $xfer += $input->readListBegin($_etype17, $_size14);
+            for ($_i18 = 0; $_i18 < $_size14; ++$_i18)
+            {
+              $elem19 = null;
+              $elem19 = new \Airavata\Model\AppCatalog\AppInterface\InputDataObjectType();
+              $xfer += $elem19->read($input);
+              $this->applicationInputs []= $elem19;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::LST) {
+            $this->applicationOutputs = array();
+            $_size20 = 0;
+            $_etype23 = 0;
+            $xfer += $input->readListBegin($_etype23, $_size20);
+            for ($_i24 = 0; $_i24 < $_size20; ++$_i24)
+            {
+              $elem25 = null;
+              $elem25 = new \Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType();
+              $xfer += $elem25->read($input);
+              $this->applicationOutputs []= $elem25;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 8:
+          if ($ftype == TType::STRUCT) {
+            $this->taskScheduling = new \Airavata\Model\Workspace\Experiment\ComputationalResourceScheduling();
+            $xfer += $this->taskScheduling->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 9:
+          if ($ftype == TType::STRUCT) {
+            $this->advancedInputDataHandling = new \Airavata\Model\Workspace\Experiment\AdvancedInputDataHandling();
+            $xfer += $this->advancedInputDataHandling->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 10:
+          if ($ftype == TType::STRUCT) {
+            $this->advancedOutputDataHandling = new \Airavata\Model\Workspace\Experiment\AdvancedOutputDataHandling();
+            $xfer += $this->advancedOutputDataHandling->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 11:
+          if ($ftype == TType::STRUCT) {
+            $this->taskStatus = new \Airavata\Model\Workspace\Experiment\TaskStatus();
+            $xfer += $this->taskStatus->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 12:
+          if ($ftype == TType::LST) {
+            $this->jobDetailsList = array();
+            $_size26 = 0;
+            $_etype29 = 0;
+            $xfer += $input->readListBegin($_etype29, $_size26);
+            for ($_i30 = 0; $_i30 < $_size26; ++$_i30)
+            {
+              $elem31 = null;
+              $elem31 = new \Airavata\Model\Workspace\Experiment\JobDetails();
+              $xfer += $elem31->read($input);
+              $this->jobDetailsList []= $elem31;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 13:
+          if ($ftype == TType::LST) {
+            $this->dataTransferDetailsList = array();
+            $_size32 = 0;
+            $_etype35 = 0;
+            $xfer += $input->readListBegin($_etype35, $_size32);
+            for ($_i36 = 0; $_i36 < $_size32; ++$_i36)
+            {
+              $elem37 = null;
+              $elem37 = new \Airavata\Model\Workspace\Experiment\DataTransferDetails();
+              $xfer += $elem37->read($input);
+              $this->dataTransferDetailsList []= $elem37;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 14:
+          if ($ftype == TType::LST) {
+            $this->errors = array();
+            $_size38 = 0;
+            $_etype41 = 0;
+            $xfer += $input->readListBegin($_etype41, $_size38);
+            for ($_i42 = 0; $_i42 < $_size38; ++$_i42)
+            {
+              $elem43 = null;
+              $elem43 = new \Airavata\Model\Workspace\Experiment\ErrorDetails();
+              $xfer += $elem43->read($input);
+              $this->errors []= $elem43;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 15:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->enableEmailNotification);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 16:
+          if ($ftype == TType::LST) {
+            $this->emailAddresses = array();
+            $_size44 = 0;
+            $_etype47 = 0;
+            $xfer += $input->readListBegin($_etype47, $_size44);
+            for ($_i48 = 0; $_i48 < $_size44; ++$_i48)
+            {
+              $elem49 = null;
+              $xfer += $input->readString($elem49);
+              $this->emailAddresses []= $elem49;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('TaskDetails');
+    if ($this->taskID !== null) {
+      $xfer += $output->writeFieldBegin('taskID', TType::STRING, 1);
+      $xfer += $output->writeString($this->taskID);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->creationTime !== null) {
+      $xfer += $output->writeFieldBegin('creationTime', TType::I64, 2);
+      $xfer += $output->writeI64($this->creationTime);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationId !== null) {
+      $xfer += $output->writeFieldBegin('applicationId', TType::STRING, 3);
+      $xfer += $output->writeString($this->applicationId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationVersion !== null) {
+      $xfer += $output->writeFieldBegin('applicationVersion', TType::STRING, 4);
+      $xfer += $output->writeString($this->applicationVersion);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationDeploymentId !== null) {
+      $xfer += $output->writeFieldBegin('applicationDeploymentId', TType::STRING, 5);
+      $xfer += $output->writeString($this->applicationDeploymentId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationInputs !== null) {
+      if (!is_array($this->applicationInputs)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('applicationInputs', TType::LST, 6);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->applicationInputs));
+        {
+          foreach ($this->applicationInputs as $iter50)
+          {
+            $xfer += $iter50->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationOutputs !== null) {
+      if (!is_array($this->applicationOutputs)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('applicationOutputs', TType::LST, 7);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->applicationOutputs));
+        {
+          foreach ($this->applicationOutputs as $iter51)
+          {
+            $xfer += $iter51->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->taskScheduling !== null) {
+      if (!is_object($this->taskScheduling)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('taskScheduling', TType::STRUCT, 8);
+      $xfer += $this->taskScheduling->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->advancedInputDataHandling !== null) {
+      if (!is_object($this->advancedInputDataHandling)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('advancedInputDataHandling', TType::STRUCT, 9);
+      $xfer += $this->advancedInputDataHandling->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->advancedOutputDataHandling !== null) {
+      if (!is_object($this->advancedOutputDataHandling)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('advancedOutputDataHandling', TType::STRUCT, 10);
+      $xfer += $this->advancedOutputDataHandling->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->taskStatus !== null) {
+      if (!is_object($this->taskStatus)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('taskStatus', TType::STRUCT, 11);
+      $xfer += $this->taskStatus->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->jobDetailsList !== null) {
+      if (!is_array($this->jobDetailsList)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('jobDetailsList', TType::LST, 12);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->jobDetailsList));
+        {
+          foreach ($this->jobDetailsList as $iter52)
+          {
+            $xfer += $iter52->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->dataTransferDetailsList !== null) {
+      if (!is_array($this->dataTransferDetailsList)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('dataTransferDetailsList', TType::LST, 13);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->dataTransferDetailsList));
+        {
+          foreach ($this->dataTransferDetailsList as $iter53)
+          {
+            $xfer += $iter53->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->errors !== null) {
+      if (!is_array($this->errors)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('errors', TType::LST, 14);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->errors));
+        {
+          foreach ($this->errors as $iter54)
+          {
+            $xfer += $iter54->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->enableEmailNotification !== null) {
+      $xfer += $output->writeFieldBegin('enableEmailNotification', TType::BOOL, 15);
+      $xfer += $output->writeBool($this->enableEmailNotification);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->emailAddresses !== null) {
+      if

<TRUNCATED>

[35/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/partials/experiment-info.blade.php
----------------------------------------------------------------------
diff --git a/app/views/partials/experiment-info.blade.php b/app/views/partials/experiment-info.blade.php
new file mode 100644
index 0000000..90c7ae7
--- /dev/null
+++ b/app/views/partials/experiment-info.blade.php
@@ -0,0 +1,136 @@
+    <div class="container" style="max-width: 750px;">
+
+    @if(isset( $invalidExperimentId ) )
+        <div class="alert alert-danger">
+            The Experiment ID does not exist. Please go to correct experiment.
+        </div>
+    @else
+    <h1>
+        Experiment Summary
+        @if( !isset($dashboard))
+        <small><a href="{{ URL::to('/') }}/experiment/summary?expId={{ $experiment->experimentID }}"
+                  title="Refresh"><span class="glyphicon glyphicon-refresh refresh-exp"></span></a></small>
+    	@endif
+    </h1>
+    
+    
+    <table class="table">
+        <tr>
+            <td><strong>Name</strong></td>
+            <td><?php echo $experiment->name; ?></td>
+        </tr>
+        <tr>
+            <td><strong>Description</strong></td>
+            <td><?php echo $experiment->description; ?></td>
+        </tr>
+        <tr>
+            <td><strong>Project</strong></td>
+            <td><?php echo $project->name; ?></td>
+        </tr>
+        <tr>
+            <td><strong>Application</strong></td>
+            <td><?php echo $expVal["applicationInterface"]->applicationName; ?></td>
+        </tr>
+        <tr>
+            <td><strong>Compute resource</strong></td>
+            <td><?php echo $expVal["computeResource"]->hostName; ?></td>
+        </tr>
+        <tr>
+            <td><strong>Experiment Status</strong></td>
+            <td class="exp-status"><?php echo $expVal["experimentStatusString"]; ?></td>
+        </tr>
+        <?php
+        if ($expVal["jobState"]) echo '
+        <tr>
+            <td><strong>Job Status</strong></td>
+            <td>' . $expVal["jobState"] . '</td>
+        </tr>
+        ';
+        ?>
+
+        @if( isset($dashboard))
+        <tr>
+            <td><strong>Working Dir</strong></td>
+
+            <?php
+            foreach($jobDetails as $job) echo '
+                <td>' . $job->workingDir . '</td>
+            ';
+            ?>
+        </tr>
+         <tr>
+            <td><strong>Job Description</strong></td>
+
+            <?php
+            foreach($jobDetails as $job) echo '
+                <td>' . $job->jobDescription . '</td>
+            ';
+            ?>
+        </tr>
+        @endif
+
+        <tr>
+            <td><strong>Creation time</strong></td>
+            <td><?php echo $expVal["experimentCreationTime"]; ?></td>
+        </tr>
+        <tr>
+            <td><strong>Update time</strong></td>
+            <td><?php echo $expVal["experimentTimeOfStateChange"]; ?></td>
+        </tr>
+        <tr>
+            <td><strong>Inputs</strong></td>
+            <td><?php Utilities::list_input_files($experiment); ?></td>
+        </tr>
+        <tr>
+            <td><strong>Outputs</strong></td>
+            <td><?php Utilities::list_output_files($experiment, $expVal["experimentStatusString"]); ?></td>
+        </tr>
+        @if( $expVal["experimentStatusString"] == "FAILED")
+        <tr>
+            <td><strong>Errors</strong></td>
+            <td>
+                @foreach( (array)$experiment->errors as $error)
+                    {{ $error->actualErrorMessage }}
+                @endforeach
+            </td>
+        </tr>
+        @endif
+        
+    </table>
+
+    @if( !isset( $dashboard))
+    <form action="{{URL::to('/') }}/experiment/summary" method="post" role="form">
+        <div class="btn-toolbar">
+            <input name="launch"
+                   type="submit"
+                   class="btn btn-success"
+                   value="Launch"
+                   title="Launch the experiment" <?php if(!$expVal["editable"] ) echo 'disabled'  ?>>
+            <a href="{{URL::to('/') }}/experiment/cancel?expId={{ $experiment->experimentID }}"
+               class="btn btn-default"
+               role="button"
+               title="Edit the experiment's settings" <?php if(!$expVal["cancelable"] ) echo 'disabled'  ?>>
+                <input name="cancel" type="submit" class="btn btn-warning" value="Cancel" <?php if(!$expVal["cancelable"]) echo 'disabled';  ?> >
+            </a>
+            <input name="clone"
+                   type="submit"
+                   class="btn btn-primary"
+                   value="Clone"
+                   title="Create a clone of the experiment. Cloning is the only way to change an experiment's settings
+                    after it has been launched.">
+            <input type="hidden" name="expId" value="{{ Input::get('expId') }}"/>
+            <a href="{{URL::to('/') }}/experiment/edit?expId={{ $experiment->experimentID }}"
+               class="btn btn-default"
+               role="button"
+               title="Edit the experiment's settings" <?php if(!$expVal["editable"] ) echo 'disabled'  ?>>
+                <span class="glyphicon glyphicon-pencil"></span>
+                Edit
+            </a>
+        </div>
+    </form>
+    @endif
+    <input type="hidden" id="expObj" value="{{ htmlentities( json_encode( $experiment)) }}"/>
+
+    <!-- check of correct experiment Id ends here -->
+    @endif
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/partials/experiment-inputs.blade.php
----------------------------------------------------------------------
diff --git a/app/views/partials/experiment-inputs.blade.php b/app/views/partials/experiment-inputs.blade.php
new file mode 100644
index 0000000..475e065
--- /dev/null
+++ b/app/views/partials/experiment-inputs.blade.php
@@ -0,0 +1,111 @@
+<div class="form-group required">
+    <label for="experiment-name" class="control-label">Experiment Name</label>
+    <input type="text" class="form-control" name="experiment-name" id="experiment-name" placeholder="Enter experiment name" autofocus required="required" {{ $expInputs['disabled'] }} value="{{ $expInputs['experimentName'] }}">
+</div>
+<div class="form-group">
+    <label for="experiment-description">Experiment Description</label>
+    <textarea class="form-control" name="experiment-description" id="experiment-description" placeholder="Optional: Enter a short description of the experiment" {{ $expInputs['disabled'] }}>{{ $expInputs['experimentDescription'] }}</textarea>
+</div>
+<div class="form-group required">
+    <label for="project" class="control-label">Project</label>
+    @if( isset( $expInputs['cloning']))
+        {{ Utilities::create_project_select($expInputs['experiment']->projectID, $expInputs['expVal']['editable']) }}
+    @else
+        {{ Utilities::create_project_select($expInputs['project'], !$expInputs['disabled']) }}
+    @endif
+</div>
+    <div class="form-group">
+    <label for="application">Application</label>
+    @if( isset( $expInputs['cloning']))
+        {{ Utilities::create_application_select($expInputs['application'], false)}}
+    @else
+        {{ Utilities::create_application_select($expInputs['application'], !$expInputs['disabled']) }}
+    @endif
+</div>
+
+<div class="panel panel-default">
+    <div class="panel-heading">Application configuration</div>
+    <div class="panel-body">
+        <label>Application input</label>
+        <div class="well">
+            <input type="hidden" id="allowedFileSize" value="{{$expInputs['allowedFileSize']}}"/>
+            @if( isset( $expInputs['cloning']))
+                <div class="form-group">
+                    <p><strong>Current inputs</strong></p>
+                    {{ Utilities::list_input_files($expInputs['experiment']) }}
+                </div>
+                {{ Utilities::create_inputs($expInputs['application'], false) }}
+            @else
+                {{ Utilities::create_inputs($expInputs['application'], true) }}
+            @endif
+
+        </div>
+        <div class="form-group">
+            <label for="compute-resource">Compute Resource</label>
+            @if( isset( $expInputs['cloning']))
+                {{ Utilities::create_compute_resources_select($expInputs['experiment']->applicationId, $expInputs['expVal']['scheduling']->resourceHostId) }}
+            @else
+                {{ Utilities::create_compute_resources_select($expInputs['application'], null) }}
+            @endif
+        </div>
+
+        <div class="form-group">
+            <label for="node-count">Queue Name</label>
+            <input type="text" class="form-control" name="queue-name" id="queue-name" 
+            value="@if(isset($expInputs['expVal']) ){{ $expInputs['expVal']['scheduling']->queueName }}  @else{{$expInputs['queueName']}} @endif"
+            @if(isset($expInputs['expVal']) ) @if(!$expInputs['expVal']['editable']){{ disabled }} @endif @endif>
+        </div>
+        <div class="form-group">
+            <label for="node-count">Node Count</label>
+            <input type="number" class="form-control" name="node-count" id="node-count" min="1"
+            value="@if(isset($expInputs['expVal']) ){{ $expInputs['expVal']['scheduling']->nodeCount }}@else{{$expInputs['nodeCount']}}@endif"
+            @if(isset($expInputs['expVal']) ) @if(!$expInputs['expVal']['editable']){{disabled}} @endif @endif>
+        </div>
+        <div class="form-group">
+            <label for="cpu-count">Total Core Count</label>
+            <input type="number" class="form-control" name="cpu-count" id="cpu-count" min="1"
+            value="@if(isset($expInputs['expVal']) ){{ $expInputs['expVal']['scheduling']->totalCPUCount }}@else{{$expInputs['cpuCount']}}@endif"
+            @if(isset($expInputs['expVal'])) @if(!$expInputs['expVal']['editable']){{disabled}} @endif @endif>
+        </div>
+        <div class="form-group">
+            <label for="wall-time">Wall Time Limit</label>
+            <div class="input-group">
+                <input type="number" class="form-control" name="wall-time" id="wall-time" min="0"
+                value="@if(isset($expInputs['expVal']) ){{ $expInputs['expVal']['scheduling']->wallTimeLimit }}@else{{$expInputs['wallTimeLimit']}}@endif"
+                @if(isset($expInputs['expVal'])) @if(!$expInputs['expVal']['editable']){{disabled}} @endif @endif>
+                <span class="input-group-addon">minutes</span>
+            </div>
+        </div>
+        <div class="form-group">
+            <label for="wall-time">Total Physical Memory</label>
+            <div class="input-group">
+                <input type="number" class="form-control" name="total-physical-memory" id="wall-time" min="0"
+                value="@if(isset($expInputs['expVal']) ){{ $expInputs['expVal']['scheduling']->totalPhysicalMemory }}@endif"
+                @if(isset($expInputs['expVal'])) @if(!$expInputs['expVal']['editable']){{disabled}} @endif @endif>
+                <span class="input-group-addon">MB</span>
+            </div>
+        </div>
+    </div>
+</div>
+<h3>Notifications</h3>
+<div class="form-group well">
+	<label for=""></label>
+	<input type="checkbox" id="enableEmail" name="enableEmailNotification" value="1">Do you want to receive email notifications for status changes in the experiment?<br/>
+	<div class="emailSection hide">
+		<h4>Enter Email Address here.</h4>
+		<div class="emailAddresses">
+			<input type="email" id="emailAddresses" class="form-control" name="emailAddresses[]" placeholder="Email"/>
+		</div>
+		<button type="button" class="addEmail btn btn-default">Add another Email</button>
+	</div>
+</div>
+
+@if( $expInputs["advancedOptions"])
+<h3>Advanced Options</h3>
+<div class="form-group well">
+    <h4>Enter UserDN</h4>
+    <div class="userdninfo">
+        <input type="text" class="form-control" name="userDN" placeholder="user"/>
+    </div>
+</div>
+@endif

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/partials/gateway-preferences.blade.php
----------------------------------------------------------------------
diff --git a/app/views/partials/gateway-preferences.blade.php b/app/views/partials/gateway-preferences.blade.php
new file mode 100644
index 0000000..51889d4
--- /dev/null
+++ b/app/views/partials/gateway-preferences.blade.php
@@ -0,0 +1,67 @@
+<!-- String replace is done as Jquery creates problems when using period(.) in id or class. -->
+<div id="cr-{{ str_replace( '.', "_", $computeResource->computeResourceId) }}" class="@if(isset( $show) ) @if( !$show) hide @endif @else hide @endif">
+	<h3 class="text-center">Set Preferences</h3>
+	<div class="form-group">
+		<label class="control-label col-md-3">Override by Airavata</label>
+		<div class="col-md-9">
+			<select class="form-control" name="overridebyAiravata">
+				<option value="1" @if( isset( $preferences) ) @if( 1 == $preferences->overridebyAiravata) selected @endif @endif>True</option>
+				<option value="0" @if( isset( $preferences) )  @if( 0 == $preferences->overridebyAiravata) selected @endif @endif>False</option>
+			</select>
+		</div>
+	</div><br/>
+	<div class="form-group">
+		<label class="control-label col-md-3">Login Username</label>
+		<div class="col-md-9">
+			<input type="text" name="loginUserName" class="form-control" value="@if( isset( $preferences) ){{$preferences->loginUserName}}@endif" />
+		</div>
+	</div>
+	<div class="form-group">
+		<label class="control-label col-md-3">Preferred Job Submission Protocol</label>
+		<div class="col-md-9">
+			<select name="preferredJobSubmissionProtocol" class="form-control">
+			@foreach( (array)$computeResource->jobSubmissionInterfaces as $index => $jsi)
+				<option value="{{$jsi->jobSubmissionProtocol}}" @if( isset( $preferences) )  @if( $preferences->preferredJobSubmissionProtocol == $jsi->jobSubmissionProtocol) selected @endif @endif>{{ $crData["jobSubmissionProtocols"][$jsi->jobSubmissionProtocol] }}</option>
+			@endforeach
+			</select>
+
+		</div>
+	</div>
+	<br/>
+	<div class="form-group">
+		<label class="control-label col-md-3">Preferred Data Movement Protocol</label>
+		<div class="col-md-9">
+			<select name="preferredDataMovementProtocol" class="form-control">
+			@foreach( (array)$computeResource->dataMovementInterfaces as $index => $dmi)
+				<option value="{{ $dmi->dataMovementProtocol}}"  @if( isset( $preferences) )  @if( $preferences->preferredDataMovementProtocol == $dmi->dataMovementProtocol) selected @endif @endif>{{ $crData["dataMovementProtocols"][$dmi->dataMovementProtocol] }}</option>
+			@endforeach
+			</select>
+		</div>
+	</div>
+	<div class="form-group">
+		<label class="control-label col-md-3">Preferred Batch Queue</label>
+		<div class="col-md-9">
+			<select name="preferredBatchQueue" class="form-control">
+			@foreach( (array)$computeResource->batchQueues as $index => $queue)
+				<option value="{{ $queue->queueName}}"   @if( isset( $preferences) )  @if( $preferences->preferredBatchQueue == $queue->queueName) selected @endif @endif>{{ $queue->queueName}}</option>
+			@endforeach
+			</select>
+		</div>
+	</div>
+	<div class="form-group">
+		<label class="control-label col-md-3">Scratch Location</label>
+		<div class="col-md-9">
+			<input type="text" name="scratchLocation" class="form-control" value="@if( isset( $preferences) ){{$preferences->scratchLocation}}@endif" />
+		</div>
+	</div>
+
+	<div class="form-group">
+		<label class="control-label col-md-3">Allocation Project Number</label>
+		<div class="col-md-9">
+			<input type="text" name="allocationProjectNumber" class="form-control" value="@if( isset( $preferences) ){{$preferences->allocationProjectNumber}}@endif"/>
+		</div>
+	</div>
+	<div class="form-group">
+		<input type="submit" class="form-control btn btn-primary" value="Set preferences" />
+	</div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/partials/interface-block.blade.php
----------------------------------------------------------------------
diff --git a/app/views/partials/interface-block.blade.php b/app/views/partials/interface-block.blade.php
new file mode 100644
index 0000000..3510bd3
--- /dev/null
+++ b/app/views/partials/interface-block.blade.php
@@ -0,0 +1,49 @@
+@if( isset( $interfaceObject) )
+	<input type="hidden" name="app-interface-id" value="{{$interfaceObject->applicationInterfaceId}}"/>
+@endif
+<div class="appInterfaceInputs">
+	<div class="form-group required">
+		<label class="control-label interface-name">Application Name</label>
+		<input type="text" readonly class="form-control" name="applicationName" required value="@if( isset( $interfaceObject) ){{$interfaceObject->applicationName}}@endif"/>
+	</div>
+	<div class="form-group">
+		<label class="control-label">Application Description</label>
+		<input type="text" readonly class="form-control" name="applicationDescription" value="@if( isset( $interfaceObject) ){{ $interfaceObject->applicationDescription}}@endif" />
+	</div>
+	<div class="form-group">
+		<label class="control-label">Application Modules</label>
+		<div class="app-modules">
+		@if( isset( $interfaceObject))
+		@for( $i=0; $i< count( $interfaceObject->applicationModules); $i++ )
+			<div class="input-group">
+				<select name="applicationModules[]" class="app-module-select form-control" readonly>
+				@foreach( $modules as $index => $module)
+					<option value="{{ $module->appModuleId }}" @if( $interfaceObject->applicationModules[$i] == $module->appModuleId) selected @endif>{{ $module->appModuleName}}</option>
+				@endforeach
+				</select>
+				<span class="input-group-addon hide remove-app-module" style="cursor:pointer;">x</span>
+			</div>
+		@endfor
+		@endif
+		</div>
+		<button type="button" class="hide btn btn-default add-app-module">Add Application Module</button>
+	</div>
+	<div class="form-group form-horizontal">
+		@if( isset( $interfaceObject))
+			@foreach( (array)$interfaceObject->applicationInputs as $index => $appInputs)
+				@include( 'partials/interface-input-block', array('dataTypes' => $dataTypes, 'appInputs' => $appInputs) )
+			@endforeach
+		@endif
+		<div class="app-inputs"></div>
+		<button type="button" class=" hide btn btn-default add-input">Add Application Input</button>
+	</div>
+	<div class="form-group form-horizontal">
+		@if( isset( $interfaceObject) )
+			@foreach( (array)$interfaceObject->applicationOutputs as $index => $appOutputs)
+				@include( 'partials/interface-output-block', array('dataTypes' => $dataTypes, 'appOutputs' => $appOutputs) )
+			@endforeach
+		@endif
+		<div class="app-outputs"></div>
+		<button type="button" class="hide btn btn-default add-output">Add Application Output</button>
+	</div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/partials/interface-input-block.blade.php
----------------------------------------------------------------------
diff --git a/app/views/partials/interface-input-block.blade.php b/app/views/partials/interface-input-block.blade.php
new file mode 100644
index 0000000..60fde02
--- /dev/null
+++ b/app/views/partials/interface-input-block.blade.php
@@ -0,0 +1,95 @@
+<div class="well app-input-data-block">
+	<span class="glyphicon glyphicon-trash pull-right remove-input-space"></span>
+	<h4>App Input Fields</h4>
+	<div class="form-group required">
+		<label class="control-label col-md-3">Name</label>
+		<div class="col-md-9">
+			<input type="text" readonly class="form-control" name="inputName[]" required value="@if( isset( $appInputs) ){{$appInputs->name}}@endif"/>
+		</div>
+	</div>
+	<div class="form-group">
+		<label class="control-label col-md-3">Value</label>
+		<div class="col-md-9">
+			<input type="text" readonly class="form-control" name="inputValue[]" value="@if( isset( $appInputs)){{$appInputs->value}}@endif"/>
+		</div>
+	</div>
+	<div class="form-group">
+		<label class="control-label col-md-3">Type</label>
+		<div class="col-md-9">
+			<select class="form-control" name="inputType[]" readonly>
+			@foreach( $dataTypes as $index => $dataType)
+				<option value="{{ $index }}" @if( isset( $appInputs) ) @if( $index == $appInputs->type) selected @endif @endif>{{ $dataType }}</option>
+			@endforeach
+			</select>
+		</div>
+	</div>
+	<div class="form-group">
+		<label class="control-label col-md-3">Application Argument</label>
+		<div class="col-md-9">
+			<input type="text" readonly class="form-control" name="applicationArgumentInput[]" value="@if( isset( $appInputs) ){{$appInputs->applicationArgument }}@endif"/>
+		</div>
+	</div>
+	<div class="form-group">
+		<label class="control-label col-md-3">Standard Input</label>
+		<div class="col-md-9">
+			<select class="form-control" name="standardInput[]" readonly>
+				<option value="0" @if( isset( $appInputs) )  @if( 0 == $appInputs->standardInput) selected @endif @endif>False</option>
+				<option value="1" @if( isset( $appInputs) ) @if( 1 == $appInputs->standardInput) selected @endif @endif>True</option>
+			</select>
+		</div>
+	</div>
+	<div class="form-group">
+		<label class="control-label col-md-3">User Friendly Description</label>
+		<div class="col-md-9">
+			<textarea readonly class="form-control" name="userFriendlyDescription[]">@if( isset( $appInputs) ){{$appInputs->userFriendlyDescription}}@endif</textarea>
+		</div>
+	</div>
+	<div class="form-group col-md-6">
+		<label class="control-label col-md-5">Input Order</label>	
+		<div class="col-md-7">
+			<input type="number" readonly class="form-control" name="inputOrder[]" value="@if( isset( $appInputs) ){{$appInputs->inputOrder}}@endif"/>
+		</div>
+	</div>
+	<div class="form-group col-md-7">
+		<label class="control-label col-md-4">Data is Staged?</label>
+		<div class="col-md-8">
+			<select name="dataStaged[]" class="form-control">
+				<option>select</option>
+				<option value="1" @if( isset( $appInputs) ) @if( $appInputs->dataStaged == 1) selected @endif @endif>True</option>
+				<option value="0" @if( isset( $appInputs) ) @if( $appInputs->dataStaged == 0) selected @endif @endif>False</option>
+			</select>
+		</div>
+		<!-- Removed Radio button because it creates problems with multiple inputs
+		<label class="radio-inline">
+			<input type="radio" name="dataStaged[]"  @if( isset( $appInputs) ) @if( $appInputs->dataStaged == 1) checked @endif @endif>True
+		</label>
+		<label class="radio-inline">
+			<input type="radio" name="dataStaged[]"  @if( isset( $appInputs) ) @if( $appInputs->dataStaged == 0) checked @endif @endif>False
+		</label>
+		-->
+	</div>
+	<div class="form-group col-md-6">
+		<label class="control-label col-md-6">Is the Input required?</label>
+		<div class="col-md-6">
+			<select class="form-control" name="isRequiredInput[]" readonly>
+				<option value="0" @if( isset( $appInputs) )  @if( 0 == $appInputs->isRequired) selected @endif @endif>False</option>
+				<option value="1" @if( isset( $appInputs) ) @if( 1 == $appInputs->isRequired) selected @endif @endif>True</option>
+			</select>
+		</div>
+	</div>
+	<div class="form-group col-md-7">
+		<label class="control-label col-md-6">Required on command line?</label>
+		<div class="col-md-6">
+			<select class="form-control" name="requiredToAddedToCommandLineInput[]" readonly>
+				<option value="0" @if( isset( $appInputs) )  @if( 0 == $appInputs->requiredToAddedToCommandLine) selected @endif @endif>False</option>
+				<option value="1" @if( isset( $appInputs) ) @if( 1 == $appInputs->requiredToAddedToCommandLine) selected @endif @endif>True</option>
+			</select>
+		</div>
+	</div>
+	<div class="form-group">
+		<label class="control-label col-md-3">Meta Data</label>
+		<div class="col-md-9">
+			<textarea readonly class="form-control" name="metaData[]">@if( isset( $appInputs) ){{$appInputs->metaData}}@endif</textarea>
+		</div>
+	</div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/partials/interface-output-block.blade.php
----------------------------------------------------------------------
diff --git a/app/views/partials/interface-output-block.blade.php b/app/views/partials/interface-output-block.blade.php
new file mode 100644
index 0000000..fe78060
--- /dev/null
+++ b/app/views/partials/interface-output-block.blade.php
@@ -0,0 +1,80 @@
+<div class="well">
+	<span class="glyphicon glyphicon-trash pull-right remove-output-space"></span>
+	<h4>App Output Fields</h4>
+	<div class="form-group required">
+		<label class="control-label col-md-3">Name</label>
+		<div class="col-md-9">
+			<input type="text" readonly class="form-control" name="outputName[]" required value="@if( isset( $appOutputs) ){{$appOutputs->name}}@endif"/>
+		</div>
+	</div>
+	<div class="form-group">
+		<label class="control-label col-md-3">Value</label>
+		<div class="col-md-9">
+			<input type="text" readonly class="form-control" name="outputValue[]" value="@if( isset( $appOutputs) ){{$appOutputs->value}}@endif"/>
+		</div>
+	</div>
+	<div class="form-group">
+		<label class="control-label col-md-3">Type</label>
+		<div class="col-md-9">
+			<select class="form-control" name="outputType[]" readonly>
+			@foreach( $dataTypes as $index => $dataType)
+				<option value="{{ $index }}" @if( isset( $appOutputs) )  @if( $index == $appOutputs->type ) selected @endif @endif>{{ $dataType }}</option>
+			@endforeach
+			</select>
+		</div>
+	</div>
+	<div class="form-group">
+		<label class="control-label col-md-3">Application Argument</label>
+		<div class="col-md-9">
+			<input type="text" readonly class="form-control" name="applicationArgumentOutput[]" value="@if( isset( $appOutputs) ){{$appOutputs->applicationArgument }}@endif"/>
+		</div>
+	</div>
+	<div class="form-group">
+		<label class="control-label col-md-3">Data Movement</label>
+		<div class="col-md-9">
+			<select name="dataMovement[]" class="form-control">
+				<option>select</option>
+				<option value="1" @if( isset( $appOutputs) ) @if( $appOutputs->dataMovement == 1) selected @endif @endif>True</option>
+				<option value="0" @if( isset( $appOutputs) ) @if( $appOutputs->dataMovement == 0) selected @endif @endif>False</option>
+			</select>
+		</div>
+		<!--
+		<label class="radio-inline">
+			<input type="radio" name="dataMovement[]"  @if( isset( $appOutputs) ) @if( $appOutputs->dataMovement == 1) checked @endif @endif>True
+		</label>
+		<label class="radio-inline">
+			<input type="radio" name="dataMovement[]"  @if( isset( $appOutputs) ) @if( $appOutputs->dataMovement == 0) checked @endif @endif>False
+		</label>
+		-->
+	</div>
+	<div class="form-group col-md-6">
+		<label class="control-label col-md-6">Is the Output required?</label>
+		<div class="col-md-6">
+			<select class="form-control" name="isRequiredOutput[]" readonly>
+				<option value="0" @if( isset( $appOutputs) )  @if( 0 == $appOutputs->isRequired) selected @endif @endif>False</option>
+				<option value="1" @if( isset( $appOutputs) ) @if( 1 == $appOutputs->isRequired) selected @endif @endif>True</option>
+			</select>
+		</div>
+	</div>
+	<div class="form-group col-md-7">
+		<label class="control-label col-md-6">Required on command line?</label>
+		<div class="col-md-6">
+			<select class="form-control" name="requiredToAddedToCommandLineOutput[]" readonly>
+				<option value="0" @if( isset( $appOutputs) )  @if( 0 == $appOutputs->requiredToAddedToCommandLine) selected @endif @endif>False</option>
+				<option value="1" @if( isset( $appOutputs) ) @if( 1 == $appOutputs->requiredToAddedToCommandLine) selected @endif @endif>True</option>
+			</select>
+		</div>
+	</div>
+	<div class="form-group">
+		<label class="control-label col-md-3">Location</label>	
+		<div class="col-md-9">
+			<input type="text" readonly class="form-control" name="location[]" value="@if( isset( $appOutputs) ){{$appOutputs->location}}@endif"/>
+		</div>
+	</div>
+	<div class="form-group">
+		<label class="control-label col-md-3">Search Query</label>	
+		<div class="col-md-9">
+			<input type="text" readonly class="form-control" name="searchQuery[]" value="@if( isset( $appOutputs) ){{$appOutputs->searchQuery}}@endif"/>
+		</div>
+	</div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/partials/module-block.blade.php
----------------------------------------------------------------------
diff --git a/app/views/partials/module-block.blade.php b/app/views/partials/module-block.blade.php
new file mode 100644
index 0000000..b30ad27
--- /dev/null
+++ b/app/views/partials/module-block.blade.php
@@ -0,0 +1,16 @@
+<div id="new-app-module-block">
+	
+	<div class="form-group required">
+		<label class="control-label">Application Module Name</label>
+		<input type="text" class="form-control edit-name" name="appModuleName" maxlength="150" required/>
+	</div>
+	<div class="form-group">
+		<label class="control-label">Application Module Version</label>
+		<input type="text" class="form-control edit-version" name="appModuleVersion" maxlength="30" />
+	</div>
+	<div class="form-group">
+		<label class="control-label">Description</label>
+		<textarea class="form-control edit-desc" name="appModuleDescription" maxlength="255"></textarea>
+	</div>
+		
+</div>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/partials/queue-block.blade.php
----------------------------------------------------------------------
diff --git a/app/views/partials/queue-block.blade.php b/app/views/partials/queue-block.blade.php
new file mode 100644
index 0000000..0238b42
--- /dev/null
+++ b/app/views/partials/queue-block.blade.php
@@ -0,0 +1,24 @@
+<div class="form-group">
+	<label class="control-label">Queue Description</label>
+	<textarea class="form-control" maxlength="255" name="qdesc" placeholder="Queue Description">@if( isset( $queueData) ){{ $queueData->queueDescription }}@endif</textarea>
+</div>
+<div class="form-group">
+	<label class="control-label">Queue Max Run Time<small> (In Minutes) </small></label>
+	<input type="number" min="0" class="form-control" value="@if( isset( $queueData) ){{ $queueData->maxRunTime }}@endif" maxlength="30" name="qmaxruntime" placeholder="Queue Max Run Time"/>
+</div>
+<div class="form-group">
+	<label class="control-label">Queue Max Nodes</label>
+	<input type="number" min="0" class="form-control" value="@if( isset( $queueData) ){{ $queueData->maxNodes }}@endif" maxlength="30" name="qmaxnodes" placeholder="Queue Max Nodes"/>
+</div>
+<div class="form-group">
+	<label class="control-label">Queue Max Processors</label>
+	<input type="number" min="0" class="form-control" value="@if( isset( $queueData) ){{ $queueData->maxProcessors }}@endif" maxlength="30" name="qmaxprocessors" placeholder="Queue Max Processors"/>
+</div>
+<div class="form-group">
+	<label class="control-label">Max Jobs in Queue</label>
+	<input type="number" min="0" class="form-control" value="@if( isset( $queueData) ){{ $queueData->maxJobsInQueue }}@endif" maxlength="30" name="qmaxjobsinqueue" placeholder="Max Jobs In Queue"/>
+</div>
+<div class="form-group">
+	<label class="control-label">Max Memory For Queue( In MB )</label>
+	<input type="number" min="0" class="form-control" value="@if( isset( $queueData) ){{ $queueData->maxMemory }}@endif" maxlength="30" name="qmaxmemoryinqueue" placeholder="Max Memory For Queue"/>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/project/create.blade.php
----------------------------------------------------------------------
diff --git a/app/views/project/create.blade.php b/app/views/project/create.blade.php
new file mode 100755
index 0000000..0cc28d3
--- /dev/null
+++ b/app/views/project/create.blade.php
@@ -0,0 +1,42 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+
+<div class="container" style="max-width: 750px">
+    
+<h1>Create a new project</h1>
+
+
+<form action="create" method="post" role="form" class="project-creation-form">
+    <div class="form-group required">
+        <label for="project-name" class="control-label">Project Name</label>
+        <input type="text" class="form-control projectName" name="project-name" id="project-name" placeholder="Enter project name" autofocus required>
+    </div>
+
+    <div class="form-group">
+        <label for="project-description">Project Description</label>
+        <textarea class="form-control" name="project-description" id="project-description" placeholder="Optional: Enter a short description of the project"></textarea>
+    </div>
+
+    <input name="save" type="submit" class="btn btn-primary create-project" value="Save">
+    <input name="clear" type="reset" class="btn btn-default" value="Clear">
+
+
+</form>
+
+</div>
+
+@stop
+
+@section('scripts')
+    @parent
+    <script>
+        $(".projectName").blur( function(){
+            $(this).val( $.trim( $(this).val() ) );
+        });
+    </script>
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/project/edit.blade.php
----------------------------------------------------------------------
diff --git a/app/views/project/edit.blade.php b/app/views/project/edit.blade.php
new file mode 100755
index 0000000..e2c40b1
--- /dev/null
+++ b/app/views/project/edit.blade.php
@@ -0,0 +1,50 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+
+<div class="container" style="max-width: 750px;">
+
+	<?php if( Session::has("project_edited")) { ?>
+		<div class="alert alert-success">
+			The project has been edited
+		</div>
+		<?php Session::forget("project_edited"); 
+
+		}
+	?>
+
+
+    <h1>Edit Project</h1>
+
+    <form action="edit" method="post" role="form">
+        <div class="form-group">
+            <label for="project-name">Project Name</label>
+            <input type="text"
+                   class="form-control"
+                   name="project-name"
+                   id="project-name"
+                   value="{{ $project->name }}">
+        </div>
+        <div class="form-group">
+            <label for="project-description">Project Description</label>
+            <textarea class="form-control"
+                      name="project-description"
+                      id="project-description">{{ $project->description }}</textarea>
+            <input type="hidden" name="projectId" value="{{ Input::get('projId') }}"/>
+        </div>
+
+        <div class="btn-toolbar">
+            <input name="save" type="submit" class="btn" value="Save">
+        </div>
+
+
+    </form>
+
+
+</div>
+
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/project/search.blade.php
----------------------------------------------------------------------
diff --git a/app/views/project/search.blade.php b/app/views/project/search.blade.php
new file mode 100755
index 0000000..486fd9d
--- /dev/null
+++ b/app/views/project/search.blade.php
@@ -0,0 +1,103 @@
+
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+
+    <div class="container" style="max-width: 750px;">
+
+        <h1>Search for Projects</h1>
+
+        <form action="{{ URL::to('/') }}/project/search" method="post" class="form-inline" role="form">
+            <div class="form-group">
+                <label for="search-key">Search by</label>
+                <select class="form-control" name="search-key" id="search-key">
+                    <option value="project-name">Project Name</option>
+                    <option value="project-description">Project description</option>
+                </select>
+            </div>
+
+            <div class="form-group">
+                <label for="search-value">for</label>
+                <input type="search" class="form-control" name="search-value" id="search-value" placeholder="value" required
+                       value="<?php if (isset($_POST['search-value'])) echo $_POST['search-value'] ?>">
+            </div>
+
+            <button name="search" type="submit" class="btn btn-primary" value="Search"><span class="glyphicon glyphicon-search"></span> Search</button>
+                <p class="help-block">You can use * as a wildcard character. Tip: search for * alone to retrieve all of your projects.</p>
+        </form>
+
+
+
+
+
+        <?php
+
+        if (isset( $projects))
+        {
+            /**
+             * get results
+             */
+
+            /**
+             * display results
+             */
+            if (sizeof($projects) == 0)
+            {
+                Utilities::print_warning_message('No results found. Please try again.');
+            }
+            else
+            {
+            ?>
+                <div class="table-responsive">
+                    <table class="table">
+
+                        <tr>
+
+                            <th>Name</th>
+                            <th>Creation Time</th>
+                            <th>Experiments</th>
+
+                        </tr>
+            <?php
+
+                foreach ($projects as $project)
+                {
+
+            ?>
+                    <tr>
+                        <td>
+                            <?php echo $project->name; ?>
+                            <a href="{{URL::to('/')}}/project/edit?projId=<?php echo $project->projectID; ?>" title="Edit">
+                                <span class="glyphicon glyphicon-pencil"></span>
+                            </a>
+                        </td>
+                        <td>
+                            <?php echo date('Y-m-d H:i:s', $project->creationTime/1000); ?>
+                        </td>
+                        <td>
+                            <a href="{{URL::to('/')}}/project/summary?projId=<?php echo $project->projectID; ?>">
+                                <span class="glyphicon glyphicon-list"></span>
+                            </a>
+                            <a href="{{URL::to('/')}}/project/summary?projId=<?php echo $project->projectID; ?>"> View</a>
+                        </td>
+                    </tr>
+            <?php
+
+                }
+
+                echo '</table>';
+                echo '</div>';
+            }
+
+        }
+        
+        ?>
+
+
+    </div>
+
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/project/summary.blade.php
----------------------------------------------------------------------
diff --git a/app/views/project/summary.blade.php b/app/views/project/summary.blade.php
new file mode 100755
index 0000000..9cb1582
--- /dev/null
+++ b/app/views/project/summary.blade.php
@@ -0,0 +1,121 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+
+<div class="container" style="max-width: 750px;">
+
+
+    <h1>Project Summary</h1>
+
+
+
+    <?php
+
+    $project = Utilities::get_project($_GET['projId']);
+
+
+
+    echo '<div class="panel panel-default">';
+
+    echo '<div class="panel-heading">';
+    echo '<h3>' . $project->name . ' <a href="edit?projId=' .
+                        $project->projectID .
+                        '" title="Edit"><span class="glyphicon glyphicon-pencil"></span></a></h3>';
+    echo "<p>$project->description</p>";
+    echo '</div>';
+
+    $experiments = Utilities::get_experiments_in_project($project->projectID);
+
+    echo '<div class="table-responsive">';
+    echo '<table class="table">';
+
+    echo '<tr>';
+
+    echo '<th>Name</th>';
+    echo '<th>Application</th>';
+    echo '<th>Time</th>';
+    echo '<th>Status</th>';
+
+    echo '</tr>';
+
+    foreach ($experiments as $experiment)
+    {
+    	$expValues = Utilities::get_experiment_values( $experiment, Utilities::get_project($experiment->projectID), true );
+        $applicationInterface = Utilities::get_application_interface($experiment->applicationId);
+
+        echo '<tr>';
+
+        echo '<td>';
+
+
+        switch ($expValues["experimentStatusString"])
+        {
+            case 'SCHEDULED':
+            case 'LAUNCHED':
+            case 'EXECUTING':
+            case 'CANCELING':
+            case 'COMPLETED':
+                echo $experiment->name;
+                break;
+            default:
+                echo $experiment->name .
+                    ' <a href="edit?expId=' .
+                    $experiment->experimentID .
+                    '" title="Edit"><span class="glyphicon glyphicon-pencil"></span></a>';
+                break;
+        }
+
+
+
+        echo '</td>';
+
+        echo "<td>$applicationInterface->applicationName</td>";
+
+
+
+        echo '<td>' . $expValues["experimentTimeOfStateChange"] . '</td>';
+
+
+        switch ($expValues["experimentStatusString"])
+        {
+            case 'CANCELING':
+            case 'CANCELED':
+            case 'UNKNOWN':
+                $textClass = 'text-warning';
+                break;
+            case 'FAILED':
+                $textClass = 'text-danger';
+                break;
+            case 'COMPLETED':
+                $textClass = 'text-success';
+                break;
+            default:
+                $textClass = 'text-info';
+                break;
+        }
+
+
+        echo '<td><a class="' .
+            $textClass .
+            '" href="' . URL::to('/') . '/experiment/summary?expId=' .
+            $experiment->experimentID .
+            '">' .
+            $expValues["experimentStatusString"] .
+            '</a></td>';
+
+        echo '</tr>';
+    }
+
+    echo '</table>';
+    echo '</div>';
+    echo '</div>';
+
+    ?>
+
+
+</div>
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/resource/browse.blade.php
----------------------------------------------------------------------
diff --git a/app/views/resource/browse.blade.php b/app/views/resource/browse.blade.php
new file mode 100644
index 0000000..1cca0ad
--- /dev/null
+++ b/app/views/resource/browse.blade.php
@@ -0,0 +1,132 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+
+<div class="container">
+	@if( Session::has("message"))
+		<div class="col-md-12">
+			<span class="alert alert-success">{{ Session::get("message") }}</span>
+		</div>
+		{{ Session::forget("message") }}
+	@endif  
+
+	@if ( isset( $allCRs) )
+        @if (sizeof($allCRs) == 0)
+            {{ Utilities::print_warning_message('No Compute Resources exist at the moment. Please register compute resources and then try again.') }}
+        @else
+            <div class="col-md-12">
+                <div class="col-md-6">
+                    <h3 style="margin:0;">Existing Compute Resources :</h3>
+                </div>
+                <input type="text" class="pull-right filterinput col-md-6" placeholder="Search by Compure Resource Name"/>
+            <div class="table-responsive">
+                <table class="table">
+
+                    <tr>
+
+                        <th>Name</th>
+                        <th>Id</th>
+                        <th>Edit</th>
+                        <th>View</th>
+                        <th>Delete</th>
+                    </tr>
+
+            @foreach ($allCRs as $crId => $crName)
+
+	                <tr id="crDetails">
+	                    <td>{{ $crName }}</td>
+	                    <td>{{ $crId }}</td>
+	                    <td><a href="{{URL::to('/')}}/cr/edit?crId={{ $crId }}" title="Edit">
+	                            <span class="glyphicon glyphicon-pencil"></span>
+	                        </a>
+	                    </td>
+	                    <td>
+	                        <a  class="view-cr" href="#" > <!-- {{URL::to('/')}}/cr/summary?crId={{ $crId }}"> -->
+	                            <span class="glyphicon glyphicon-list"></span>
+	                        </a>
+	                    </td>
+	                    <td>
+	                    	<a href="#" title="Delete">
+	                    		<span class="glyphicon glyphicon-trash del-cr"  data-toggle="modal" data-target="#delete-cr-block"  data-delete-cr-name="{{$crName}}" data-deployment-count="{{$connectedDeployments[$crId]}}" data-crid="{{$crId}}" ></span>
+	                    	</a>
+	                    </td>
+	                </tr>
+	            @endforeach
+
+	           </table>
+			</div>
+
+        @endif
+    @endif
+
+<div class="modal fade" id="delete-cr-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+    <div class="modal-dialog">
+
+		<form action="{{URL::to('/')}}/cr/delete-cr" method="POST">
+	        <div class="modal-content">
+	            <div class="modal-header">
+	              	<h3 class="text-center">Delete Compute Resource Confirmation</h3>
+	            </div>
+	            <div class="modal-body">
+					<input type="hidden" class="form-control delete-crId" name="del-crId"/>
+					The Compute Resource, <span class="delete-cr-name"></span> is connected to <span class="deploymentCount">0</span> deployments.
+			 		Do you really want to delete it? This action cannot be undone.
+				</div>
+				<div class="modal-footer">
+					<div class="form-group">
+						<input type="submit" class="btn btn-danger" value="Delete"/>
+						<input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+					</div>
+				</div>
+			</div>
+
+		</form>
+	</div>
+</div>
+
+</div>
+
+@stop
+@section('scripts')
+	@parent
+	<script type="text/javascript">
+    $(".view-cr").click( function(){
+    	alert("The functionality to view a Compute Resource is under construction.");
+    });
+    $('.filterinput').keyup(function() {
+        var value = $(this).val();
+        if (value.length > 0) {
+            $("table tr").each(function(index) {
+                if (index != 0) {
+
+                    $row = $(this);
+
+                    var id = $row.find("td:first").text();
+                    id = $.trim( id);
+                    id = id.substr( 0, value.length);
+                    if (id == value )
+                    {
+                        $(this).slideDown();
+                    }
+                    else {
+                        $(this).slideUp();
+                    }
+                }
+            });
+        } else {
+            $("table tr").slideDown();
+        }
+        return false;
+    });
+
+    $(".del-cr").click( function(){
+    	$(".delete-cr-name").html( "'" + $(this).data("delete-cr-name") + "'");
+    	$(".delete-crId").val( $(this).data("crid"));
+    	$(".deploymentCount").html( $(this).data("deployment-count"));
+    });
+    </script>
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/resource/create-step3.blade.php
----------------------------------------------------------------------
diff --git a/app/views/resource/create-step3.blade.php b/app/views/resource/create-step3.blade.php
new file mode 100644
index 0000000..39f6bfe
--- /dev/null
+++ b/app/views/resource/create-step3.blade.php
@@ -0,0 +1,32 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+    {{ HTML::style('css/style.css') }}
+@stop
+
+@section('content')
+
+<div class="container">
+	<div class="col-md-offset-2 col-md-8">
+		<h3>Add Resource Data</h3>
+		<form role="form" method="POST" action="{{ URL::to('/') }}/cr/create">
+
+		
+		</form>
+	</div>
+</div>
+
+@stop
+
+@section('scripts')
+	@parent
+    {{ HTML::script('js/script.js') }}
+
+	<script>
+		$(document).ready( function(){
+
+			
+		});
+	</script>
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/resource/create.blade.php
----------------------------------------------------------------------
diff --git a/app/views/resource/create.blade.php b/app/views/resource/create.blade.php
new file mode 100644
index 0000000..df301c4
--- /dev/null
+++ b/app/views/resource/create.blade.php
@@ -0,0 +1,44 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+
+<div class="container">
+	<div class="col-md-offset-2 col-md-8">
+		<h3>Create a Resource</h3>
+		<form role="form" method="POST" action="{{ URL::to('/') }}/cr/create">
+			<div class="form-group required">
+				<label class="control-label">Host Name</label>
+				<input class="form-control hostName" maxlength="100" name="hostname" required="required"/>
+			</div>
+			<div class="form-group">
+				<label class="control-label">Host Aliases</label>
+				<input class="form-control" maxlength="30" name="hostaliases[]"/>
+				<button type="button" class="btn btn-sm btn-default add-alias">Add More Aliases</button>
+			</div>
+			<div class="form-group">
+				<label class="control-label">IP Addresses</label>
+				<input class="form-control" maxlength="30" name="ips[]"/>
+				<button type="button" class="btn btn-sm btn-default add-ip">Add More IP Addresses</button>
+			</div>
+			<div class="form-group">
+				<label class="control-label">Resource Description</label>
+				<textarea class="form-control" maxlength="255" name="description"></textarea>
+			</div>
+			<div class="form-group">
+				<input type="submit" class="btn btn-lg btn-primary" name="step1" value="Create"/>
+				<input type="reset" class="btn btn-lg btn-success" value="Reset"/>
+			</div>
+		</form>
+	</div>
+</div>
+
+@stop
+
+@section('scripts')
+	@parent
+    {{ HTML::script('js/script.js') }}
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/resource/edit.blade.php
----------------------------------------------------------------------
diff --git a/app/views/resource/edit.blade.php b/app/views/resource/edit.blade.php
new file mode 100644
index 0000000..5cd33cc
--- /dev/null
+++ b/app/views/resource/edit.blade.php
@@ -0,0 +1,730 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+    {{ HTML::style('css/style.css') }}
+@stop
+
+@section('content')
+
+<div class="container">
+	<div class="col-md-offset-2 col-md-8">
+
+		<input type="hidden" class="base-url" value="{{URL::to('/')}}"/>
+
+		<div class="well">
+			<h4>Compute Resource : {{ $computeResource->hostName }}</h4>
+		</div>
+		@if( Session::has("message"))
+			<span class="alert alert-success col-md-12">{{Session::get("message")}}</span>
+			{{Session::forget("message") }}
+		@endif
+
+		<div class="col-md-12">
+			<ul class="nav nav-tabs nav-justified" id="tabs" role="tablist">
+			  <li class="active"><a href="#tab-desc" data-toggle="tab">Description</a></li>
+			  <li><a href="#tab-queues" data-toggle="tab">Queues</a></a></li>
+			  <li><a href="#tab-filesystem" data-toggle="tab">FileSystem</a></li>
+			  <li><a href="#tab-jobSubmission" data-toggle="tab">Job Submission Interfaces</a></li>
+			  <li><a href="#tab-dataMovement" data-toggle="tab">Data Movement Interfaces</a></li>
+			</ul>
+		</div>
+
+		<div class="tab-content">
+        	
+        	<div class="tab-pane active" id="tab-desc">
+
+				<form role="form" method="POST" action="{{ URL::to('/') }}/cr/edit">
+					<input type="hidden" name="crId" value="{{Input::get('crId') }}"/>
+					<input type="hidden" name="cr-edit" value="resDesc"/>
+					<div class="form-group required">
+						<label class="control-label">Host Name</label>
+						<input class="form-control hostName" value="{{ $computeResource->hostName }}" maxlength="100" name="hostname" required="required"/>
+					</div>
+					<div class="form-group">
+						<label class="control-label">Host Aliases</label>
+						@if( count(  $computeResource->hostAliases) )
+							@foreach( $computeResource->hostAliases as $hostAlias )
+								<input class="form-control" value="{{$hostAlias}}" maxlength="30" name="hostaliases[]"/>
+							@endforeach
+						@else
+							<input class="form-control" value="" maxlength="30" name="hostaliases[]"/>
+						@endif
+						<button type="button" class="btn btn-sm btn-default add-alias">Add Aliases</button>
+					</div>
+					<div class="form-group">
+						<label class="control-label">IP Addresses</label>
+						@if( count( $computeResource->ipAddresses))
+							@foreach( $computeResource->ipAddresses as $ip )
+								<input class="form-control" value="{{ $ip }}" maxlength="30" name="ips[]"/>
+							@endforeach
+						@else
+							<input class="form-control" value="" maxlength="30" name="ips[]"/>
+						@endif
+						<button type="button" class="btn btn-sm btn-default add-ip">Add IP Addresses</button>
+					</div>
+					<div class="form-group">
+						<label class="control-label">Resource Description</label>
+						<textarea class="form-control" maxlength="255" name="description">{{ $computeResource->resourceDescription }}</textarea>
+					</div>
+					<div class="form-group">
+						<label class="control-label">Maximum Memory Per Node ( In MB )</label>
+						<input type="number" min="0" class="form-control" value="{{ $computeResource->maxMemoryPerNode }}" maxlength="30" name="maxMemoryPerNode"/>
+					</div>
+					<div class="form-group">
+						<input type="submit" class="btn btn-primary" name="step1" value="Save changes"/>
+					</div>
+
+				</form>
+
+			</div>
+
+        	<div class="tab-pane" id="tab-queues">
+
+        		@if( is_array( $computeResource->batchQueues) )
+					<h3>Existing Queues :</h3>
+					<div class="panel-group" id="accordion">
+					@foreach( $computeResource->batchQueues as $index => $queue)
+						<div class="panel panel-default">
+							<div class="panel-heading">
+								<h4 class="panel-title">
+									<a class="accordion-toggle collapsed existing-queue-name" data-toggle="collapse" data-parent="#accordion" href="#collapse-{{$index}}">{{ $queue->queueName }}</a>
+									<div class="pull-right col-md-1">
+										<span class="glyphicon glyphicon-trash delete-queue" style="cursor:pointer;" data-toggle="modal" data-target="#delete-queue" data-queue-name="{{ $queue->queueName }}"></span>
+									</div>
+								</h4>
+							</div>
+							<div id="collapse-{{$index}}" class="panel-collapse collapse">
+								<div class="panel-body">
+									<form role="form" method="POST" action="{{ URL::to('/')}}/cr/edit">
+										<input type="hidden" name="crId" value="{{Input::get('crId') }}"/>
+										<div class="queue">
+											<input type="hidden" name="cr-edit" value="queue"/>
+											<div class="form-group required">
+												<label class="control-label">Queue Name <small> ( cannot be changed.) </small></label>
+												<input class="form-control" value="{{ $queue->queueName }}" maxlength="30" name="qname" placeholder="Queue Name" readonly />
+											</div>
+											@include('partials/queue-block', array('queueData'=>$queue))
+						          			<div class="form-group">
+												<input type="submit" min="0" class="btn" name="step1" value="Update"/>
+											</div>
+						          		</div>
+						      		</form>
+						      	</div>
+						    </div>
+						</div>
+			  		@endforeach
+			  		</div>
+			  	@endif
+				<div class="queue-block hide">
+					<form role="form" method="POST" action="{{ URL::to('/')}}/cr/edit">
+						<input type="hidden" name="crId" value="{{Input::get('crId') }}"/>
+						<div class="queue">
+							<div class="queue">
+								<input type="hidden" name="cr-edit" value="queue"/>
+								<div class="form-group required">
+									<label class="control-label">Queue Name<small> ( A queue name is unique and cannot be changed later.)</small></label>
+									<input class="form-control create-queue-name" maxlength="30" name="qname" placeholder="Queue Name" required="required"/>
+								</div>
+								@include('partials/queue-block')
+								
+			          		</div>
+		          			<div class="form-group">
+								<input type="button" class="btn create-queue-form btn-primary" name="step1" value="Create"/>
+								<input type="reset" class="btn  btn-success" value="Reset"/>
+							</div>
+		          		</div>
+		      		</form>
+		      	</div>
+				<div class="form-group well add-queue-block">
+					<button type="button" class="btn btn-sm btn-default add-queue">Add a Queue</button>
+				</div>
+
+			</div>
+
+        	<div class="tab-pane" id="tab-filesystem">
+
+        		<form role="form" method="POST" action="{{URL::to('/')}}/cr/edit">
+					<input type="hidden" name="crId" value="{{Input::get('crId') }}"/>
+					<input type="hidden" name="cr-edit" value="fileSystems"/>
+					<div class="form-group">
+						<h3>FileSystem</h3>
+						@foreach( $fileSystems as $index => $fileSystem)
+							<label class="control-label">{{ $fileSystem }}</label>
+							<input class="form-control" name="fileSystems[{{ $index }}]" placeholder="{{ $fileSystem }}" value="@if( isset( $computeResource->fileSystems[ $index]) ){{ $computeResource->fileSystems[ $index] }} @endif"/>
+						@endforeach
+						</select>
+					</div>
+					<div class="form-group">
+						<button class="btn btn-prim">Update</button>
+					</div>
+				</form>
+
+			</div>
+
+        	<div class="tab-pane" id="tab-jobSubmission">
+
+        		<div class="form-group">
+					<div class="job-submission-info row hide"></div>
+					<button type="button" class="btn btn-sm btn-default add-job-submission">Add a new Job Submission Interface</button>
+					@if( count( $jobSubmissionInterfaces ) > 1)
+        				<button type="button" class="btn btn-sm btn-default update-priority" data-type="jsi" data-toggle="modal" data-target="#update-jsi-priority">Update Priority</button>
+        			@endif
+				</div>
+
+        		@if( count( $jobSubmissionInterfaces ) )
+        			<div class="job-edit-info">
+        			@foreach( $jobSubmissionInterfaces as $index => $JSI )
+
+        				<div class="job-protocol-block">
+							<form role="form" method="POST" action="{{ URL::to('/') }}/cr/edit">
+								<input type="hidden" name="crId" value="{{Input::get('crId') }}"/>
+								<input type="hidden" name="cr-edit" value="edit-jsp"/>
+								<input type="hidden" name="jsiId" value="{{ $JSI->jobSubmissionInterfaceId }}"/>
+								<?php $selectedJspIndex = $computeResource->jobSubmissionInterfaces[ $index]->jobSubmissionProtocol; ?>
+
+        						<h4>Job Submission Protocol : {{ $jobSubmissionProtocols[ $selectedJspIndex] }}
+									<button type='button' class='close delete-jsi' data-toggle="modal" data-target="#confirm-delete-jsi" data-jsi-id="{{ $JSI->jobSubmissionInterfaceId }}">
+										<span class="glyphicon glyphicon-trash delete-jsi" data-toggle="modal" data-target="#confirm-delete-jsi" data-jsi-id="{{ $JSI->jobSubmissionInterfaceId }}"></span>
+									</button>
+								</h4>
+								<input type="hidden" name="jobSubmissionProtocol" value="{{ $selectedJspIndex }}"/>
+								@if( $selectedJspIndex == $jobSubmissionProtocolsObject::LOCAL)
+									<div class="select-resource-manager-type">
+										<div class="form-group required">
+											<label class="control-label">Select resource manager type</label>
+											<select name="resourceJobManagerType" class="form-control selected-resource-manager" required="required">
+											@foreach( $resourceJobManagerTypes as $index => $rJmT)
+												<option value="{{ $index }}" @if( $JSI->resourceJobManager->resourceJobManagerType == $index ) selected @endif >{{ $rJmT }}</option>
+											@endforeach
+											</select>
+										</div>
+										<div class="form-group">
+											<label class="control-label">Push Monitoring End Point</label>
+											<input type="text" class="form-control" name="pushMonitoringEndpoint" value="{{ $JSI->resourceJobManager->pushMonitoringEndpoint }}"/>
+										</div>
+										<div class="form-group">
+											<label class="control-label">Job Manager Bin Path</label>
+											<input type="text" class="form-control" name="jobManagerBinPath" value="{{ $JSI->resourceJobManager->jobManagerBinPath }}"/>
+										</div>
+										<div class="form-group">
+											<h3>Job Manager Commands</h3>
+											@foreach( $jobManagerCommands as $index => $jmc)
+												<label class="control-label">{{ $jmc }}</label>
+												<input class="form-control" name="jobManagerCommands[{{ $index }}]" placeholder="{{ $jmc }}" value="@if( isset( $JSI->resourceJobManager->jobManagerCommands[$index] ) ) {{ $JSI->resourceJobManager->jobManagerCommands[$index] }} @endif"/>
+											@endforeach
+											</select>
+										</div>
+									</div>
+								@elseif( $selectedJspIndex == $jobSubmissionProtocolsObject::SSH)
+									<div class="form-group required">		
+										<label class="control-label">Select Security Protocol</label>
+										<select name="securityProtocol" required="required">
+										@foreach( $securityProtocols as $index => $sp)
+											<option value="{{ $index }}" @if( $JSI->securityProtocol == $index ) selected @endif>{{ $sp }}</option>
+										@endforeach
+										</select>
+									</div>
+
+									<div class="form-group">
+										<label class="control-label">Alternate SSH Host Name</label>
+						                <input class='form-control' name='alternativeSSHHostName' value="{{ $JSI->alternativeSSHHostName}}"/>
+						            </div>
+						            <div class="form-group">
+										<label class="control-label">SSH Port</label>
+						                <input class='form-control' name='sshPort' value="{{ $JSI->sshPort }}"/>
+						            </div>
+
+						            <div class="form-group required">
+										<label class="control-label">Select Monitoring Mode</label>
+						            	<select name="monitorMode" required>
+						            		@foreach( $monitorModes as $index => $mode)
+						            			<option value="{{ $index }}" @if( $JSI->monitorMode == $index ) selected @endif>{{ $mode}}</option>
+						            		@endforeach
+						            	</select>
+						            </div>
+
+									<div class="form-group">
+										<div class="select-resource-manager-type">
+											<div class="form-group required">
+												<label class="control-label">Select resource manager type</label>
+												<select name="resourceJobManagerType" class="form-control selected-resource-manager" required="required">
+												@foreach( $resourceJobManagerTypes as $index => $rJmT)
+													<option value="{{ $index }}" @if( $JSI->resourceJobManager->resourceJobManagerType == $index ) selected @endif >{{ $rJmT }}</option>
+												@endforeach
+												</select>
+											</div>
+											<div class="form-group">
+												<label class="control-label">Push Monitoring End Point</label>
+												<input type="text" class="form-control" name="pushMonitoringEndpoint" value="{{ $JSI->resourceJobManager->pushMonitoringEndpoint }}"/>
+											</div>
+											<div class="form-group">
+												<label class="control-label">Job Manager Bin Path</label>
+												<input type="text" class="form-control" name="jobManagerBinPath" value="{{ $JSI->resourceJobManager->jobManagerBinPath }}"/>
+											</div>
+											<div class="form-group">
+												<h3>Job Manager Commands</h3>
+												@foreach( $jobManagerCommands as $index => $jmc)
+													<label class="control-label">{{ $jmc }}</label>
+													<input class="form-control" name="jobManagerCommands[{{ $index }}]" placeholder="{{ $jmc }}" value="@if( isset( $JSI->resourceJobManager->jobManagerCommands[$index] ) ) {{ $JSI->resourceJobManager->jobManagerCommands[$index] }} @endif"/>
+												@endforeach
+											</div>
+										</div>
+									</div>
+						            
+								@elseif(  $selectedJspIndex == $jobSubmissionProtocolsObject::UNICORE)
+									<div class="form-group required">		
+										<label class="control-label">Select Security Protocol</label>
+										<select name="securityProtocol" required="required">
+										@foreach( $securityProtocols as $index => $sp)
+											<option value="{{ $index }}" @if( $JSI->securityProtocol == $index ) selected @endif>{{ $sp }}</option>
+										@endforeach
+										</select>
+									</div>
+									<div class="form-group">
+										<label class="form-label">Unicore End Point URL</label>
+										<input class='form-control' name='unicoreEndPointURL' value="{{ $JSI->unicoreEndPointURL }}"/>
+									</div>
+								@endif
+								<div class="form-group">
+									<button type="submit" class="btn">Update</button>
+								</div>
+							</form>
+
+						</div>
+        			@endforeach
+        			</div>
+        		@endif
+
+				<div class="select-job-protocol hide">
+					<form role="form" method="POST" action="{{ URL::to('/') }}/cr/edit">
+						<input type="hidden" name="crId" value="{{Input::get('crId') }}"/>
+						<input type="hidden" name="cr-edit" value="jsp"/>
+						
+						<div class="form-group">
+							<label class="control-label">Job Submission Protocol:</label>
+							<select name="jobSubmissionProtocol" class="form-control selected-job-protocol" required="required">
+								<option></option>
+							@foreach( $jobSubmissionProtocols as $index => $jobSubmissionProtocol)
+								@if( ! in_array( $index, $addedJSP))
+									<option value="{{ $index }}">{{ $jobSubmissionProtocol }}</option>
+								@endif
+							@endforeach
+							</select>
+						</div>
+
+						<div class="form-group">
+							<button type="submit" class="btn btn-primary jspSubmit hide">Add Job Submission Protocol</button>
+						</div>
+					</form>
+				</div>
+
+        	</div>
+
+        	<div class="tab-pane" id="tab-dataMovement">
+
+				<div class="form-group">
+					<div class="data-movement-info row hide"></div>
+					<button type="button" class="btn btn-sm btn-default add-data-movement">Add a new Data Movement Interface</button>
+        			@if( count( $dataMovementInterfaces ) > 1)
+						<button type="button" class="btn btn-sm btn-default update-priority" data-type="dmi"  data-toggle="modal" data-target="#update-dmi-priority">Update Priority</button>
+					@endif				
+				</div>
+
+        		@if( count( $dataMovementInterfaces ) )
+        			<div class="job-edit-info">
+        			@foreach( $dataMovementInterfaces as $index => $DMI )
+        				<div class="data-movement-block">
+							<form role="form" method="POST" action="{{ URL::to('/') }}/cr/edit">
+								<input type="hidden" name="crId" class="crId" value="{{Input::get('crId') }}"/>
+								<input type="hidden" name="cr-edit" value="edit-dmi"/>
+								<input type="hidden" name="dmiId" value="{{ $DMI->dataMovementInterfaceId }}"/>
+
+								<?php $selectedDMIIndex = $computeResource->dataMovementInterfaces[ $index]->dataMovementProtocol; ?>
+
+        						<h4>Data Movement Protocol : {{ $dataMovementProtocols[ $selectedDMIIndex] }}
+									<button type='button' class='close delete-dmi' data-toggle="modal" data-target="#confirm-delete-dmi" data-dmi-id="{{ $DMI->dataMovementInterfaceId }}">
+										<span class="glyphicon glyphicon-trash delete-dmi" data-toggle="modal" data-target="#confirm-delete-dmi" data-dmi-id="{{ $DMI->dataMovementInterfaceId }}"></span>
+									</button>
+								</h4>
+								<input type="hidden" name="dataMovementProtocol" value="{{ $selectedDMIIndex }}"/>
+								@if( $selectedDMIIndex == $dataMovementProtocolsObject::LOCAL)
+									<!-- Nothing here on local UI -->
+								@elseif( $selectedDMIIndex == $dataMovementProtocolsObject::SCP)
+									<div class="form-group">		
+										<label class="control-label">Select Security Protocol</label>
+										<select name="securityProtocol">
+										@foreach( $securityProtocols as $index => $sp)
+											<option value="{{ $index }}" @if( $DMI->securityProtocol == $index ) selected @endif>{{ $sp }}</option>
+										@endforeach
+										</select>
+									</div>
+
+									<div class="form-group">
+										<label class="control-label">Alternate SSH Host Name</label>
+						                <input class='form-control' name='alternativeSSHHostName' value="{{ $DMI->alternativeSCPHostName }}"/>
+						            </div>
+						            <div class="form-group">
+										<label class="control-label">SSH Port</label>
+						                <input class='form-control' name='sshPort' value="{{ $DMI->sshPort }}"/>
+						            </div>
+						            <div class="form-group">
+						            	<button type="submit" class="btn">Update</button>
+						            </div>
+								@elseif( $selectedDMIIndex == $dataMovementProtocolsObject::GridFTP)
+									<div class="form-group">		
+										<label class="control-label">Select Security Protocol</label>
+										<select name="securityProtocol">
+										@foreach( $securityProtocols as $index => $sp)
+											<option value="{{ $index }}" @if( $DMI->securityProtocol == $index ) selected @endif>{{ $sp }}</option>
+										@endforeach
+										</select>
+										<div>
+											<div class="form-group required">
+												<label class="control-label">Grid FTP End Points</label>
+												@foreach( $DMI->gridFTPEndPoints as $endPoint)
+													<input class="form-control" maxlength="30" name="gridFTPEndPoints[]" required="required" value="{{$endPoint}}"/>
+												@endforeach
+												<button type="button" class="btn btn-sm btn-default add-gridFTPEndPoint">Add More Grid FTP End Points</button>
+											</div>
+										</div>
+										<div class="form-group">
+							            	<button type="submit" class="btn">Update</button>
+							            </div>
+									</div>
+								@elseif( $selectedDMIIndex == $dataMovementProtocolsObject::UNICORE_STORAGE_SERVICE)
+									<div class="form-group">		
+										<label class="control-label">Select Security Protocol</label>
+										<select name="securityProtocol">
+										@foreach( $securityProtocols as $index => $sp)
+											<option value="{{ $index }}" @if( $DMI->securityProtocol == $index ) selected @endif>{{ $sp }}</option>
+										@endforeach
+										</select>
+										<div>
+											<div class="form-group required">
+												<label class="control-label">Unicore End Point URL</label>
+												<input class="form-control" maxlength="30" name="unicoreEndPointURL" required="required" value="{{ $DMI->unicoreEndPointURL }}"/>
+											</div>
+										</div>
+										<div class="form-group">
+							            	<button type="submit" class="btn">Update</button>
+							            </div>
+									</div>
+								@endif
+							</form>
+						</div>
+					@endforeach
+					</div>
+				@endif
+        		<div class="select-data-movement hide">
+
+					<form role="form" method="POST" action="{{ URL::to('/') }}/cr/edit">
+						<input type="hidden" name="crId" class="crId" value="{{Input::get('crId') }}"/>
+						<input type="hidden" name="cr-edit" value="dmp"/>
+						<h4>
+							Select the Data Movement Protocol
+						</h4>
+
+						<select name="dataMovementProtocol" class="form-control selected-data-movement-protocol">
+							<option></option>
+						@foreach( $dataMovementProtocols as $index => $dmp)
+							@if( ! in_array( $index, $addedDMI))
+								<option value="{{ $index }}">{{ $dmp }}</option>
+							@endif
+						@endforeach
+						</select>
+
+						<div class="form-group">
+							<button type="submit" class="btn btn-primary dmpSubmit hide">Add Data Movement Protocol</button>
+						</div>
+
+					</form>
+
+				</div>
+
+        	</div>
+
+
+		</div>
+
+
+		<div class="resource-manager-block hide">
+			<div class="select-resource-manager-type">
+				<div class="form-group required">
+					<label class="control-label">Select resource manager type</label>
+					<select name="resourceJobManagerType" class="form-control selected-resource-manager" required="required">
+					@foreach( $resourceJobManagerTypes as $index => $rJmT)
+						<option value="{{ $index }}">{{ $rJmT }}</option>
+					@endforeach
+					</select>
+				</div>
+			</div>
+			<div class="form-group">
+				<label class="control-label">Push Monitoring End Point</label>
+				<input type="text" class="form-control" name="pushMonitoringEndpoint"/>
+			</div>
+			<div class="form-group">
+				<label class="control-label">Job Manager Bin Path</label>
+				<input type="text" class="form-control" name="jobManagerBinPath"/>
+			</div>
+			<div class="form-group">
+				<h3>Job Manager Commands</h3>
+				@foreach( $jobManagerCommands as $index => $jmc)
+					<label class="control-label">{{ $jmc }}</label>
+					<input class="form-control" name="jobManagerCommands[{{ $index }}]" placeholder="{{ $jmc }}"/>
+				@endforeach
+				</select>
+			</div>
+		</div>
+
+		<div class="ssh-block hide">
+			<div class="form-group required">		
+				<label class="control-label">Select Security Protocol  </label>
+				<select name="securityProtocol" required>
+				@foreach( $securityProtocols as $index => $sp)
+					<option value="{{ $index }}">{{ $sp }}</option>
+				@endforeach
+				</select>
+			</div>
+
+	        <div class="form-group required">
+				<label class="control-label">Select Monitoring Mode  </label>
+	        	<select name="monitorMode" required>
+	        		@foreach( $monitorModes as $index => $mode)
+	        		<option value="{{ $index }}">{{ $mode}}</option>
+	        		@endforeach
+	        	</select>
+	        </div>
+
+			<div class="form-group addedScpValue hide">
+				<label class="control-label">Alternate SSH Host Name</label>
+                <input class='form-control' name='alternativeSSHHostName'/>
+            </div>
+            <div class="form-group addedScpValue hide">
+				<label class="control-label">SSH Port</label>
+                <input class='form-control' name='sshPort'/>
+            </div>
+		</div>
+
+		<div class="cloud-block hide">
+			<div class="form-group">
+				<label class="control-label">Node Id</label>
+				<input class="form-control" name="nodeId" placeholder="nodId"/>
+			</div>
+			<div class="form-group">
+				<label class="control-label">Node Id</label>
+				<input class="form-control" name="nodeId" placeholder="nodId"/>
+			</div>
+			<div class="form-group">
+				<label class="control-label">Executable Type</label>
+				<input class="form-control" name="nodeId" placeholder="executableType"/>
+			</div>
+			<div class="form-group">
+			<label class="control-label">Select Provider Name</label>
+			<select class="form-control">
+				<option name="EC2">EC2</option>
+				<option name="AWSEC2">AWEC2</option>
+				<option name="RACKSPACE">RACKSPACE</option>
+			</select>
+			</div>
+		</div>
+
+		<div class="dm-gridftp hide">
+			<div class="form-group required">
+				<label class="control-label">Grid FTP End Points</label>
+				<input class="form-control" maxlength="30" name="gridFTPEndPoints[]" required/>
+				<button type="button" class="btn btn-sm btn-default add-gridFTPEndPoint">Add More Grid FTP End Points</button>
+			</div>
+		</div>
+
+		<!-- 
+		<div class="form-group">
+			<input type="submit" class="btn  btn-primary" name="step2" value="Continue"/>
+			<input type="reset" class="btn  btn-success" value="Reset"/>
+		</div>
+
+		--> 
+	</div>
+</div>
+
+<!-- modals -->
+
+<div class="modal fade" id="confirm-delete-jsi" tabindex="-1" role="dialog" aria-labelledby="delete-modal" aria-hidden="true">
+    <div class="modal-dialog">
+        <div class="modal-content">
+        <form action="{{ URL::to('cr/delete-jsi') }}" method="POST">
+			<input type="hidden" name="crId" value="{{Input::get('crId') }}"/>
+    		<input type="hidden" name="jsiId" value="" class="delete-jsi-confirm"/>
+            <div class="modal-header">
+                Confirmation
+            </div>
+            <div class="modal-body">
+                Do you really want to delete this Job Submission Interface ?
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+                <button type="submit" class="btn btn-danger danger">Delete</button>
+            </div>
+        </form>
+
+        </div>
+    </div>
+</div>
+
+<div class="modal fade" id="confirm-delete-dmi" tabindex="-1" role="dialog" aria-labelledby="delete-modal" aria-hidden="true">
+    <div class="modal-dialog">
+        <div class="modal-content">
+        <form action="{{ URL::to('cr/delete-jsi') }}" method="POST">
+			<input type="hidden" name="crId" value="{{Input::get('crId') }}"/>
+    		<input type="hidden" name="dmiId" value="" class="delete-dmi-confirm"/>
+            <div class="modal-header">
+                Confirmation
+            </div>
+            <div class="modal-body">
+                Do you really want to delete this Data Movement Interface ?
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+                <button type="submit" class="btn btn-danger danger">Delete</button>
+            </div>
+        </div>
+    </div>
+</div>
+
+
+<div class="modal fade" id="add-jsi" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+    <div class="modal-dialog">
+        <div class="modal-content">
+            <div class="modal-header">
+                Add a Job Submission Interface
+            </div>
+            <div class="modal-body add-jsi-body row">
+               
+            </div>
+        </div>
+    </div>
+</div>
+
+@if( count( $jobSubmissionInterfaces ) > 1)
+<div class="modal fade" id="update-jsi-priority" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+    <div class="modal-dialog">
+        <div class="modal-content">
+            <div class="modal-header">
+               Update the Priority Order
+            </div>
+            <div class="modal-body">
+            	<!-- dirty hack to avoid some code that removes the form tag below this. Needs better fix. -->
+            	<form></form>
+
+            	<form action="{{URL::to('/')}}/cr/edit" method="POST" id="jsi-priority-form"> 
+					<input type="hidden" name="crId" value="{{Input::get('crId') }}"/>
+	            	<input type="hidden" name="cr-edit" value="jsi-priority"/>
+	        		@foreach( $computeResource->jobSubmissionInterfaces as $index => $JSI )
+	            	<div class="row">
+	    				<div class="col-md-offset-2 col-md-2">
+	        				<label>
+	        					{{ $jobSubmissionProtocols[ $JSI->jobSubmissionProtocol] }}
+	        				</label>
+	        			</div>
+	    				<input type="hidden" name="jsi-id[]" maxlength="2" value="{{ $JSI->jobSubmissionInterfaceId }}"/>
+	    				<div class="col-md-4">
+	        				<input type="number" name="jsi-priority[]" min="0" max="{{ count( $jobSubmissionInterfaces) }}" value="{{ $JSI->priorityOrder }}" required/>
+						</div>
+	        		</div>
+	        		@endforeach
+	        		<button type="submit" class="btn btn-update">Update</button>
+	        		<div class='priority-updated alert alert-success hide'>
+	        			The Job Submission Interface Priority has been updated.
+	        		</div>
+        		</form>
+            </div>
+        </div>
+    </div>
+</div>
+@endif
+
+<div class="modal fade" id="add-dmi" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+    <div class="modal-dialog">
+        <div class="modal-content">
+            <div class="modal-header">
+                Add a Data Model Interface
+            </div>
+            <div class="modal-body add-dmi-body row">
+               
+            </div>
+        </div>
+    </div>
+</div>
+
+@if( count( $dataMovementInterfaces ) > 1)
+<div class="modal fade" id="update-dmi-priority" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+    <div class="modal-dialog">
+        <div class="modal-content">
+            <div class="modal-header">
+               Update the Priority Order
+            </div>
+            <div class="modal-body">
+            	<form action="{{URL::to('/')}}/cr/edit" method="POST" id="dmi-priority-form"> 
+					<input type="hidden" name="crId" value="{{Input::get('crId') }}"/>
+	            	<input type="hidden" name="cr-edit" value="dmi-priority"/>
+	        		@foreach( $computeResource->dataMovementInterfaces as $index => $DMI )
+	            	<div class="row">
+	    				<div class="col-md-offset-2 col-md-2">
+	        				<label>
+	        					{{ $dataMovementProtocols[ $DMI->dataMovementProtocol] }}
+	        				</label>
+	        			</div>
+	    				<input type="hidden" name="dmi-id[]" maxlength="2" value="{{ $DMI->dataMovementInterfaceId }}"/>
+	    				<div class="col-md-4">
+	        				<input type="number" min="0" name="dmi-priority[]" value="{{ $DMI->priorityOrder }}" required/>
+						</div>
+	        		</div>
+	        		@endforeach
+	        		<button type="submit" class="btn btn-update">Update</button>
+	        		<div class='priority-updated alert alert-success hide'>
+	        			The Data Movement Interface Priority has been updated.
+	        		</div>
+        		</form>
+            </div>
+        </div>
+    </div>
+</div>
+@endif
+
+
+<div class="modal fade" id="delete-queue" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+    <div class="modal-dialog">
+        <div class="modal-content">
+   			<!-- dirty hack to neutralise form problem in code by just adding an empty form tag before the actual form. Needs fix.-->
+        	<form></form>
+        	<form action="{{URL::to('/')}}/cr/edit" method="POST"/> 	
+				<input type="hidden" name="crId" value="{{Input::get('crId') }}"/>    
+				<input type="hidden" name="cr-edit" value="delete-queue"/>
+				<input type="hidden" name="queueName" class="delete-queueName" value=""/>
+	            <div class="modal-header">
+	               Confirmation to Delete Queue
+	            </div>
+	            <div class="modal-body">
+						Do you really want to delete the Batch Queue - <span class="delete-queueName"></span>?
+	            </div>
+	            <div class="modal-footer">
+	            	<button type="submit" class="btn btn-danger">Delete</button>
+	            	<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+	            </div>
+	        </form>
+        </div>
+    </div>
+</div>
+@stop
+
+@section('scripts')
+	@parent
+    {{ HTML::script('js/script.js') }}
+
+    <script type="text/javascript">
+    	$(".delete-queue").click( function(){
+    		$(".delete-queueName").val( $(this).data("queue-name") );
+    		$(".delete-queueName").html( $(this).data("queue-name") );
+    	})
+    </script>
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/resource/view.blade.php
----------------------------------------------------------------------
diff --git a/app/views/resource/view.blade.php b/app/views/resource/view.blade.php
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/server-down.blade.php
----------------------------------------------------------------------
diff --git a/app/views/server-down.blade.php b/app/views/server-down.blade.php
new file mode 100644
index 0000000..6e901f7
--- /dev/null
+++ b/app/views/server-down.blade.php
@@ -0,0 +1,16 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+
+
+    <div class="container">
+    	<div class="alert alert-danger">
+    		<p class="text-center">Our servers are down at the moment. Please try after some time. Thank you for your patience.</p>
+    	</div>
+    </div>
+
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/artisan
----------------------------------------------------------------------
diff --git a/artisan b/artisan
new file mode 100755
index 0000000..5c408ad
--- /dev/null
+++ b/artisan
@@ -0,0 +1,74 @@
+#!/usr/bin/env php
+<?php
+
+/*
+|--------------------------------------------------------------------------
+| Register The Auto Loader
+|--------------------------------------------------------------------------
+|
+| Composer provides a convenient, automatically generated class loader
+| for our application. We just need to utilize it! We'll require it
+| into the script here so that we do not have to worry about the
+| loading of any our classes "manually". Feels great to relax.
+|
+*/
+
+require __DIR__.'/bootstrap/autoload.php';
+
+/*
+|--------------------------------------------------------------------------
+| Turn On The Lights
+|--------------------------------------------------------------------------
+|
+| We need to illuminate PHP development, so let's turn on the lights.
+| This bootstraps the framework and gets it ready for and then it
+| will load up this application so that we can run it and send
+| the responses back to the browser and delight these users.
+|
+*/
+
+$app = require_once __DIR__.'/bootstrap/start.php';
+
+/*
+|--------------------------------------------------------------------------
+| Load The Artisan Console Application
+|--------------------------------------------------------------------------
+|
+| We'll need to run the script to load and return the Artisan console
+| application. We keep this in its own script so that we will load
+| the console application independent of running commands which
+| will allow us to fire commands from Routes when we want to.
+|
+*/
+
+$app->setRequestForConsoleEnvironment();
+
+$artisan = Illuminate\Console\Application::start($app);
+
+/*
+|--------------------------------------------------------------------------
+| Run The Artisan Application
+|--------------------------------------------------------------------------
+|
+| When we run the console application, the current CLI command will be
+| executed in this console and the response sent back to a terminal
+| or another output device for the developers. Here goes nothing!
+|
+*/
+
+$status = $artisan->run();
+
+/*
+|--------------------------------------------------------------------------
+| Shutdown The Application
+|--------------------------------------------------------------------------
+|
+| Once Artisan has finished running. We will fire off the shutdown events
+| so that any final work may be done by the application before we shut
+| down the process. This is the last thing to happen to the request.
+|
+*/
+
+$app->shutdown();
+
+exit($status);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/bootstrap/autoload.php
----------------------------------------------------------------------
diff --git a/bootstrap/autoload.php b/bootstrap/autoload.php
new file mode 100755
index 0000000..6b32931
--- /dev/null
+++ b/bootstrap/autoload.php
@@ -0,0 +1,75 @@
+<?php
+
+define('LARAVEL_START', microtime(true));
+
+/*
+|--------------------------------------------------------------------------
+| Register The Composer Auto Loader
+|--------------------------------------------------------------------------
+|
+| Composer provides a convenient, automatically generated class loader
+| for our application. We just need to utilize it! We'll require it
+| into the script here so that we do not have to worry about the
+| loading of any our classes "manually". Feels great to relax.
+|
+*/
+
+require __DIR__.'/../vendor/autoload.php';
+
+/*
+|--------------------------------------------------------------------------
+| Include The Compiled Class File
+|--------------------------------------------------------------------------
+|
+| To dramatically increase your application's performance, you may use a
+| compiled class file which contains all of the classes commonly used
+| by a request. The Artisan "optimize" is used to create this file.
+|
+*/
+
+if (file_exists($compiled = __DIR__.'/compiled.php'))
+{
+	require $compiled;
+}
+
+/*
+|--------------------------------------------------------------------------
+| Setup Patchwork UTF-8 Handling
+|--------------------------------------------------------------------------
+|
+| The Patchwork library provides solid handling of UTF-8 strings as well
+| as provides replacements for all mb_* and iconv type functions that
+| are not available by default in PHP. We'll setup this stuff here.
+|
+*/
+
+Patchwork\Utf8\Bootup::initMbstring();
+
+/*
+|--------------------------------------------------------------------------
+| Register The Laravel Auto Loader
+|--------------------------------------------------------------------------
+|
+| We register an auto-loader "behind" the Composer loader that can load
+| model classes on the fly, even if the autoload files have not been
+| regenerated for the application. We'll add it to the stack here.
+|
+*/
+
+Illuminate\Support\ClassLoader::register();
+
+/*
+|--------------------------------------------------------------------------
+| Register The Workbench Loaders
+|--------------------------------------------------------------------------
+|
+| The Laravel workbench provides a convenient place to develop packages
+| when working locally. However we will need to load in the Composer
+| auto-load files for the packages so that these can be used here.
+|
+*/
+
+if (is_dir($workbench = __DIR__.'/../workbench'))
+{
+	Illuminate\Workbench\Starter::start($workbench);
+}


[44/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php
----------------------------------------------------------------------
diff --git a/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php b/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php
new file mode 100644
index 0000000..be0f776
--- /dev/null
+++ b/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php
@@ -0,0 +1,2312 @@
+<?php
+namespace Airavata\Model\AppCatalog\ComputeResource;
+
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+use Thrift\Base\TBase;
+use Thrift\Type\TType;
+use Thrift\Type\TMessageType;
+use Thrift\Exception\TException;
+use Thrift\Exception\TProtocolException;
+use Thrift\Protocol\TProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
+use Thrift\Exception\TApplicationException;
+
+
+final class ResourceJobManagerType {
+  const FORK = 0;
+  const PBS = 1;
+  const SLURM = 2;
+  const LSF = 3;
+  const UGE = 4;
+  static public $__names = array(
+    0 => 'FORK',
+    1 => 'PBS',
+    2 => 'SLURM',
+    3 => 'LSF',
+    4 => 'UGE',
+  );
+}
+
+final class JobManagerCommand {
+  const SUBMISSION = 0;
+  const JOB_MONITORING = 1;
+  const DELETION = 2;
+  const CHECK_JOB = 3;
+  const SHOW_QUEUE = 4;
+  const SHOW_RESERVATION = 5;
+  const SHOW_START = 6;
+  static public $__names = array(
+    0 => 'SUBMISSION',
+    1 => 'JOB_MONITORING',
+    2 => 'DELETION',
+    3 => 'CHECK_JOB',
+    4 => 'SHOW_QUEUE',
+    5 => 'SHOW_RESERVATION',
+    6 => 'SHOW_START',
+  );
+}
+
+final class FileSystems {
+  const HOME = 0;
+  const WORK = 1;
+  const LOCALTMP = 2;
+  const SCRATCH = 3;
+  const ARCHIVE = 4;
+  static public $__names = array(
+    0 => 'HOME',
+    1 => 'WORK',
+    2 => 'LOCALTMP',
+    3 => 'SCRATCH',
+    4 => 'ARCHIVE',
+  );
+}
+
+final class SecurityProtocol {
+  const USERNAME_PASSWORD = 0;
+  const SSH_KEYS = 1;
+  const GSI = 2;
+  const KERBEROS = 3;
+  const OAUTH = 4;
+  static public $__names = array(
+    0 => 'USERNAME_PASSWORD',
+    1 => 'SSH_KEYS',
+    2 => 'GSI',
+    3 => 'KERBEROS',
+    4 => 'OAUTH',
+  );
+}
+
+final class JobSubmissionProtocol {
+  const LOCAL = 0;
+  const SSH = 1;
+  const GLOBUS = 2;
+  const UNICORE = 3;
+  const CLOUD = 4;
+  static public $__names = array(
+    0 => 'LOCAL',
+    1 => 'SSH',
+    2 => 'GLOBUS',
+    3 => 'UNICORE',
+    4 => 'CLOUD',
+  );
+}
+
+final class MonitorMode {
+  const POLL_JOB_MANAGER = 0;
+  const JOB_EMAIL_NOTIFICATION_MONITOR = 1;
+  const XSEDE_AMQP_SUBSCRIBE = 2;
+  static public $__names = array(
+    0 => 'POLL_JOB_MANAGER',
+    1 => 'JOB_EMAIL_NOTIFICATION_MONITOR',
+    2 => 'XSEDE_AMQP_SUBSCRIBE',
+  );
+}
+
+final class DataMovementProtocol {
+  const LOCAL = 0;
+  const SCP = 1;
+  const SFTP = 2;
+  const GridFTP = 3;
+  const UNICORE_STORAGE_SERVICE = 4;
+  static public $__names = array(
+    0 => 'LOCAL',
+    1 => 'SCP',
+    2 => 'SFTP',
+    3 => 'GridFTP',
+    4 => 'UNICORE_STORAGE_SERVICE',
+  );
+}
+
+final class ProviderName {
+  const EC2 = 0;
+  const AWSEC2 = 1;
+  const RACKSPACE = 2;
+  static public $__names = array(
+    0 => 'EC2',
+    1 => 'AWSEC2',
+    2 => 'RACKSPACE',
+  );
+}
+
+class ResourceJobManager {
+  static $_TSPEC;
+
+  public $resourceJobManagerId = "DO_NOT_SET_AT_CLIENTS";
+  public $resourceJobManagerType = null;
+  public $pushMonitoringEndpoint = null;
+  public $jobManagerBinPath = null;
+  public $jobManagerCommands = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'resourceJobManagerId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'resourceJobManagerType',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'pushMonitoringEndpoint',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'jobManagerBinPath',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'jobManagerCommands',
+          'type' => TType::MAP,
+          'ktype' => TType::I32,
+          'vtype' => TType::STRING,
+          'key' => array(
+            'type' => TType::I32,
+          ),
+          'val' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['resourceJobManagerId'])) {
+        $this->resourceJobManagerId = $vals['resourceJobManagerId'];
+      }
+      if (isset($vals['resourceJobManagerType'])) {
+        $this->resourceJobManagerType = $vals['resourceJobManagerType'];
+      }
+      if (isset($vals['pushMonitoringEndpoint'])) {
+        $this->pushMonitoringEndpoint = $vals['pushMonitoringEndpoint'];
+      }
+      if (isset($vals['jobManagerBinPath'])) {
+        $this->jobManagerBinPath = $vals['jobManagerBinPath'];
+      }
+      if (isset($vals['jobManagerCommands'])) {
+        $this->jobManagerCommands = $vals['jobManagerCommands'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ResourceJobManager';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->resourceJobManagerId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->resourceJobManagerType);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->pushMonitoringEndpoint);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->jobManagerBinPath);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::MAP) {
+            $this->jobManagerCommands = array();
+            $_size0 = 0;
+            $_ktype1 = 0;
+            $_vtype2 = 0;
+            $xfer += $input->readMapBegin($_ktype1, $_vtype2, $_size0);
+            for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
+            {
+              $key5 = 0;
+              $val6 = '';
+              $xfer += $input->readI32($key5);
+              $xfer += $input->readString($val6);
+              $this->jobManagerCommands[$key5] = $val6;
+            }
+            $xfer += $input->readMapEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ResourceJobManager');
+    if ($this->resourceJobManagerId !== null) {
+      $xfer += $output->writeFieldBegin('resourceJobManagerId', TType::STRING, 1);
+      $xfer += $output->writeString($this->resourceJobManagerId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->resourceJobManagerType !== null) {
+      $xfer += $output->writeFieldBegin('resourceJobManagerType', TType::I32, 2);
+      $xfer += $output->writeI32($this->resourceJobManagerType);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->pushMonitoringEndpoint !== null) {
+      $xfer += $output->writeFieldBegin('pushMonitoringEndpoint', TType::STRING, 3);
+      $xfer += $output->writeString($this->pushMonitoringEndpoint);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->jobManagerBinPath !== null) {
+      $xfer += $output->writeFieldBegin('jobManagerBinPath', TType::STRING, 4);
+      $xfer += $output->writeString($this->jobManagerBinPath);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->jobManagerCommands !== null) {
+      if (!is_array($this->jobManagerCommands)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('jobManagerCommands', TType::MAP, 5);
+      {
+        $output->writeMapBegin(TType::I32, TType::STRING, count($this->jobManagerCommands));
+        {
+          foreach ($this->jobManagerCommands as $kiter7 => $viter8)
+          {
+            $xfer += $output->writeI32($kiter7);
+            $xfer += $output->writeString($viter8);
+          }
+        }
+        $output->writeMapEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class BatchQueue {
+  static $_TSPEC;
+
+  public $queueName = null;
+  public $queueDescription = null;
+  public $maxRunTime = null;
+  public $maxNodes = null;
+  public $maxProcessors = null;
+  public $maxJobsInQueue = null;
+  public $maxMemory = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'queueName',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'queueDescription',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'maxRunTime',
+          'type' => TType::I32,
+          ),
+        4 => array(
+          'var' => 'maxNodes',
+          'type' => TType::I32,
+          ),
+        5 => array(
+          'var' => 'maxProcessors',
+          'type' => TType::I32,
+          ),
+        6 => array(
+          'var' => 'maxJobsInQueue',
+          'type' => TType::I32,
+          ),
+        7 => array(
+          'var' => 'maxMemory',
+          'type' => TType::I32,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['queueName'])) {
+        $this->queueName = $vals['queueName'];
+      }
+      if (isset($vals['queueDescription'])) {
+        $this->queueDescription = $vals['queueDescription'];
+      }
+      if (isset($vals['maxRunTime'])) {
+        $this->maxRunTime = $vals['maxRunTime'];
+      }
+      if (isset($vals['maxNodes'])) {
+        $this->maxNodes = $vals['maxNodes'];
+      }
+      if (isset($vals['maxProcessors'])) {
+        $this->maxProcessors = $vals['maxProcessors'];
+      }
+      if (isset($vals['maxJobsInQueue'])) {
+        $this->maxJobsInQueue = $vals['maxJobsInQueue'];
+      }
+      if (isset($vals['maxMemory'])) {
+        $this->maxMemory = $vals['maxMemory'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'BatchQueue';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->queueName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->queueDescription);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->maxRunTime);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->maxNodes);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->maxProcessors);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->maxJobsInQueue);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->maxMemory);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('BatchQueue');
+    if ($this->queueName !== null) {
+      $xfer += $output->writeFieldBegin('queueName', TType::STRING, 1);
+      $xfer += $output->writeString($this->queueName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->queueDescription !== null) {
+      $xfer += $output->writeFieldBegin('queueDescription', TType::STRING, 2);
+      $xfer += $output->writeString($this->queueDescription);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->maxRunTime !== null) {
+      $xfer += $output->writeFieldBegin('maxRunTime', TType::I32, 3);
+      $xfer += $output->writeI32($this->maxRunTime);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->maxNodes !== null) {
+      $xfer += $output->writeFieldBegin('maxNodes', TType::I32, 4);
+      $xfer += $output->writeI32($this->maxNodes);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->maxProcessors !== null) {
+      $xfer += $output->writeFieldBegin('maxProcessors', TType::I32, 5);
+      $xfer += $output->writeI32($this->maxProcessors);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->maxJobsInQueue !== null) {
+      $xfer += $output->writeFieldBegin('maxJobsInQueue', TType::I32, 6);
+      $xfer += $output->writeI32($this->maxJobsInQueue);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->maxMemory !== null) {
+      $xfer += $output->writeFieldBegin('maxMemory', TType::I32, 7);
+      $xfer += $output->writeI32($this->maxMemory);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class SCPDataMovement {
+  static $_TSPEC;
+
+  public $dataMovementInterfaceId = "DO_NOT_SET_AT_CLIENTS";
+  public $securityProtocol = null;
+  public $alternativeSCPHostName = null;
+  public $sshPort = 22;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'dataMovementInterfaceId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'securityProtocol',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'alternativeSCPHostName',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'sshPort',
+          'type' => TType::I32,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['dataMovementInterfaceId'])) {
+        $this->dataMovementInterfaceId = $vals['dataMovementInterfaceId'];
+      }
+      if (isset($vals['securityProtocol'])) {
+        $this->securityProtocol = $vals['securityProtocol'];
+      }
+      if (isset($vals['alternativeSCPHostName'])) {
+        $this->alternativeSCPHostName = $vals['alternativeSCPHostName'];
+      }
+      if (isset($vals['sshPort'])) {
+        $this->sshPort = $vals['sshPort'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'SCPDataMovement';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->dataMovementInterfaceId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->securityProtocol);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->alternativeSCPHostName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->sshPort);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('SCPDataMovement');
+    if ($this->dataMovementInterfaceId !== null) {
+      $xfer += $output->writeFieldBegin('dataMovementInterfaceId', TType::STRING, 1);
+      $xfer += $output->writeString($this->dataMovementInterfaceId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->securityProtocol !== null) {
+      $xfer += $output->writeFieldBegin('securityProtocol', TType::I32, 2);
+      $xfer += $output->writeI32($this->securityProtocol);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->alternativeSCPHostName !== null) {
+      $xfer += $output->writeFieldBegin('alternativeSCPHostName', TType::STRING, 3);
+      $xfer += $output->writeString($this->alternativeSCPHostName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->sshPort !== null) {
+      $xfer += $output->writeFieldBegin('sshPort', TType::I32, 4);
+      $xfer += $output->writeI32($this->sshPort);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class GridFTPDataMovement {
+  static $_TSPEC;
+
+  public $dataMovementInterfaceId = "DO_NOT_SET_AT_CLIENTS";
+  public $securityProtocol = null;
+  public $gridFTPEndPoints = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'dataMovementInterfaceId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'securityProtocol',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'gridFTPEndPoints',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['dataMovementInterfaceId'])) {
+        $this->dataMovementInterfaceId = $vals['dataMovementInterfaceId'];
+      }
+      if (isset($vals['securityProtocol'])) {
+        $this->securityProtocol = $vals['securityProtocol'];
+      }
+      if (isset($vals['gridFTPEndPoints'])) {
+        $this->gridFTPEndPoints = $vals['gridFTPEndPoints'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'GridFTPDataMovement';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->dataMovementInterfaceId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->securityProtocol);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::LST) {
+            $this->gridFTPEndPoints = array();
+            $_size9 = 0;
+            $_etype12 = 0;
+            $xfer += $input->readListBegin($_etype12, $_size9);
+            for ($_i13 = 0; $_i13 < $_size9; ++$_i13)
+            {
+              $elem14 = null;
+              $xfer += $input->readString($elem14);
+              $this->gridFTPEndPoints []= $elem14;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('GridFTPDataMovement');
+    if ($this->dataMovementInterfaceId !== null) {
+      $xfer += $output->writeFieldBegin('dataMovementInterfaceId', TType::STRING, 1);
+      $xfer += $output->writeString($this->dataMovementInterfaceId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->securityProtocol !== null) {
+      $xfer += $output->writeFieldBegin('securityProtocol', TType::I32, 2);
+      $xfer += $output->writeI32($this->securityProtocol);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->gridFTPEndPoints !== null) {
+      if (!is_array($this->gridFTPEndPoints)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('gridFTPEndPoints', TType::LST, 3);
+      {
+        $output->writeListBegin(TType::STRING, count($this->gridFTPEndPoints));
+        {
+          foreach ($this->gridFTPEndPoints as $iter15)
+          {
+            $xfer += $output->writeString($iter15);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class UnicoreDataMovement {
+  static $_TSPEC;
+
+  public $dataMovementInterfaceId = "DO_NOT_SET_AT_CLIENTS";
+  public $securityProtocol = null;
+  public $unicoreEndPointURL = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'dataMovementInterfaceId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'securityProtocol',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'unicoreEndPointURL',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['dataMovementInterfaceId'])) {
+        $this->dataMovementInterfaceId = $vals['dataMovementInterfaceId'];
+      }
+      if (isset($vals['securityProtocol'])) {
+        $this->securityProtocol = $vals['securityProtocol'];
+      }
+      if (isset($vals['unicoreEndPointURL'])) {
+        $this->unicoreEndPointURL = $vals['unicoreEndPointURL'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'UnicoreDataMovement';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->dataMovementInterfaceId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->securityProtocol);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->unicoreEndPointURL);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('UnicoreDataMovement');
+    if ($this->dataMovementInterfaceId !== null) {
+      $xfer += $output->writeFieldBegin('dataMovementInterfaceId', TType::STRING, 1);
+      $xfer += $output->writeString($this->dataMovementInterfaceId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->securityProtocol !== null) {
+      $xfer += $output->writeFieldBegin('securityProtocol', TType::I32, 2);
+      $xfer += $output->writeI32($this->securityProtocol);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->unicoreEndPointURL !== null) {
+      $xfer += $output->writeFieldBegin('unicoreEndPointURL', TType::STRING, 3);
+      $xfer += $output->writeString($this->unicoreEndPointURL);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class LOCALSubmission {
+  static $_TSPEC;
+
+  public $jobSubmissionInterfaceId = "DO_NOT_SET_AT_CLIENTS";
+  public $resourceJobManager = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'jobSubmissionInterfaceId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'resourceJobManager',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\AppCatalog\ComputeResource\ResourceJobManager',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['jobSubmissionInterfaceId'])) {
+        $this->jobSubmissionInterfaceId = $vals['jobSubmissionInterfaceId'];
+      }
+      if (isset($vals['resourceJobManager'])) {
+        $this->resourceJobManager = $vals['resourceJobManager'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'LOCALSubmission';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->jobSubmissionInterfaceId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->resourceJobManager = new \Airavata\Model\AppCatalog\ComputeResource\ResourceJobManager();
+            $xfer += $this->resourceJobManager->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('LOCALSubmission');
+    if ($this->jobSubmissionInterfaceId !== null) {
+      $xfer += $output->writeFieldBegin('jobSubmissionInterfaceId', TType::STRING, 1);
+      $xfer += $output->writeString($this->jobSubmissionInterfaceId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->resourceJobManager !== null) {
+      if (!is_object($this->resourceJobManager)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('resourceJobManager', TType::STRUCT, 2);
+      $xfer += $this->resourceJobManager->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class LOCALDataMovement {
+  static $_TSPEC;
+
+  public $dataMovementInterfaceId = "DO_NOT_SET_AT_CLIENTS";
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'dataMovementInterfaceId',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['dataMovementInterfaceId'])) {
+        $this->dataMovementInterfaceId = $vals['dataMovementInterfaceId'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'LOCALDataMovement';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->dataMovementInterfaceId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('LOCALDataMovement');
+    if ($this->dataMovementInterfaceId !== null) {
+      $xfer += $output->writeFieldBegin('dataMovementInterfaceId', TType::STRING, 1);
+      $xfer += $output->writeString($this->dataMovementInterfaceId);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class SSHJobSubmission {
+  static $_TSPEC;
+
+  public $jobSubmissionInterfaceId = "DO_NOT_SET_AT_CLIENTS";
+  public $securityProtocol = null;
+  public $resourceJobManager = null;
+  public $alternativeSSHHostName = null;
+  public $sshPort = 22;
+  public $monitorMode = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'jobSubmissionInterfaceId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'securityProtocol',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'resourceJobManager',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\AppCatalog\ComputeResource\ResourceJobManager',
+          ),
+        4 => array(
+          'var' => 'alternativeSSHHostName',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'sshPort',
+          'type' => TType::I32,
+          ),
+        6 => array(
+          'var' => 'monitorMode',
+          'type' => TType::I32,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['jobSubmissionInterfaceId'])) {
+        $this->jobSubmissionInterfaceId = $vals['jobSubmissionInterfaceId'];
+      }
+      if (isset($vals['securityProtocol'])) {
+        $this->securityProtocol = $vals['securityProtocol'];
+      }
+      if (isset($vals['resourceJobManager'])) {
+        $this->resourceJobManager = $vals['resourceJobManager'];
+      }
+      if (isset($vals['alternativeSSHHostName'])) {
+        $this->alternativeSSHHostName = $vals['alternativeSSHHostName'];
+      }
+      if (isset($vals['sshPort'])) {
+        $this->sshPort = $vals['sshPort'];
+      }
+      if (isset($vals['monitorMode'])) {
+        $this->monitorMode = $vals['monitorMode'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'SSHJobSubmission';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->jobSubmissionInterfaceId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->securityProtocol);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRUCT) {
+            $this->resourceJobManager = new \Airavata\Model\AppCatalog\ComputeResource\ResourceJobManager();
+            $xfer += $this->resourceJobManager->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->alternativeSSHHostName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->sshPort);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->monitorMode);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('SSHJobSubmission');
+    if ($this->jobSubmissionInterfaceId !== null) {
+      $xfer += $output->writeFieldBegin('jobSubmissionInterfaceId', TType::STRING, 1);
+      $xfer += $output->writeString($this->jobSubmissionInterfaceId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->securityProtocol !== null) {
+      $xfer += $output->writeFieldBegin('securityProtocol', TType::I32, 2);
+      $xfer += $output->writeI32($this->securityProtocol);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->resourceJobManager !== null) {
+      if (!is_object($this->resourceJobManager)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('resourceJobManager', TType::STRUCT, 3);
+      $xfer += $this->resourceJobManager->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->alternativeSSHHostName !== null) {
+      $xfer += $output->writeFieldBegin('alternativeSSHHostName', TType::STRING, 4);
+      $xfer += $output->writeString($this->alternativeSSHHostName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->sshPort !== null) {
+      $xfer += $output->writeFieldBegin('sshPort', TType::I32, 5);
+      $xfer += $output->writeI32($this->sshPort);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->monitorMode !== null) {
+      $xfer += $output->writeFieldBegin('monitorMode', TType::I32, 6);
+      $xfer += $output->writeI32($this->monitorMode);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class GlobusJobSubmission {
+  static $_TSPEC;
+
+  public $jobSubmissionInterfaceId = "DO_NOT_SET_AT_CLIENTS";
+  public $securityProtocol = null;
+  public $globusGateKeeperEndPoint = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'jobSubmissionInterfaceId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'securityProtocol',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'globusGateKeeperEndPoint',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['jobSubmissionInterfaceId'])) {
+        $this->jobSubmissionInterfaceId = $vals['jobSubmissionInterfaceId'];
+      }
+      if (isset($vals['securityProtocol'])) {
+        $this->securityProtocol = $vals['securityProtocol'];
+      }
+      if (isset($vals['globusGateKeeperEndPoint'])) {
+        $this->globusGateKeeperEndPoint = $vals['globusGateKeeperEndPoint'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'GlobusJobSubmission';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->jobSubmissionInterfaceId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->securityProtocol);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::LST) {
+            $this->globusGateKeeperEndPoint = array();
+            $_size16 = 0;
+            $_etype19 = 0;
+            $xfer += $input->readListBegin($_etype19, $_size16);
+            for ($_i20 = 0; $_i20 < $_size16; ++$_i20)
+            {
+              $elem21 = null;
+              $xfer += $input->readString($elem21);
+              $this->globusGateKeeperEndPoint []= $elem21;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('GlobusJobSubmission');
+    if ($this->jobSubmissionInterfaceId !== null) {
+      $xfer += $output->writeFieldBegin('jobSubmissionInterfaceId', TType::STRING, 1);
+      $xfer += $output->writeString($this->jobSubmissionInterfaceId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->securityProtocol !== null) {
+      $xfer += $output->writeFieldBegin('securityProtocol', TType::I32, 2);
+      $xfer += $output->writeI32($this->securityProtocol);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->globusGateKeeperEndPoint !== null) {
+      if (!is_array($this->globusGateKeeperEndPoint)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('globusGateKeeperEndPoint', TType::LST, 3);
+      {
+        $output->writeListBegin(TType::STRING, count($this->globusGateKeeperEndPoint));
+        {
+          foreach ($this->globusGateKeeperEndPoint as $iter22)
+          {
+            $xfer += $output->writeString($iter22);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class UnicoreJobSubmission {
+  static $_TSPEC;
+
+  public $jobSubmissionInterfaceId = "DO_NOT_SET_AT_CLIENTS";
+  public $securityProtocol = null;
+  public $unicoreEndPointURL = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'jobSubmissionInterfaceId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'securityProtocol',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'unicoreEndPointURL',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['jobSubmissionInterfaceId'])) {
+        $this->jobSubmissionInterfaceId = $vals['jobSubmissionInterfaceId'];
+      }
+      if (isset($vals['securityProtocol'])) {
+        $this->securityProtocol = $vals['securityProtocol'];
+      }
+      if (isset($vals['unicoreEndPointURL'])) {
+        $this->unicoreEndPointURL = $vals['unicoreEndPointURL'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'UnicoreJobSubmission';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->jobSubmissionInterfaceId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->securityProtocol);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->unicoreEndPointURL);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('UnicoreJobSubmission');
+    if ($this->jobSubmissionInterfaceId !== null) {
+      $xfer += $output->writeFieldBegin('jobSubmissionInterfaceId', TType::STRING, 1);
+      $xfer += $output->writeString($this->jobSubmissionInterfaceId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->securityProtocol !== null) {
+      $xfer += $output->writeFieldBegin('securityProtocol', TType::I32, 2);
+      $xfer += $output->writeI32($this->securityProtocol);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->unicoreEndPointURL !== null) {
+      $xfer += $output->writeFieldBegin('unicoreEndPointURL', TType::STRING, 3);
+      $xfer += $output->writeString($this->unicoreEndPointURL);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class CloudJobSubmission {
+  static $_TSPEC;
+
+  public $jobSubmissionInterfaceId = "DO_NOT_SET_AT_CLIENTS";
+  public $securityProtocol = null;
+  public $nodeId = null;
+  public $executableType = null;
+  public $providerName = null;
+  public $userAccountName = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'jobSubmissionInterfaceId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'securityProtocol',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'nodeId',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'executableType',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'providerName',
+          'type' => TType::I32,
+          ),
+        6 => array(
+          'var' => 'userAccountName',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['jobSubmissionInterfaceId'])) {
+        $this->jobSubmissionInterfaceId = $vals['jobSubmissionInterfaceId'];
+      }
+      if (isset($vals['securityProtocol'])) {
+        $this->securityProtocol = $vals['securityProtocol'];
+      }
+      if (isset($vals['nodeId'])) {
+        $this->nodeId = $vals['nodeId'];
+      }
+      if (isset($vals['executableType'])) {
+        $this->executableType = $vals['executableType'];
+      }
+      if (isset($vals['providerName'])) {
+        $this->providerName = $vals['providerName'];
+      }
+      if (isset($vals['userAccountName'])) {
+        $this->userAccountName = $vals['userAccountName'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'CloudJobSubmission';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->jobSubmissionInterfaceId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->securityProtocol);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->nodeId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->executableType);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->providerName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->userAccountName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('CloudJobSubmission');
+    if ($this->jobSubmissionInterfaceId !== null) {
+      $xfer += $output->writeFieldBegin('jobSubmissionInterfaceId', TType::STRING, 1);
+      $xfer += $output->writeString($this->jobSubmissionInterfaceId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->securityProtocol !== null) {
+      $xfer += $output->writeFieldBegin('securityProtocol', TType::I32, 2);
+      $xfer += $output->writeI32($this->securityProtocol);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->nodeId !== null) {
+      $xfer += $output->writeFieldBegin('nodeId', TType::STRING, 3);
+      $xfer += $output->writeString($this->nodeId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->executableType !== null) {
+      $xfer += $output->writeFieldBegin('executableType', TType::STRING, 4);
+      $xfer += $output->writeString($this->executableType);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->providerName !== null) {
+      $xfer += $output->writeFieldBegin('providerName', TType::I32, 5);
+      $xfer += $output->writeI32($this->providerName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->userAccountName !== null) {
+      $xfer += $output->writeFieldBegin('userAccountName', TType::STRING, 6);
+      $xfer += $output->writeString($this->userAccountName);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class JobSubmissionInterface {
+  static $_TSPEC;
+
+  public $jobSubmissionInterfaceId = null;
+  public $jobSubmissionProtocol = null;
+  public $priorityOrder = 0;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'jobSubmissionInterfaceId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'jobSubmissionProtocol',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'priorityOrder',
+          'type' => TType::I32,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['jobSubmissionInterfaceId'])) {
+        $this->jobSubmissionInterfaceId = $vals['jobSubmissionInterfaceId'];
+      }
+      if (isset($vals['jobSubmissionProtocol'])) {
+        $this->jobSubmissionProtocol = $vals['jobSubmissionProtocol'];
+      }
+      if (isset($vals['priorityOrder'])) {
+        $this->priorityOrder = $vals['priorityOrder'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'JobSubmissionInterface';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->jobSubmissionInterfaceId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->jobSubmissionProtocol);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->priorityOrder);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('JobSubmissionInterface');
+    if ($this->jobSubmissionInterfaceId !== null) {
+      $xfer += $output->writeFieldBegin('jobSubmissionInterfaceId', TType::STRING, 1);
+      $xfer += $output->writeString($this->jobSubmissionInterfaceId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->jobSubmissionProtocol !== null) {
+      $xfer += $output->writeFieldBegin('jobSubmissionProtocol', TType::I32, 2);
+      $xfer += $output->writeI32($this->jobSubmissionProtocol);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->priorityOrder !== null) {
+      $xfer += $output->writeFieldBegin('priorityOrder', TType::I32, 3);
+      $xfer += $output->writeI32($this->priorityOrder);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class DataMovementInterface {
+  static $_TSPEC;
+
+  public $dataMovementInterfaceId = null;
+  public $dataMovementProtocol = null;
+  public $priorityOrder = 0;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'dataMovementInterfaceId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'dataMovementProtocol',
+          'type' => TType::I32,
+          ),
+        3 => array(
+          'var' => 'priorityOrder',
+          'type' => TType::I32,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['dataMovementInterfaceId'])) {
+        $this->dataMovementInterfaceId = $vals['dataMovementInterfaceId'];
+      }
+      if (isset($vals['dataMovementProtocol'])) {
+        $this->dataMovementProtocol = $vals['dataMovementProtocol'];
+      }
+      if (isset($vals['priorityOrder'])) {
+        $this->priorityOrder = $vals['priorityOrder'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'DataMovementInterface';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->dataMovementInterfaceId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->dataMovementProtocol);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->priorityOrder);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('DataMovementInterface');
+    if ($this->dataMovementInterfaceId !== null) {
+      $xfer += $output->writeFieldBegin('dataMovementInterfaceId', TType::STRING, 1);
+      $xfer += $output->writeString($this->dataMovementInterfaceId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->dataMovementProtocol !== null) {
+      $xfer += $output->writeFieldBegin('dataMovementProtocol', TType::I32, 2);
+      $xfer += $output->writeI32($this->dataMovementProtocol);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->priorityOrder !== null) {
+      $xfer += $output->writeFieldBegin('priorityOrder', TType::I32, 3);
+      $xfer += $output->writeI32($this->priorityOrder);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ComputeResourceDescription {
+  static $_TSPEC;
+
+  public $computeResourceId = "DO_NOT_SET_AT_CLIENTS";
+  public $hostName = null;
+  public $hostAliases = null;
+  public $ipAddresses = null;
+  public $resourceDescription = null;
+  public $batchQueues = null;
+  public $fileSystems = null;
+  public $jobSubmissionInterfaces = null;
+  public $dataMovementInterfaces = null;
+  public $maxMemoryPerNode = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'computeResourceId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'hostName',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'hostAliases',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        4 => array(
+          'var' => 'ipAddresses',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        5 => array(
+          'var' => 'resourceDescription',
+          'type' => TType::STRING,
+          ),
+        6 => array(
+          'var' => 'batchQueues',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\ComputeResource\BatchQueue',
+            ),
+          ),
+        7 => array(
+          'var' => 'fileSystems',
+          'type' => TType::MAP,
+          'ktype' => TType::I32,
+          'vtype' => TType::STRING,
+          'key' => array(
+            'type' => TType::I32,
+          ),
+          'val' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        8 => array(
+          'var' => 'jobSubmissionInterfaces',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\ComputeResource\JobSubmissionInterface',
+            ),
+          ),
+        9 => array(
+          'var' => 'dataMovementInterfaces',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\ComputeResource\DataMovementInterface',
+            ),
+          ),
+        10 => array(
+          'var' => 'maxMemoryPerNode',
+          'type' => TType::I32,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['computeResourceId'])) {
+        $this->computeResourceId = $vals['computeResourceId'];
+      }
+      if (isset($vals['hostName'])) {
+        $this->hostName = $vals['hostName'];
+      }
+      if (isset($vals['hostAliases'])) {
+        $this->hostAliases = $vals['hostAliases'];
+      }
+      if (isset($vals['ipAddresses'])) {
+        $this->ipAddresses = $vals['ipAddresses'];
+      }
+      if (isset($vals['resourceDescription'])) {
+        $this->resourceDescription = $vals['resourceDescription'];
+      }
+      if (isset($vals['batchQueues'])) {
+        $this->batchQueues = $vals['batchQueues'];
+      }
+      if (isset($vals['fileSystems'])) {
+        $this->fileSystems = $vals['fileSystems'];
+      }
+      if (isset($vals['jobSubmissionInterfaces'])) {
+        $this->jobSubmissionInterfaces = $vals['jobSubmissionInterfaces'];
+      }
+      if (isset($vals['dataMovementInterfaces'])) {
+        $this->dataMovementInterfaces = $vals['dataMovementInterfaces'];
+      }
+      if (isset($vals['maxMemoryPerNode'])) {
+        $this->maxMemoryPerNode = $vals['maxMemoryPerNode'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ComputeResourceDescription';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->computeResourceId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->hostName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::LST) {
+            $this->hostAliases = array();
+            $_size23 = 0;
+            $_etype26 = 0;
+            $xfer += $input->readListBegin($_etype26, $_size23);
+            for ($_i27 = 0; $_i27 < $_size23; ++$_i27)
+            {
+              $elem28 = null;
+              $xfer += $input->readString($elem28);
+              $this->hostAliases []= $elem28;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::LST) {
+            $this->ipAddresses = array();
+            $_size29 = 0;
+            $_etype32 = 0;
+            $xfer += $input->readListBegin($_etype32, $_size29);
+            for ($_i33 = 0; $_i33 < $_size29; ++$_i33)
+            {
+              $elem34 = null;
+              $xfer += $input->readString($elem34);
+              $this->ipAddresses []= $elem34;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->resourceDescription);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::LST) {
+            $this->batchQueues = array();
+            $_size35 = 0;
+            $_etype38 = 0;
+            $xfer += $input->readListBegin($_etype38, $_size35);
+            for ($_i39 = 0; $_i39 < $_size35; ++$_i39)
+            {
+              $elem40 = null;
+              $elem40 = new \Airavata\Model\AppCatalog\ComputeResource\BatchQueue();
+              $xfer += $elem40->read($input);
+              $this->batchQueues []= $elem40;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::MAP) {
+            $this->fileSystems = array();
+            $_size41 = 0;
+            $_ktype42 = 0;
+            $_vtype43 = 0;
+            $xfer += $input->readMapBegin($_ktype42, $_vtype43, $_size41);
+            for ($_i45 = 0; $_i45 < $_size41; ++$_i45)
+            {
+              $key46 = 0;
+              $val47 = '';
+              $xfer += $input->readI32($key46);
+              $xfer += $input->readString($val47);
+              $this->fileSystems[$key46] = $val47;
+            }
+            $xfer += $input->readMapEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 8:
+          if ($ftype == TType::LST) {
+            $this->jobSubmissionInterfaces = array();
+            $_size48 = 0;
+            $_etype51 = 0;
+            $xfer += $input->readListBegin($_etype51, $_size48);
+            for ($_i52 = 0; $_i52 < $_size48; ++$_i52)
+            {
+              $elem53 = null;
+              $elem53 = new \Airavata\Model\AppCatalog\ComputeResource\JobSubmissionInterface();
+              $xfer += $elem53->read($input);
+              $this->jobSubmissionInterfaces []= $elem53;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 9:
+          if ($ftype == TType::LST) {
+            $this->dataMovementInterfaces = array();
+            $_size54 = 0;
+            $_etype57 = 0;
+            $xfer += $input->readListBegin($_etype57, $_size54);
+            for ($_i58 = 0; $_i58 < $_size54; ++$_i58)
+            {
+              $elem59 = null;
+              $elem59 = new \Airavata\Model\AppCatalog\ComputeResource\DataMovementInterface();
+              $xfer += $elem59->read($input);
+              $this->dataMovementInterfaces []= $elem59;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 10:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->maxMemoryPerNode);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ComputeResourceDescription');
+    if ($this->computeResourceId !== null) {
+      $xfer += $output->writeFieldBegin('computeResourceId', TType::STRING, 1);
+      $xfer += $output->writeString($this->computeResourceId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->hostName !== null) {
+      $xfer += $output->writeFieldBegin('hostName', TType::STRING, 2);
+      $xfer += $output->writeString($this->hostName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->hostAliases !== null) {
+      if (!is_array($this->hostAliases)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('hostAliases', TType::LST, 3);
+      {
+        $output->writeListBegin(TType::STRING, count($this->hostAliases));
+        {
+          foreach ($this->hostAliases as $iter60)
+          {
+            $xfer += $output->writeString($iter60);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ipAddresses !== null) {
+      if (!is_array($this->ipAddresses)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('ipAddresses', TType::LST, 4);
+      {
+        $output->writeListBegin(TType::STRING, count($this->ipAddresses));
+        {
+          foreach ($this->ipAddresses as $iter61)
+          {
+            $xfer += $output->writeString($iter61);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->resourceDescription !== null) {
+      $xfer += $output->writeFieldBegin('resourceDescription', TType::STRING, 5);
+      $xfer += $output->writeString($this->resourceDescription);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->batchQueues !== null) {
+      if (!is_array($this->batchQueues)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('batchQueues', TType::LST, 6);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->batchQueues));
+        {
+          foreach ($this->batchQueues as $iter62)
+          {
+            $xfer += $iter62->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->fileSystems !== null) {
+      if (!is_array($this->fileSystems)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('fileSystems', TType::MAP, 7);
+      {
+        $output->writeMapBegin(TType::I32, TType::STRING, count($this->fileSystems));
+        {
+          foreach ($this->fileSystems as $kiter63 => $viter64)
+          {
+            $xfer += $output->writeI32($kiter63);
+            $xfer += $output->writeString($viter64);
+          }
+        }
+        $output->writeMapEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->jobSubmissionInterfaces !== null) {
+      if (!is_array($this->jobSubmissionInterfaces)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('jobSubmissionInterfaces', TType::LST, 8);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->jobSubmissionInterfaces));
+        {
+          foreach ($this->jobSubmissionInterfaces as $iter65)
+          {
+            $xfer += $iter65->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->dataMovementInterfaces !== null) {
+      if (!is_array($this->dataMovementInterfaces)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('dataMovementInterfaces', TType::LST, 9);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->dataMovementInterfaces));
+        {
+          foreach ($this->dataMovementInterfaces as $iter66)
+          {
+            $xfer += $iter66->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->maxMemoryPerNode !== null) {
+      $xfer += $output->writeFieldBegin('maxMemoryPerNode', TType::I32, 10);
+      $xfer += $output->writeI32($this->maxMemoryPerNode);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+$GLOBALS['computeResourceModel_CONSTANTS']['DEFAULT_ID'] = "DO_NOT_SET_AT_CLIENTS";
+
+

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/Airavata/Model/AppCatalog/GatewayProfile/Types.php
----------------------------------------------------------------------
diff --git a/app/libraries/Airavata/Model/AppCatalog/GatewayProfile/Types.php b/app/libraries/Airavata/Model/AppCatalog/GatewayProfile/Types.php
new file mode 100644
index 0000000..e0e6227
--- /dev/null
+++ b/app/libraries/Airavata/Model/AppCatalog/GatewayProfile/Types.php
@@ -0,0 +1,352 @@
+<?php
+namespace Airavata\Model\AppCatalog\GatewayProfile;
+
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+use Thrift\Base\TBase;
+use Thrift\Type\TType;
+use Thrift\Type\TMessageType;
+use Thrift\Exception\TException;
+use Thrift\Exception\TProtocolException;
+use Thrift\Protocol\TProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
+use Thrift\Exception\TApplicationException;
+
+
+class ComputeResourcePreference {
+  static $_TSPEC;
+
+  public $computeResourceId = null;
+  public $overridebyAiravata = true;
+  public $loginUserName = null;
+  public $preferredJobSubmissionProtocol = null;
+  public $preferredDataMovementProtocol = null;
+  public $preferredBatchQueue = null;
+  public $scratchLocation = null;
+  public $allocationProjectNumber = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'computeResourceId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'overridebyAiravata',
+          'type' => TType::BOOL,
+          ),
+        3 => array(
+          'var' => 'loginUserName',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'preferredJobSubmissionProtocol',
+          'type' => TType::I32,
+          ),
+        5 => array(
+          'var' => 'preferredDataMovementProtocol',
+          'type' => TType::I32,
+          ),
+        6 => array(
+          'var' => 'preferredBatchQueue',
+          'type' => TType::STRING,
+          ),
+        7 => array(
+          'var' => 'scratchLocation',
+          'type' => TType::STRING,
+          ),
+        8 => array(
+          'var' => 'allocationProjectNumber',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['computeResourceId'])) {
+        $this->computeResourceId = $vals['computeResourceId'];
+      }
+      if (isset($vals['overridebyAiravata'])) {
+        $this->overridebyAiravata = $vals['overridebyAiravata'];
+      }
+      if (isset($vals['loginUserName'])) {
+        $this->loginUserName = $vals['loginUserName'];
+      }
+      if (isset($vals['preferredJobSubmissionProtocol'])) {
+        $this->preferredJobSubmissionProtocol = $vals['preferredJobSubmissionProtocol'];
+      }
+      if (isset($vals['preferredDataMovementProtocol'])) {
+        $this->preferredDataMovementProtocol = $vals['preferredDataMovementProtocol'];
+      }
+      if (isset($vals['preferredBatchQueue'])) {
+        $this->preferredBatchQueue = $vals['preferredBatchQueue'];
+      }
+      if (isset($vals['scratchLocation'])) {
+        $this->scratchLocation = $vals['scratchLocation'];
+      }
+      if (isset($vals['allocationProjectNumber'])) {
+        $this->allocationProjectNumber = $vals['allocationProjectNumber'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ComputeResourcePreference';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->computeResourceId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->overridebyAiravata);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->loginUserName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->preferredJobSubmissionProtocol);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->preferredDataMovementProtocol);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->preferredBatchQueue);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->scratchLocation);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 8:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->allocationProjectNumber);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ComputeResourcePreference');
+    if ($this->computeResourceId !== null) {
+      $xfer += $output->writeFieldBegin('computeResourceId', TType::STRING, 1);
+      $xfer += $output->writeString($this->computeResourceId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->overridebyAiravata !== null) {
+      $xfer += $output->writeFieldBegin('overridebyAiravata', TType::BOOL, 2);
+      $xfer += $output->writeBool($this->overridebyAiravata);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->loginUserName !== null) {
+      $xfer += $output->writeFieldBegin('loginUserName', TType::STRING, 3);
+      $xfer += $output->writeString($this->loginUserName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->preferredJobSubmissionProtocol !== null) {
+      $xfer += $output->writeFieldBegin('preferredJobSubmissionProtocol', TType::I32, 4);
+      $xfer += $output->writeI32($this->preferredJobSubmissionProtocol);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->preferredDataMovementProtocol !== null) {
+      $xfer += $output->writeFieldBegin('preferredDataMovementProtocol', TType::I32, 5);
+      $xfer += $output->writeI32($this->preferredDataMovementProtocol);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->preferredBatchQueue !== null) {
+      $xfer += $output->writeFieldBegin('preferredBatchQueue', TType::STRING, 6);
+      $xfer += $output->writeString($this->preferredBatchQueue);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->scratchLocation !== null) {
+      $xfer += $output->writeFieldBegin('scratchLocation', TType::STRING, 7);
+      $xfer += $output->writeString($this->scratchLocation);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->allocationProjectNumber !== null) {
+      $xfer += $output->writeFieldBegin('allocationProjectNumber', TType::STRING, 8);
+      $xfer += $output->writeString($this->allocationProjectNumber);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class GatewayResourceProfile {
+  static $_TSPEC;
+
+  public $gatewayID = null;
+  public $computeResourcePreferences = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'gatewayID',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'computeResourcePreferences',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference',
+            ),
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['gatewayID'])) {
+        $this->gatewayID = $vals['gatewayID'];
+      }
+      if (isset($vals['computeResourcePreferences'])) {
+        $this->computeResourcePreferences = $vals['computeResourcePreferences'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'GatewayResourceProfile';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->gatewayID);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::LST) {
+            $this->computeResourcePreferences = array();
+            $_size0 = 0;
+            $_etype3 = 0;
+            $xfer += $input->readListBegin($_etype3, $_size0);
+            for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
+            {
+              $elem5 = null;
+              $elem5 = new \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference();
+              $xfer += $elem5->read($input);
+              $this->computeResourcePreferences []= $elem5;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('GatewayResourceProfile');
+    if ($this->gatewayID !== null) {
+      $xfer += $output->writeFieldBegin('gatewayID', TType::STRING, 1);
+      $xfer += $output->writeString($this->gatewayID);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->computeResourcePreferences !== null) {
+      if (!is_array($this->computeResourcePreferences)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('computeResourcePreferences', TType::LST, 2);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->computeResourcePreferences));
+        {
+          foreach ($this->computeResourcePreferences as $iter6)
+          {
+            $xfer += $iter6->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+


[57/57] airavata-php-gateway git commit: Correcting Merge Conflicts with AIRAVATA-1695

Posted by nd...@apache.org.
Correcting Merge Conflicts with AIRAVATA-1695


Project: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/commit/71079c5f
Tree: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/tree/71079c5f
Diff: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/diff/71079c5f

Branch: refs/heads/master
Commit: 71079c5f4d3f93acd0ef767eb6e579a51b88cbb4
Parents: a88b5d6 39a110e
Author: nipunhere <ni...@gmail.com>
Authored: Fri May 1 17:32:20 2015 -0400
Committer: nipunhere <ni...@gmail.com>
Committed: Fri May 1 17:32:20 2015 -0400

----------------------------------------------------------------------
 .gitignore                                     |    9 +
 app/controllers/ComputeResource.php            |  238 +++
 app/controllers/ExperimentController.php       |   11 +-
 app/libraries/utilities.php                    | 2111 +++++++++++++++++++
 app/routes.php                                 |   17 +-
 app/views/experiment/create-complete.blade.php |    3 +-
 app/views/layout/basic.blade.php               |    3 +-
 app/views/partials/experiment-inputs.blade.php |    1 -
 app/views/partials/queue-block.blade.php       |    2 +-
 composer.lock                                  |    4 +-
 vendor/apache/thrift                           |    2 +-
 vendor/composer/autoload_classmap.php          |    4 +-
 vendor/composer/installed.json                 |    4 +-
 13 files changed, 2384 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/71079c5f/app/controllers/ExperimentController.php
----------------------------------------------------------------------
diff --cc app/controllers/ExperimentController.php
index 0968d81,69abd00..de79704
--- a/app/controllers/ExperimentController.php
+++ b/app/controllers/ExperimentController.php
@@@ -45,10 -36,11 +45,11 @@@ class ExperimentController extends Base
  						        "allowedFileSize" => $app_config["server-allowed-file-size"],
  						        "echo" => ($_POST['application'] == 'Echo')? ' selected' : '',
  						        "wrf" => ($_POST['application'] == 'WRF')? ' selected' : '',
 -						        "queueName" => $app_config["queue-name"],
 -						        "nodeCount" => $app_config["node-count"],
 -						        "cpuCount" => $app_config["total-cpu-count"],
 -						        "wallTimeLimit" => $app_config["wall-time-limit"],
 +						        "queueDefaults" => $queueDefaults,
 +						        "advancedOptions" => $app_config["advanced-experiment-options"],
 +						        "computeResources" => $computeResources,
- 						        "resourceHostId" => null
++						        "resourceHostId" => null,
+ 						        "advancedOptions" => $app_config["advanced-experiment-options"]
  					        );
  			return View::make( "experiment/create-complete", array( "expInputs" => $experimentInputs) );
  		}
@@@ -184,7 -170,7 +185,8 @@@
  		$project = Utilities::get_project($experiment->projectID);
  
  		$expVal = Utilities::get_experiment_values( $experiment, $project);
 +		$computeResources = Utilities::create_compute_resources_select($experiment->applicationId, $expVal['scheduling']->resourceHostId);
+ 
  		$experimentInputs = array(	
  								"disabled" => ' ',
  						        "experimentName" => $experiment->name,
@@@ -192,13 -178,10 +194,17 @@@
  						        "application" => $experiment->applicationId,
  						      	"allowedFileSize" => $app_config["server-allowed-file-size"],
  								'experiment' => $experiment,
 +								"queueDefaults" => $queueDefaults,
 +								'project' => $project,
 +								'expVal' => $expVal,
 +								'cloning' => true,
 +						        'advancedOptions' => $app_config["advanced-experiment-options"],
 +						        'computeResources' => $computeResources,
- 						        "resourceHostId" => $expVal['scheduling']->resourceHostId
++						        "resourceHostId" => $expVal['scheduling']->resourceHostId,
+ 								'project' => $project,
+ 								'expVal' => $expVal,
+ 								'cloning' => true,
+ 						        'advancedOptions' => $app_config["advanced-experiment-options"]
  								);
  		return View::make("experiment/edit", array("expInputs" => $experimentInputs) );
  	}
@@@ -244,18 -227,6 +250,17 @@@
  												));
  	}
  
 +	public function getQueueView()
 +	{
 +		$queues = Utilities::getQueueDatafromResourceId( Input::get("crId"));
 +		$app_config = Utilities::read_config();
 +		$queueDefaults = array( "queueName" => $app_config["queue-name"],
 +						        "nodeCount" => $app_config["node-count"],
 +						        "cpuCount" => $app_config["total-cpu-count"],
 +						        "wallTimeLimit" => $app_config["wall-time-limit"]
 +							);
 +		return View::make("partials/experiment-queue-block", array( "queues" => $queues, "queueDefaults" => $queueDefaults) );
 +	}
- 
  }
  
  ?>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/71079c5f/app/routes.php
----------------------------------------------------------------------
diff --cc app/routes.php
index 547ea9c,ad7ea27..ffcde73
--- a/app/routes.php
+++ b/app/routes.php
@@@ -86,22 -80,22 +86,21 @@@ Route::get("cr/create", function()
  	return Redirect::to("cr/create/step1");
  });
  
- Route::get("cr/create", "ResourceController@createView"); 
+ Route::get("cr/create", "ComputeResource@createView"); 
  
- Route::post("cr/create", "ResourceController@createSubmit");
+ Route::post("cr/create", "ComputeResource@createSubmit");
  
- Route::get("cr/edit", "ResourceController@editView"); 
+ Route::get("cr/edit", "ComputeResource@editView"); 
  
- Route::post("cr/edit", "ResourceController@editSubmit"); 
+ Route::post("cr/edit", "ComputeResource@editSubmit"); 
  
- Route::get("cr/browse", "ResourceController@browseView");
+ Route::get("cr/browse", "ComputeResource@browseView");
  
- Route::post("cr/delete-jsi", "ResourceController@deleteActions");
+ Route::post("cr/delete-jsi", "ComputeResource@deleteActions");
  
- Route::post("cr/delete-dmi", "ResourceController@deleteActions");
- 
- Route::post("cr/delete-cr", "ResourceController@deleteActions");
+ Route::post("cr/delete-dmi", "ComputeResource@deleteActions");
  
+ Route::post("cr/delete-cr", "ComputeResource@deleteActions");
 -
  /*
   * Application Catalog Routes
  */

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/71079c5f/app/views/experiment/create-complete.blade.php
----------------------------------------------------------------------
diff --cc app/views/experiment/create-complete.blade.php
index c654497,a3ee8be..d5d944d
--- a/app/views/experiment/create-complete.blade.php
+++ b/app/views/experiment/create-complete.blade.php
@@@ -14,8 -14,8 +14,8 @@@
          <input type="hidden" name="experiment-description" value="{{$expInputs['experimentDescription']}}">
          <input type="hidden" name="project" value="{{$expInputs['project']}}">
          <input type="hidden" name="application" value="{{$expInputs['application']}}">
--        
 -        @include('partials/experiment-inputs', array("expInputs" => $expInputs) )
++
 +        @include('partials/experiment-inputs', array("expInputs" => $expInputs, "queueDefaults" => $expInputs['queueDefaults']) )
  
          <div class="form-group btn-toolbar">
              <div class="btn-group">
@@@ -66,20 -66,5 +66,19 @@@
          var emailInput = $(this).parent().find("#emailAddresses").clone();
          emailInput.removeAttr("id").removeAttr("required").val("").appendTo(".emailAddresses");
      });
 +
 +    $("#compute-resource").change( function(){
 +        var crId = $(this).val();
 +        $(".loading-img ").removeClass("hide");
 +        $.ajax({
 +            url: '../experiment/getQueueView',
 +            type: 'get',
 +            data: {crId: crId},
 +            success: function(data) {
 +                $(".queue-view").html( data);
 +                $(".loading-img ").addClass("hide");
 +            }
 +        });
 +    });
- 
      </script>
  @stop

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/71079c5f/app/views/layout/basic.blade.php
----------------------------------------------------------------------
diff --cc app/views/layout/basic.blade.php
index a35d28a,7bebad9..76d22f5
--- a/app/views/layout/basic.blade.php
+++ b/app/views/layout/basic.blade.php
@@@ -94,21 -94,7 +94,20 @@@
          $("body").on( "blur", ".form-control", function(){
              $(this).val( $.trim( $(this).val() ) );
          });
--
++        
 +        //find users' current time.
 +        if("{{ Session::get('user_time') }}".length==0){
 +            var visitortime = new Date();
 +            var visitortimezone = visitortime.getTimezoneOffset()/60;
 +            $.ajax({
 +                type: "GET",
 +                url: "../setUserTimezone",
 +                data: 'timezone='+ visitortimezone,
 +                success: function(){
 +                    //location.reload();
 +                }
 +            });
 +        }
- 
      </script>
  
  @show

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/71079c5f/app/views/partials/experiment-inputs.blade.php
----------------------------------------------------------------------
diff --cc app/views/partials/experiment-inputs.blade.php
index 591beea,475e065..fa07450
--- a/app/views/partials/experiment-inputs.blade.php
+++ b/app/views/partials/experiment-inputs.blade.php
@@@ -42,26 -42,48 +42,25 @@@
          </div>
          <div class="form-group">
              <label for="compute-resource">Compute Resource</label>
 -            @if( isset( $expInputs['cloning']))
 -                {{ Utilities::create_compute_resources_select($expInputs['experiment']->applicationId, $expInputs['expVal']['scheduling']->resourceHostId) }}
 +            @if( count( $expInputs['computeResources']) > 0)
 +                <select class="form-control" name="compute-resource" id="compute-resource">
 +                @foreach ($expInputs['computeResources'] as $id => $name)
 +                    <option value="{{$id}}" {{ ($expInputs['resourceHostId'] == $id)? ' selected' : '' }}>{{$name}}</option>
 +                @endforeach
 +                </select>
              @else
 -                {{ Utilities::create_compute_resources_select($expInputs['application'], null) }}
 +                <h4>No Compute Resources exist at the moment
              @endif
          </div>
 -
 -        <div class="form-group">
 -            <label for="node-count">Queue Name</label>
 -            <input type="text" class="form-control" name="queue-name" id="queue-name" 
 -            value="@if(isset($expInputs['expVal']) ){{ $expInputs['expVal']['scheduling']->queueName }}  @else{{$expInputs['queueName']}} @endif"
 -            @if(isset($expInputs['expVal']) ) @if(!$expInputs['expVal']['editable']){{ disabled }} @endif @endif>
 -        </div>
 -        <div class="form-group">
 -            <label for="node-count">Node Count</label>
 -            <input type="number" class="form-control" name="node-count" id="node-count" min="1"
 -            value="@if(isset($expInputs['expVal']) ){{ $expInputs['expVal']['scheduling']->nodeCount }}@else{{$expInputs['nodeCount']}}@endif"
 -            @if(isset($expInputs['expVal']) ) @if(!$expInputs['expVal']['editable']){{disabled}} @endif @endif>
 -        </div>
 -        <div class="form-group">
 -            <label for="cpu-count">Total Core Count</label>
 -            <input type="number" class="form-control" name="cpu-count" id="cpu-count" min="1"
 -            value="@if(isset($expInputs['expVal']) ){{ $expInputs['expVal']['scheduling']->totalCPUCount }}@else{{$expInputs['cpuCount']}}@endif"
 -            @if(isset($expInputs['expVal'])) @if(!$expInputs['expVal']['editable']){{disabled}} @endif @endif>
 -        </div>
 -        <div class="form-group">
 -            <label for="wall-time">Wall Time Limit</label>
 -            <div class="input-group">
 -                <input type="number" class="form-control" name="wall-time" id="wall-time" min="0"
 -                value="@if(isset($expInputs['expVal']) ){{ $expInputs['expVal']['scheduling']->wallTimeLimit }}@else{{$expInputs['wallTimeLimit']}}@endif"
 -                @if(isset($expInputs['expVal'])) @if(!$expInputs['expVal']['editable']){{disabled}} @endif @endif>
 -                <span class="input-group-addon">minutes</span>
 -            </div>
 -        </div>
 -        <div class="form-group">
 -            <label for="wall-time">Total Physical Memory</label>
 -            <div class="input-group">
 -                <input type="number" class="form-control" name="total-physical-memory" id="wall-time" min="0"
 -                value="@if(isset($expInputs['expVal']) ){{ $expInputs['expVal']['scheduling']->totalPhysicalMemory }}@endif"
 -                @if(isset($expInputs['expVal'])) @if(!$expInputs['expVal']['editable']){{disabled}} @endif @endif>
 -                <span class="input-group-addon">MB</span>
 +        <div class="queue-block">
 +            <div class="loading-img text-center hide">
 +                <img src="../assets/ajax-loader.gif"/>
              </div>
 +            <input type="hidden" name="selected-queue" value="@if(isset($expInputs['expVal']) ){{ $expInputs['expVal']['scheduling']->queueName }} @endif"/>
 +            <div class="queue-view">
 +                @if(isset($expInputs['expVal']) )
 +                    @include( 'partials/experiment-queue-block', array('expVal' => $expVal) )
 +                @endif
-             </div>
          </div>
      </div>
  </div>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/71079c5f/composer.lock
----------------------------------------------------------------------
diff --cc composer.lock
index ecfa53b,0000000..f2f922b
mode 100644,000000..100644
--- a/composer.lock
+++ b/composer.lock
@@@ -1,1701 -1,0 +1,1701 @@@
 +{
 +    "_readme": [
 +        "This file locks the dependencies of your project to a known state",
 +        "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
 +        "This file is @generated automatically"
 +    ],
 +    "hash": "eb3ef5641d65b98713bc235b252b2153",
 +    "packages": [
 +        {
 +            "name": "apache/thrift",
 +            "version": "dev-master",
 +            "source": {
 +                "type": "git",
 +                "url": "https://git-wip-us.apache.org/repos/asf/thrift.git",
-                 "reference": "dc799ca078627a8e400cfcdbb965acf6abf86eef"
++                "reference": "1e723d931e92652e4ccb1385709258759ae5bc54"
 +            },
 +            "require": {
 +                "php": ">=5.3.0"
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "1.0.x-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Thrift": "lib/php/lib/"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "Apache-2.0"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Apache Thrift Developers",
 +                    "email": "dev@thrift.apache.org",
 +                    "homepage": "http://thrift.apache.org"
 +                }
 +            ],
 +            "description": "Apache Thrift RPC system",
 +            "homepage": "http://thrift.apache.org/",
-             "time": "2015-04-27 21:02:05"
++            "time": "2015-05-01 04:09:00"
 +        },
 +        {
 +            "name": "classpreloader/classpreloader",
 +            "version": "1.0.2",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/ClassPreloader/ClassPreloader.git",
 +                "reference": "2c9f3bcbab329570c57339895bd11b5dd3b00877"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/ClassPreloader/ClassPreloader/zipball/2c9f3bcbab329570c57339895bd11b5dd3b00877",
 +                "reference": "2c9f3bcbab329570c57339895bd11b5dd3b00877",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "nikic/php-parser": "~0.9",
 +                "php": ">=5.3.3",
 +                "symfony/console": "~2.1",
 +                "symfony/filesystem": "~2.1",
 +                "symfony/finder": "~2.1"
 +            },
 +            "bin": [
 +                "classpreloader.php"
 +            ],
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "1.0-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "ClassPreloader": "src/"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case",
 +            "keywords": [
 +                "autoload",
 +                "class",
 +                "preload"
 +            ],
 +            "time": "2014-03-12 00:05:31"
 +        },
 +        {
 +            "name": "d11wtq/boris",
 +            "version": "v1.0.10",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/borisrepl/boris.git",
 +                "reference": "31055b15e2d3fe47f31f6aa8e277f8f3fc7eb483"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/borisrepl/boris/zipball/31055b15e2d3fe47f31f6aa8e277f8f3fc7eb483",
 +                "reference": "31055b15e2d3fe47f31f6aa8e277f8f3fc7eb483",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "ext-pcntl": "*",
 +                "ext-posix": "*",
 +                "ext-readline": "*",
 +                "php": ">=5.3.0"
 +            },
 +            "bin": [
 +                "bin/boris"
 +            ],
 +            "type": "library",
 +            "autoload": {
 +                "psr-0": {
 +                    "Boris": "lib"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "description": "A tiny, but robust REPL (Read-Evaluate-Print-Loop) for PHP.",
 +            "time": "2015-03-01 08:05:19"
 +        },
 +        {
 +            "name": "filp/whoops",
 +            "version": "1.1.5",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/filp/whoops.git",
 +                "reference": "c982fe62c44798c433229cb0425c61b487cc1883"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/filp/whoops/zipball/c982fe62c44798c433229cb0425c61b487cc1883",
 +                "reference": "c982fe62c44798c433229cb0425c61b487cc1883",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.0"
 +            },
 +            "require-dev": {
 +                "mockery/mockery": "0.9.*"
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "1.2-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Whoops": "src/"
 +                },
 +                "classmap": [
 +                    "src/deprecated"
 +                ]
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Filipe Dobreira",
 +                    "homepage": "https://github.com/filp",
 +                    "role": "Developer"
 +                }
 +            ],
 +            "description": "php error handling for cool kids",
 +            "homepage": "https://github.com/filp/whoops",
 +            "keywords": [
 +                "error",
 +                "exception",
 +                "handling",
 +                "library",
 +                "silex-provider",
 +                "whoops",
 +                "zf2"
 +            ],
 +            "time": "2015-03-30 15:26:59"
 +        },
 +        {
 +            "name": "ircmaxell/password-compat",
 +            "version": "v1.0.4",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/ircmaxell/password_compat.git",
 +                "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/5c5cde8822a69545767f7c7f3058cb15ff84614c",
 +                "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c",
 +                "shasum": ""
 +            },
 +            "require-dev": {
 +                "phpunit/phpunit": "4.*"
 +            },
 +            "type": "library",
 +            "autoload": {
 +                "files": [
 +                    "lib/password.php"
 +                ]
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Anthony Ferrara",
 +                    "email": "ircmaxell@php.net",
 +                    "homepage": "http://blog.ircmaxell.com"
 +                }
 +            ],
 +            "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash",
 +            "homepage": "https://github.com/ircmaxell/password_compat",
 +            "keywords": [
 +                "hashing",
 +                "password"
 +            ],
 +            "time": "2014-11-20 16:49:30"
 +        },
 +        {
 +            "name": "jeremeamia/SuperClosure",
 +            "version": "1.0.2",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/jeremeamia/super_closure.git",
 +                "reference": "4d89ca74994feab128ea46d5b3add92e6cb84554"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/jeremeamia/super_closure/zipball/4d89ca74994feab128ea46d5b3add92e6cb84554",
 +                "reference": "4d89ca74994feab128ea46d5b3add92e6cb84554",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "nikic/php-parser": "~0.9",
 +                "php": ">=5.3.3"
 +            },
 +            "require-dev": {
 +                "phpunit/phpunit": "~3.7"
 +            },
 +            "type": "library",
 +            "autoload": {
 +                "psr-0": {
 +                    "Jeremeamia\\SuperClosure": "src/"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Jeremy Lindblom"
 +                }
 +            ],
 +            "description": "Doing interesting things with closures like serialization.",
 +            "homepage": "https://github.com/jeremeamia/super_closure",
 +            "keywords": [
 +                "closure",
 +                "function",
 +                "parser",
 +                "serializable",
 +                "serialize",
 +                "tokenizer"
 +            ],
 +            "time": "2015-01-10 01:09:28"
 +        },
 +        {
 +            "name": "laravel/framework",
 +            "version": "v4.2.17",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/laravel/framework.git",
 +                "reference": "3359de6d6cd322e8a1b251c2f8d9dd42a3e4e232"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/laravel/framework/zipball/3359de6d6cd322e8a1b251c2f8d9dd42a3e4e232",
 +                "reference": "3359de6d6cd322e8a1b251c2f8d9dd42a3e4e232",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "classpreloader/classpreloader": "~1.0.2",
 +                "d11wtq/boris": "~1.0",
 +                "filp/whoops": "1.1.*",
 +                "ircmaxell/password-compat": "~1.0",
 +                "jeremeamia/superclosure": "~1.0.1",
 +                "monolog/monolog": "~1.6",
 +                "nesbot/carbon": "~1.0",
 +                "patchwork/utf8": "~1.1",
 +                "php": ">=5.4.0",
 +                "phpseclib/phpseclib": "0.3.*",
 +                "predis/predis": "0.8.*",
 +                "stack/builder": "~1.0",
 +                "swiftmailer/swiftmailer": "~5.1",
 +                "symfony/browser-kit": "2.5.*",
 +                "symfony/console": "2.5.*",
 +                "symfony/css-selector": "2.5.*",
 +                "symfony/debug": "2.5.*",
 +                "symfony/dom-crawler": "2.5.*",
 +                "symfony/finder": "2.5.*",
 +                "symfony/http-foundation": "2.5.*",
 +                "symfony/http-kernel": "2.5.*",
 +                "symfony/process": "2.5.*",
 +                "symfony/routing": "2.5.*",
 +                "symfony/security-core": "2.5.*",
 +                "symfony/translation": "2.5.*"
 +            },
 +            "replace": {
 +                "illuminate/auth": "self.version",
 +                "illuminate/cache": "self.version",
 +                "illuminate/config": "self.version",
 +                "illuminate/console": "self.version",
 +                "illuminate/container": "self.version",
 +                "illuminate/cookie": "self.version",
 +                "illuminate/database": "self.version",
 +                "illuminate/encryption": "self.version",
 +                "illuminate/events": "self.version",
 +                "illuminate/exception": "self.version",
 +                "illuminate/filesystem": "self.version",
 +                "illuminate/foundation": "self.version",
 +                "illuminate/hashing": "self.version",
 +                "illuminate/html": "self.version",
 +                "illuminate/http": "self.version",
 +                "illuminate/log": "self.version",
 +                "illuminate/mail": "self.version",
 +                "illuminate/pagination": "self.version",
 +                "illuminate/queue": "self.version",
 +                "illuminate/redis": "self.version",
 +                "illuminate/remote": "self.version",
 +                "illuminate/routing": "self.version",
 +                "illuminate/session": "self.version",
 +                "illuminate/support": "self.version",
 +                "illuminate/translation": "self.version",
 +                "illuminate/validation": "self.version",
 +                "illuminate/view": "self.version",
 +                "illuminate/workbench": "self.version"
 +            },
 +            "require-dev": {
 +                "aws/aws-sdk-php": "~2.6",
 +                "iron-io/iron_mq": "~1.5",
 +                "mockery/mockery": "~0.9",
 +                "pda/pheanstalk": "~2.1",
 +                "phpunit/phpunit": "~4.0"
 +            },
 +            "suggest": {
 +                "doctrine/dbal": "Allow renaming columns and dropping SQLite columns."
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "4.2-dev"
 +                }
 +            },
 +            "autoload": {
 +                "classmap": [
 +                    "src/Illuminate/Queue/IlluminateQueueClosure.php"
 +                ],
 +                "files": [
 +                    "src/Illuminate/Support/helpers.php"
 +                ],
 +                "psr-0": {
 +                    "Illuminate": "src/"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Taylor Otwell",
 +                    "email": "taylorotwell@gmail.com"
 +                }
 +            ],
 +            "description": "The Laravel Framework.",
 +            "keywords": [
 +                "framework",
 +                "laravel"
 +            ],
 +            "time": "2015-02-11 20:37:15"
 +        },
 +        {
 +            "name": "monolog/monolog",
 +            "version": "1.13.1",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/Seldaek/monolog.git",
 +                "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c31a2c4e8db5da8b46c74cf275d7f109c0f249ac",
 +                "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.0",
 +                "psr/log": "~1.0"
 +            },
 +            "provide": {
 +                "psr/log-implementation": "1.0.0"
 +            },
 +            "require-dev": {
 +                "aws/aws-sdk-php": "~2.4, >2.4.8",
 +                "doctrine/couchdb": "~1.0@dev",
 +                "graylog2/gelf-php": "~1.0",
 +                "phpunit/phpunit": "~4.0",
 +                "raven/raven": "~0.5",
 +                "ruflin/elastica": "0.90.*",
 +                "swiftmailer/swiftmailer": "~5.3",
 +                "videlalvaro/php-amqplib": "~2.4"
 +            },
 +            "suggest": {
 +                "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
 +                "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
 +                "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
 +                "ext-mongo": "Allow sending log messages to a MongoDB server",
 +                "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
 +                "raven/raven": "Allow sending log messages to a Sentry server",
 +                "rollbar/rollbar": "Allow sending log messages to Rollbar",
 +                "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
 +                "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib"
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "1.13.x-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-4": {
 +                    "Monolog\\": "src/Monolog"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Jordi Boggiano",
 +                    "email": "j.boggiano@seld.be",
 +                    "homepage": "http://seld.be"
 +                }
 +            ],
 +            "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
 +            "homepage": "http://github.com/Seldaek/monolog",
 +            "keywords": [
 +                "log",
 +                "logging",
 +                "psr-3"
 +            ],
 +            "time": "2015-03-09 09:58:04"
 +        },
 +        {
 +            "name": "nesbot/carbon",
 +            "version": "1.17.0",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/briannesbitt/Carbon.git",
 +                "reference": "a1dd1ad9abfc8b3c4d8768068e6c71d293424e86"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/a1dd1ad9abfc8b3c4d8768068e6c71d293424e86",
 +                "reference": "a1dd1ad9abfc8b3c4d8768068e6c71d293424e86",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.0"
 +            },
 +            "require-dev": {
 +                "phpunit/phpunit": "~4.0"
 +            },
 +            "type": "library",
 +            "autoload": {
 +                "psr-0": {
 +                    "Carbon": "src"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Brian Nesbitt",
 +                    "email": "brian@nesbot.com",
 +                    "homepage": "http://nesbot.com"
 +                }
 +            ],
 +            "description": "A simple API extension for DateTime.",
 +            "homepage": "http://carbon.nesbot.com",
 +            "keywords": [
 +                "date",
 +                "datetime",
 +                "time"
 +            ],
 +            "time": "2015-03-08 14:05:44"
 +        },
 +        {
 +            "name": "nikic/php-parser",
 +            "version": "v0.9.5",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/nikic/PHP-Parser.git",
 +                "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ef70767475434bdb3615b43c327e2cae17ef12eb",
 +                "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "ext-tokenizer": "*",
 +                "php": ">=5.2"
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "0.9-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "PHPParser": "lib/"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "BSD-3-Clause"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Nikita Popov"
 +                }
 +            ],
 +            "description": "A PHP parser written in PHP",
 +            "keywords": [
 +                "parser",
 +                "php"
 +            ],
 +            "time": "2014-07-23 18:24:17"
 +        },
 +        {
 +            "name": "patchwork/utf8",
 +            "version": "v1.2.2",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/tchwork/utf8.git",
 +                "reference": "7287a6fb2c46a66ac6bfbaf0e4975229b27efcba"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/tchwork/utf8/zipball/7287a6fb2c46a66ac6bfbaf0e4975229b27efcba",
 +                "reference": "7287a6fb2c46a66ac6bfbaf0e4975229b27efcba",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "lib-pcre": ">=7.3",
 +                "php": ">=5.3.0"
 +            },
 +            "suggest": {
 +                "ext-iconv": "Use iconv for best performance",
 +                "ext-intl": "Use Intl for best performance",
 +                "ext-mbstring": "Use Mbstring for best performance",
 +                "ext-wfio": "Use WFIO for UTF-8 filesystem access on Windows"
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "1.2-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Patchwork": "class/",
 +                    "Normalizer": "class/"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "(Apache-2.0 or GPL-2.0)"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Nicolas Grekas",
 +                    "email": "p@tchwork.com"
 +                }
 +            ],
 +            "description": "Portable and performant UTF-8, Unicode and Grapheme Clusters for PHP",
 +            "homepage": "https://github.com/tchwork/utf8",
 +            "keywords": [
 +                "grapheme",
 +                "i18n",
 +                "unicode",
 +                "utf-8",
 +                "utf8"
 +            ],
 +            "time": "2015-04-26 09:51:43"
 +        },
 +        {
 +            "name": "phpseclib/phpseclib",
 +            "version": "0.3.10",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/phpseclib/phpseclib.git",
 +                "reference": "d15bba1edcc7c89e09cc74c5d961317a8b947bf4"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/d15bba1edcc7c89e09cc74c5d961317a8b947bf4",
 +                "reference": "d15bba1edcc7c89e09cc74c5d961317a8b947bf4",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.0.0"
 +            },
 +            "require-dev": {
 +                "phing/phing": "~2.7",
 +                "phpunit/phpunit": "~4.0",
 +                "sami/sami": "~2.0",
 +                "squizlabs/php_codesniffer": "~1.5"
 +            },
 +            "suggest": {
 +                "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
 +                "ext-mcrypt": "Install the Mcrypt extension in order to speed up a wide variety of cryptographic operations.",
 +                "pear-pear/PHP_Compat": "Install PHP_Compat to get phpseclib working on PHP < 4.3.3."
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "0.3-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Crypt": "phpseclib/",
 +                    "File": "phpseclib/",
 +                    "Math": "phpseclib/",
 +                    "Net": "phpseclib/",
 +                    "System": "phpseclib/"
 +                },
 +                "files": [
 +                    "phpseclib/Crypt/Random.php"
 +                ]
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "include-path": [
 +                "phpseclib/"
 +            ],
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Jim Wigginton",
 +                    "email": "terrafrost@php.net",
 +                    "role": "Lead Developer"
 +                },
 +                {
 +                    "name": "Patrick Monnerat",
 +                    "email": "pm@datasphere.ch",
 +                    "role": "Developer"
 +                },
 +                {
 +                    "name": "Andreas Fischer",
 +                    "email": "bantu@phpbb.com",
 +                    "role": "Developer"
 +                },
 +                {
 +                    "name": "Hans-Jürgen Petrich",
 +                    "email": "petrich@tronic-media.com",
 +                    "role": "Developer"
 +                }
 +            ],
 +            "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
 +            "homepage": "http://phpseclib.sourceforge.net",
 +            "keywords": [
 +                "BigInteger",
 +                "aes",
 +                "asn.1",
 +                "asn1",
 +                "blowfish",
 +                "crypto",
 +                "cryptography",
 +                "encryption",
 +                "rsa",
 +                "security",
 +                "sftp",
 +                "signature",
 +                "signing",
 +                "ssh",
 +                "twofish",
 +                "x.509",
 +                "x509"
 +            ],
 +            "time": "2015-01-28 21:50:33"
 +        },
 +        {
 +            "name": "predis/predis",
 +            "version": "v0.8.7",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/nrk/predis.git",
 +                "reference": "4123fcd85d61354c6c9900db76c9597dbd129bf6"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/nrk/predis/zipball/4123fcd85d61354c6c9900db76c9597dbd129bf6",
 +                "reference": "4123fcd85d61354c6c9900db76c9597dbd129bf6",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.2"
 +            },
 +            "require-dev": {
 +                "phpunit/phpunit": "~4.0"
 +            },
 +            "suggest": {
 +                "ext-curl": "Allows access to Webdis when paired with phpiredis",
 +                "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol"
 +            },
 +            "type": "library",
 +            "autoload": {
 +                "psr-0": {
 +                    "Predis": "lib/"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Daniele Alessandri",
 +                    "email": "suppakilla@gmail.com",
 +                    "homepage": "http://clorophilla.net"
 +                }
 +            ],
 +            "description": "Flexible and feature-complete PHP client library for Redis",
 +            "homepage": "http://github.com/nrk/predis",
 +            "keywords": [
 +                "nosql",
 +                "predis",
 +                "redis"
 +            ],
 +            "time": "2014-08-01 09:43:10"
 +        },
 +        {
 +            "name": "psr/log",
 +            "version": "1.0.0",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/php-fig/log.git",
 +                "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b",
 +                "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
 +                "shasum": ""
 +            },
 +            "type": "library",
 +            "autoload": {
 +                "psr-0": {
 +                    "Psr\\Log\\": ""
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "PHP-FIG",
 +                    "homepage": "http://www.php-fig.org/"
 +                }
 +            ],
 +            "description": "Common interface for logging libraries",
 +            "keywords": [
 +                "log",
 +                "psr",
 +                "psr-3"
 +            ],
 +            "time": "2012-12-21 11:40:51"
 +        },
 +        {
 +            "name": "stack/builder",
 +            "version": "v1.0.3",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/stackphp/builder.git",
 +                "reference": "c1f8a4693b55c563405024f708a76ef576c3b276"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/stackphp/builder/zipball/c1f8a4693b55c563405024f708a76ef576c3b276",
 +                "reference": "c1f8a4693b55c563405024f708a76ef576c3b276",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.0",
 +                "symfony/http-foundation": "~2.1",
 +                "symfony/http-kernel": "~2.1"
 +            },
 +            "require-dev": {
 +                "silex/silex": "~1.0"
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "1.0-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Stack": "src"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Igor Wiedler",
 +                    "email": "igor@wiedler.ch"
 +                }
 +            ],
 +            "description": "Builder for stack middlewares based on HttpKernelInterface.",
 +            "keywords": [
 +                "stack"
 +            ],
 +            "time": "2014-11-23 20:37:11"
 +        },
 +        {
 +            "name": "swiftmailer/swiftmailer",
 +            "version": "v5.4.0",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/swiftmailer/swiftmailer.git",
 +                "reference": "31454f258f10329ae7c48763eb898a75c39e0a9f"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/31454f258f10329ae7c48763eb898a75c39e0a9f",
 +                "reference": "31454f258f10329ae7c48763eb898a75c39e0a9f",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.3"
 +            },
 +            "require-dev": {
 +                "mockery/mockery": "~0.9.1"
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "5.4-dev"
 +                }
 +            },
 +            "autoload": {
 +                "files": [
 +                    "lib/swift_required.php"
 +                ]
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Chris Corbyn"
 +                },
 +                {
 +                    "name": "Fabien Potencier",
 +                    "email": "fabien@symfony.com"
 +                }
 +            ],
 +            "description": "Swiftmailer, free feature-rich PHP mailer",
 +            "homepage": "http://swiftmailer.org",
 +            "keywords": [
 +                "mail",
 +                "mailer"
 +            ],
 +            "time": "2015-03-14 06:06:39"
 +        },
 +        {
 +            "name": "symfony/browser-kit",
 +            "version": "v2.5.11",
 +            "target-dir": "Symfony/Component/BrowserKit",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/symfony/BrowserKit.git",
 +                "reference": "b2b78b850a32251cbbd9915ab61453302e7ecd72"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/b2b78b850a32251cbbd9915ab61453302e7ecd72",
 +                "reference": "b2b78b850a32251cbbd9915ab61453302e7ecd72",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.3",
 +                "symfony/dom-crawler": "~2.0,>=2.0.5"
 +            },
 +            "require-dev": {
 +                "symfony/css-selector": "~2.0,>=2.0.5",
 +                "symfony/process": "~2.0,>=2.0.5"
 +            },
 +            "suggest": {
 +                "symfony/process": ""
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "2.5-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Symfony\\Component\\BrowserKit\\": ""
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Symfony Community",
 +                    "homepage": "http://symfony.com/contributors"
 +                },
 +                {
 +                    "name": "Fabien Potencier",
 +                    "email": "fabien@symfony.com"
 +                }
 +            ],
 +            "description": "Symfony BrowserKit Component",
 +            "homepage": "http://symfony.com",
 +            "time": "2015-01-03 08:01:13"
 +        },
 +        {
 +            "name": "symfony/console",
 +            "version": "v2.5.11",
 +            "target-dir": "Symfony/Component/Console",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/symfony/Console.git",
 +                "reference": "a43e750b4c74f3bdfca77c79c343033d35a6cd6e"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/symfony/Console/zipball/a43e750b4c74f3bdfca77c79c343033d35a6cd6e",
 +                "reference": "a43e750b4c74f3bdfca77c79c343033d35a6cd6e",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.3"
 +            },
 +            "require-dev": {
 +                "psr/log": "~1.0",
 +                "symfony/event-dispatcher": "~2.1"
 +            },
 +            "suggest": {
 +                "psr/log": "For using the console logger",
 +                "symfony/event-dispatcher": ""
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "2.5-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Symfony\\Component\\Console\\": ""
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Symfony Community",
 +                    "homepage": "http://symfony.com/contributors"
 +                },
 +                {
 +                    "name": "Fabien Potencier",
 +                    "email": "fabien@symfony.com"
 +                }
 +            ],
 +            "description": "Symfony Console Component",
 +            "homepage": "http://symfony.com",
 +            "time": "2015-02-08 07:07:45"
 +        },
 +        {
 +            "name": "symfony/css-selector",
 +            "version": "v2.5.11",
 +            "target-dir": "Symfony/Component/CssSelector",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/symfony/CssSelector.git",
 +                "reference": "d45b306421462295e76b94bcf76b963867450327"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/symfony/CssSelector/zipball/d45b306421462295e76b94bcf76b963867450327",
 +                "reference": "d45b306421462295e76b94bcf76b963867450327",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.3"
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "2.5-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Symfony\\Component\\CssSelector\\": ""
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Symfony Community",
 +                    "homepage": "http://symfony.com/contributors"
 +                },
 +                {
 +                    "name": "Jean-François Simon",
 +                    "email": "jeanfrancois.simon@sensiolabs.com"
 +                },
 +                {
 +                    "name": "Fabien Potencier",
 +                    "email": "fabien@symfony.com"
 +                }
 +            ],
 +            "description": "Symfony CssSelector Component",
 +            "homepage": "http://symfony.com",
 +            "time": "2015-01-03 08:01:13"
 +        },
 +        {
 +            "name": "symfony/debug",
 +            "version": "v2.5.11",
 +            "target-dir": "Symfony/Component/Debug",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/symfony/Debug.git",
 +                "reference": "ed3019589cdadf32c521d1e181f9d72955645c67"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/symfony/Debug/zipball/ed3019589cdadf32c521d1e181f9d72955645c67",
 +                "reference": "ed3019589cdadf32c521d1e181f9d72955645c67",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.3"
 +            },
 +            "conflict": {
 +                "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
 +            },
 +            "require-dev": {
 +                "symfony/class-loader": "~2.2",
 +                "symfony/http-foundation": "~2.1",
 +                "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2"
 +            },
 +            "suggest": {
 +                "symfony/http-foundation": "",
 +                "symfony/http-kernel": ""
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "2.5-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Symfony\\Component\\Debug\\": ""
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Symfony Community",
 +                    "homepage": "http://symfony.com/contributors"
 +                },
 +                {
 +                    "name": "Fabien Potencier",
 +                    "email": "fabien@symfony.com"
 +                }
 +            ],
 +            "description": "Symfony Debug Component",
 +            "homepage": "http://symfony.com",
 +            "time": "2015-01-16 14:51:58"
 +        },
 +        {
 +            "name": "symfony/dom-crawler",
 +            "version": "v2.5.11",
 +            "target-dir": "Symfony/Component/DomCrawler",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/symfony/DomCrawler.git",
 +                "reference": "3860edcf7ff7e173cfe2151f0d425e610e77cc35"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/3860edcf7ff7e173cfe2151f0d425e610e77cc35",
 +                "reference": "3860edcf7ff7e173cfe2151f0d425e610e77cc35",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.3"
 +            },
 +            "require-dev": {
 +                "symfony/css-selector": "~2.3"
 +            },
 +            "suggest": {
 +                "symfony/css-selector": ""
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "2.5-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Symfony\\Component\\DomCrawler\\": ""
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Symfony Community",
 +                    "homepage": "http://symfony.com/contributors"
 +                },
 +                {
 +                    "name": "Fabien Potencier",
 +                    "email": "fabien@symfony.com"
 +                }
 +            ],
 +            "description": "Symfony DomCrawler Component",
 +            "homepage": "http://symfony.com",
 +            "time": "2015-01-03 08:01:13"
 +        },
 +        {
 +            "name": "symfony/event-dispatcher",
 +            "version": "v2.6.6",
 +            "target-dir": "Symfony/Component/EventDispatcher",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/symfony/EventDispatcher.git",
 +                "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/70f7c8478739ad21e3deef0d977b38c77f1fb284",
 +                "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.3"
 +            },
 +            "require-dev": {
 +                "psr/log": "~1.0",
 +                "symfony/config": "~2.0,>=2.0.5",
 +                "symfony/dependency-injection": "~2.6",
 +                "symfony/expression-language": "~2.6",
 +                "symfony/phpunit-bridge": "~2.7",
 +                "symfony/stopwatch": "~2.3"
 +            },
 +            "suggest": {
 +                "symfony/dependency-injection": "",
 +                "symfony/http-kernel": ""
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "2.6-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Symfony\\Component\\EventDispatcher\\": ""
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Symfony Community",
 +                    "homepage": "http://symfony.com/contributors"
 +                },
 +                {
 +                    "name": "Fabien Potencier",
 +                    "email": "fabien@symfony.com"
 +                }
 +            ],
 +            "description": "Symfony EventDispatcher Component",
 +            "homepage": "http://symfony.com",
 +            "time": "2015-03-13 17:37:22"
 +        },
 +        {
 +            "name": "symfony/filesystem",
 +            "version": "v2.6.6",
 +            "target-dir": "Symfony/Component/Filesystem",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/symfony/Filesystem.git",
 +                "reference": "4983964b3693e4f13449cb3800c64a9112c301b4"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/symfony/Filesystem/zipball/4983964b3693e4f13449cb3800c64a9112c301b4",
 +                "reference": "4983964b3693e4f13449cb3800c64a9112c301b4",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.3"
 +            },
 +            "require-dev": {
 +                "symfony/phpunit-bridge": "~2.7"
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "2.6-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Symfony\\Component\\Filesystem\\": ""
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Symfony Community",
 +                    "homepage": "http://symfony.com/contributors"
 +                },
 +                {
 +                    "name": "Fabien Potencier",
 +                    "email": "fabien@symfony.com"
 +                }
 +            ],
 +            "description": "Symfony Filesystem Component",
 +            "homepage": "http://symfony.com",
 +            "time": "2015-03-22 16:55:57"
 +        },
 +        {
 +            "name": "symfony/finder",
 +            "version": "v2.5.11",
 +            "target-dir": "Symfony/Component/Finder",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/symfony/Finder.git",
 +                "reference": "e527ebf47ff912a45e148b7d0b107b80ec0b3cc2"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/symfony/Finder/zipball/e527ebf47ff912a45e148b7d0b107b80ec0b3cc2",
 +                "reference": "e527ebf47ff912a45e148b7d0b107b80ec0b3cc2",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.3"
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "2.5-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Symfony\\Component\\Finder\\": ""
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Symfony Community",
 +                    "homepage": "http://symfony.com/contributors"
 +                },
 +                {
 +                    "name": "Fabien Potencier",
 +                    "email": "fabien@symfony.com"
 +                }
 +            ],
 +            "description": "Symfony Finder Component",
 +            "homepage": "http://symfony.com",
 +            "time": "2015-01-03 08:01:13"
 +        },
 +        {
 +            "name": "symfony/http-foundation",
 +            "version": "v2.5.11",
 +            "target-dir": "Symfony/Component/HttpFoundation",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/symfony/HttpFoundation.git",
 +                "reference": "08e783861dd9579bac4092814bbfb0cae6666b65"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/08e783861dd9579bac4092814bbfb0cae6666b65",
 +                "reference": "08e783861dd9579bac4092814bbfb0cae6666b65",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.3"
 +            },
 +            "require-dev": {
 +                "symfony/expression-language": "~2.4"
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "2.5-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Symfony\\Component\\HttpFoundation\\": ""
 +                },
 +                "classmap": [
 +                    "Symfony/Component/HttpFoundation/Resources/stubs"
 +                ]
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Symfony Community",
 +                    "homepage": "http://symfony.com/contributors"
 +                },
 +                {
 +                    "name": "Fabien Potencier",
 +                    "email": "fabien@symfony.com"
 +                }
 +            ],
 +            "description": "Symfony HttpFoundation Component",
 +            "homepage": "http://symfony.com",
 +            "time": "2015-04-01 15:49:36"
 +        },
 +        {
 +            "name": "symfony/http-kernel",
 +            "version": "v2.5.11",
 +            "target-dir": "Symfony/Component/HttpKernel",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/symfony/HttpKernel.git",
 +                "reference": "7b1632cf2bdbc69c59a44942b70d5aae91034304"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/7b1632cf2bdbc69c59a44942b70d5aae91034304",
 +                "reference": "7b1632cf2bdbc69c59a44942b70d5aae91034304",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.3",
 +                "psr/log": "~1.0",
 +                "symfony/debug": "~2.5.9|~2.6,>=2.6.2",
 +                "symfony/event-dispatcher": "~2.5.9|~2.6,>=2.6.2",
 +                "symfony/http-foundation": "~2.5"
 +            },
 +            "require-dev": {
 +                "symfony/browser-kit": "~2.3",
 +                "symfony/class-loader": "~2.1",
 +                "symfony/config": "~2.0,>=2.0.5",
 +                "symfony/console": "~2.2",
 +                "symfony/css-selector": "~2.0,>=2.0.5",
 +                "symfony/dependency-injection": "~2.2",
 +                "symfony/dom-crawler": "~2.0,>=2.0.5",
 +                "symfony/expression-language": "~2.4",
 +                "symfony/finder": "~2.0,>=2.0.5",
 +                "symfony/process": "~2.0,>=2.0.5",
 +                "symfony/routing": "~2.2",
 +                "symfony/stopwatch": "~2.3",
 +                "symfony/templating": "~2.2"
 +            },
 +            "suggest": {
 +                "symfony/browser-kit": "",
 +                "symfony/class-loader": "",
 +                "symfony/config": "",
 +                "symfony/console": "",
 +                "symfony/dependency-injection": "",
 +                "symfony/finder": ""
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "2.5-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Symfony\\Component\\HttpKernel\\": ""
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Symfony Community",
 +                    "homepage": "http://symfony.com/contributors"
 +                },
 +                {
 +                    "name": "Fabien Potencier",
 +                    "email": "fabien@symfony.com"
 +                }
 +            ],
 +            "description": "Symfony HttpKernel Component",
 +            "homepage": "http://symfony.com",
 +            "time": "2015-04-01 16:01:45"
 +        },
 +        {
 +            "name": "symfony/process",
 +            "version": "v2.5.11",
 +            "target-dir": "Symfony/Component/Process",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/symfony/Process.git",
 +                "reference": "00a1308e8b5aec5eba7c8f1708426a78f929be8c"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/symfony/Process/zipball/00a1308e8b5aec5eba7c8f1708426a78f929be8c",
 +                "reference": "00a1308e8b5aec5eba7c8f1708426a78f929be8c",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.3"
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "2.5-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Symfony\\Component\\Process\\": ""
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Symfony Community",
 +                    "homepage": "http://symfony.com/contributors"
 +                },
 +                {
 +                    "name": "Fabien Potencier",
 +                    "email": "fabien@symfony.com"
 +                }
 +            ],
 +            "description": "Symfony Process Component",
 +            "homepage": "http://symfony.com",
 +            "time": "2015-02-08 07:07:45"
 +        },
 +        {
 +            "name": "symfony/routing",
 +            "version": "v2.5.11",
 +            "target-dir": "Symfony/Component/Routing",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/symfony/Routing.git",
 +                "reference": "46142c34ea830f47429df6e15faec3a33292d618"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/symfony/Routing/zipball/46142c34ea830f47429df6e15faec3a33292d618",
 +                "reference": "46142c34ea830f47429df6e15faec3a33292d618",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.3"
 +            },
 +            "require-dev": {
 +                "doctrine/annotations": "~1.0",
 +                "doctrine/common": "~2.2",
 +                "psr/log": "~1.0",
 +                "symfony/config": "~2.2",
 +                "symfony/expression-language": "~2.4",
 +                "symfony/http-foundation": "~2.3",
 +                "symfony/yaml": "~2.0,>=2.0.5"
 +            },
 +            "suggest": {
 +                "doctrine/annotations": "For using the annotation loader",
 +                "symfony/config": "For using the all-in-one router or any loader",
 +                "symfony/expression-language": "For using expression matching",
 +                "symfony/yaml": "For using the YAML loader"
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "2.5-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Symfony\\Component\\Routing\\": ""
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Symfony Community",
 +                    "homepage": "http://symfony.com/contributors"
 +                },
 +                {
 +                    "name": "Fabien Potencier",
 +                    "email": "fabien@symfony.com"
 +                }
 +            ],
 +            "description": "Symfony Routing Component",
 +            "homepage": "http://symfony.com",
 +            "keywords": [
 +                "router",
 +                "routing",
 +                "uri",
 +                "url"
 +            ],
 +            "time": "2015-02-08 07:07:45"
 +        },
 +        {
 +            "name": "symfony/security-core",
 +            "version": "v2.5.11",
 +            "target-dir": "Symfony/Component/Security/Core",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/symfony/security-core.git",
 +                "reference": "3a27d7b34ee62cb0fdf5ad970e7777912ef4722f"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/symfony/security-core/zipball/3a27d7b34ee62cb0fdf5ad970e7777912ef4722f",
 +                "reference": "3a27d7b34ee62cb0fdf5ad970e7777912ef4722f",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.3"
 +            },
 +            "require-dev": {
 +                "ircmaxell/password-compat": "1.0.*",
 +                "psr/log": "~1.0",
 +                "symfony/event-dispatcher": "~2.1",
 +                "symfony/expression-language": "~2.4",
 +                "symfony/http-foundation": "~2.4",
 +                "symfony/translation": "~2.0,>=2.0.5",
 +                "symfony/validator": "~2.5,>=2.5.5"
 +            },
 +            "suggest": {
 +                "ircmaxell/password-compat": "For using the BCrypt password encoder in PHP <5.5",
 +                "symfony/event-dispatcher": "",
 +                "symfony/expression-language": "For using the expression voter",
 +                "symfony/http-foundation": "",
 +                "symfony/validator": "For using the user password constraint"
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "2.5-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Symfony\\Component\\Security\\Core\\": ""
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Symfony Community",
 +                    "homepage": "http://symfony.com/contributors"
 +                },
 +                {
 +                    "name": "Fabien Potencier",
 +                    "email": "fabien@symfony.com"
 +                }
 +            ],
 +            "description": "Symfony Security Component - Core Library",
 +            "homepage": "http://symfony.com",
 +            "time": "2015-01-25 04:37:39"
 +        },
 +        {
 +            "name": "symfony/translation",
 +            "version": "v2.5.11",
 +            "target-dir": "Symfony/Component/Translation",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/symfony/Translation.git",
 +                "reference": "165b5348cd20f8c4b2fcf1097c9c8300d1093b90"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/symfony/Translation/zipball/165b5348cd20f8c4b2fcf1097c9c8300d1093b90",
 +                "reference": "165b5348cd20f8c4b2fcf1097c9c8300d1093b90",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=5.3.3"
 +            },
 +            "require-dev": {
 +                "symfony/config": "~2.3,>=2.3.12",
 +                "symfony/intl": "~2.3",
 +                "symfony/yaml": "~2.2"
 +            },
 +            "suggest": {
 +                "symfony/config": "",
 +                "symfony/yaml": ""
 +            },
 +            "type": "library",
 +            "extra": {
 +                "branch-alias": {
 +                    "dev-master": "2.5-dev"
 +                }
 +            },
 +            "autoload": {
 +                "psr-0": {
 +                    "Symfony\\Component\\Translation\\": ""
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Symfony Community",
 +                    "homepage": "http://symfony.com/contributors"
 +                },
 +                {
 +                    "name": "Fabien Potencier",
 +                    "email": "fabien@symfony.com"
 +                }
 +            ],
 +            "description": "Symfony Translation Component",
 +            "homepage": "http://symfony.com",
 +            "time": "2015-01-03 15:23:51"
 +        }
 +    ],
 +    "packages-dev": [],
 +    "aliases": [],
 +    "minimum-stability": "stable",
 +    "stability-flags": {
 +        "apache/thrift": 20
 +    },
 +    "prefer-stable": false,
 +    "prefer-lowest": false,
 +    "platform": [],
 +    "platform-dev": []
 +}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/71079c5f/vendor/apache/thrift
----------------------------------------------------------------------
diff --cc vendor/apache/thrift
index dc799ca,0000000..1e723d9
mode 160000,000000..160000
--- a/vendor/apache/thrift
+++ b/vendor/apache/thrift
@@@ -1,1 -1,0 +1,1 @@@
- Subproject commit dc799ca078627a8e400cfcdbb965acf6abf86eef
++Subproject commit 1e723d931e92652e4ccb1385709258759ae5bc54


[51/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
AIRAVATA 1632 + Job Description for Admin Dashboard


Project: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/commit/01413d65
Tree: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/tree/01413d65
Diff: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/diff/01413d65

Branch: refs/heads/master
Commit: 01413d650d06be0c30f38e15b43ff2ab98e3435b
Parents: 
Author: nipunhere <ni...@gmail.com>
Authored: Tue Apr 28 16:46:09 2015 -0400
Committer: nipunhere <ni...@gmail.com>
Committed: Tue Apr 28 16:46:09 2015 -0400

----------------------------------------------------------------------
 app/config/app.php                              |   194 +
 app/config/app_config.ini                       |    91 +
 app/config/app_config.ini.template              |    74 +
 app/config/auth.php                             |    71 +
 app/config/cache.php                            |    89 +
 app/config/compile.php                          |    18 +
 app/config/database.php                         |   124 +
 app/config/local/app.php                        |    18 +
 app/config/local/database.php                   |    47 +
 app/config/mail.php                             |   124 +
 app/config/queue.php                            |    85 +
 app/config/remote.php                           |    59 +
 app/config/services.php                         |    31 +
 app/config/session.php                          |   140 +
 app/config/testing/cache.php                    |    20 +
 app/config/testing/session.php                  |    21 +
 app/config/view.php                             |    31 +
 app/config/workbench.php                        |    31 +
 app/controllers/AccountController.php           |   109 +
 app/controllers/AdminController.php             |   127 +
 app/controllers/ApplicationController.php       |   141 +
 app/controllers/BaseController.php              |    18 +
 app/controllers/ComputeResource.php             |   238 +
 app/controllers/ExperimentController.php        |   232 +
 app/controllers/GatewayprofileController.php    |    79 +
 app/controllers/HomeController.php              |    25 +
 app/controllers/ProjectController.php           |    86 +
 app/database/production.sqlite                  |     0
 app/database/seeds/DatabaseSeeder.php           |    17 +
 app/filters.php                                 |   115 +
 app/lang/en/pagination.php                      |    20 +
 app/lang/en/reminders.php                       |    24 +
 app/lang/en/validation.php                      |   104 +
 app/libraries/Airavata/API/Airavata.php         | 34207 +++++++++++++++++
 app/libraries/Airavata/API/Error/Types.php      |   944 +
 app/libraries/Airavata/API/Types.php            |    22 +
 app/libraries/Airavata/API/Workflow.php         |  1927 +
 app/libraries/Airavata/API/Workflow/Types.php   |    22 +
 .../Airavata/API/Workflow/Workflow.php          |  1927 +
 .../Model/AppCatalog/AppDeployment/Types.php    |   713 +
 .../Model/AppCatalog/AppInterface/Types.php     |   797 +
 .../Model/AppCatalog/ComputeResource/Types.php  |  2312 ++
 .../Model/AppCatalog/GatewayProfile/Types.php   |   352 +
 .../Airavata/Model/AppCatalog/Types.php         |  1636 +
 .../Airavata/Model/Messaging/Event/Types.php    |  1680 +
 app/libraries/Airavata/Model/Types.php          |   250 +
 .../Model/Workspace/Experiment/Types.php        |  4374 +++
 .../Airavata/Model/Workspace/Types.php          |   608 +
 app/libraries/AiravataClientFactory.php         |    47 +
 app/libraries/AppUtilities.php                  |   230 +
 app/libraries/CRUtilities.php                   |   459 +
 app/libraries/ExpUtilities.php                  |   996 +
 .../UserStoreManager/TenantManager.php          |   138 +
 .../UserStoreManager/TenantMgtAdmin.stub.php    |   304 +
 .../UserStoreManager/UserStoreManager.php       |   202 +
 .../UserStoreManager/UserStoreManager.stub.php  |  1568 +
 app/libraries/WSISClient.php                    |   282 +
 app/libraries/id_utilities.php                  |   172 +
 app/libraries/userapi_config.ini                |    14 +
 app/libraries/userapi_utilities.php             |   394 +
 app/libraries/utilities.php                     |  2111 +
 app/libraries/wsis_config.ini                   |    27 +
 app/libraries/wsis_utilities.php                |   364 +
 app/libraries/xml_id_utilities.php              |   252 +
 app/models/Constant.php                         |    48 +
 app/models/User.php                             |    25 +
 .../assets/PoweredbyAiravata_Small.png          |   Bin 0 -> 44775 bytes
 app/resources/assets/favicon.ico                |   Bin 0 -> 58580 bytes
 app/resources/assets/scigap-header-logo.png     |   Bin 0 -> 8152 bytes
 app/resources/oa4mp/oauth-properties.ini        |    15 +
 app/resources/security/idp_scigap_org.pem       |    83 +
 app/routes.php                                  |   193 +
 app/start/artisan.php                           |    13 +
 app/start/global.php                            |    82 +
 app/start/local.php                             |     3 +
 app/storage/.gitignore                          |     1 +
 app/storage/cache/.gitignore                    |     2 +
 app/storage/logs/.gitignore                     |     2 +
 app/storage/meta/.gitignore                     |     2 +
 app/storage/sessions/.gitignore                 |     2 +
 app/storage/views/.gitignore                    |     2 +
 app/tests/ExampleTest.php                       |    17 +
 app/tests/TestCase.php                          |    19 +
 app/views/account/create.blade.php              |   121 +
 app/views/account/forgot-password.blade.php     |    18 +
 app/views/account/login.blade.php               |    44 +
 app/views/admin/dashboard.blade.php             |   115 +
 app/views/admin/manage-admin.blade.php          |   196 +
 app/views/admin/manage-credentials.blade.php    |   164 +
 app/views/admin/manage-experiments.blade.php    |   169 +
 app/views/admin/manage-gateway.blade.php        |   228 +
 app/views/admin/manage-roles.blade.php          |   138 +
 app/views/admin/manage-users.blade.php          |   144 +
 app/views/application/deployment.blade.php      |   180 +
 app/views/application/interface.blade.php       |   165 +
 app/views/application/module.blade.php          |   189 +
 app/views/emails/auth/reminder.blade.php        |    14 +
 app/views/experiment/create-complete.blade.php  |    70 +
 app/views/experiment/create.blade.php           |    55 +
 app/views/experiment/edit.blade.php             |    77 +
 app/views/experiment/search.blade.php           |   265 +
 app/views/experiment/summary.blade.php          |    31 +
 app/views/gateway/browse.blade.php              |   218 +
 app/views/gateway/create.blade.php              |    34 +
 app/views/home.blade.php                        |   180 +
 app/views/layout/basic.blade.php                |   102 +
 app/views/partials/dashboard-block.blade.php    |    50 +
 app/views/partials/deployment-block.blade.php   |   125 +
 app/views/partials/experiment-info.blade.php    |   136 +
 app/views/partials/experiment-inputs.blade.php  |   111 +
 .../partials/gateway-preferences.blade.php      |    67 +
 app/views/partials/interface-block.blade.php    |    49 +
 .../partials/interface-input-block.blade.php    |    95 +
 .../partials/interface-output-block.blade.php   |    80 +
 app/views/partials/module-block.blade.php       |    16 +
 app/views/partials/queue-block.blade.php        |    24 +
 app/views/project/create.blade.php              |    42 +
 app/views/project/edit.blade.php                |    50 +
 app/views/project/search.blade.php              |   103 +
 app/views/project/summary.blade.php             |   121 +
 app/views/resource/browse.blade.php             |   132 +
 app/views/resource/create-step3.blade.php       |    32 +
 app/views/resource/create.blade.php             |    44 +
 app/views/resource/edit.blade.php               |   730 +
 app/views/resource/view.blade.php               |     0
 app/views/server-down.blade.php                 |    16 +
 artisan                                         |    74 +
 bootstrap/autoload.php                          |    75 +
 bootstrap/paths.php                             |    57 +
 bootstrap/start.php                             |    73 +
 composer.json                                   |    36 +
 composer.lock                                   |  1701 +
 phpunit.xml                                     |    18 +
 public/.htaccess                                |    15 +
 public/assets/PoweredbyAiravata_Small.png       |   Bin 0 -> 44775 bytes
 public/assets/ajax-loader.gif                   |   Bin 0 -> 3208 bytes
 public/assets/favicon.ico                       |   Bin 0 -> 58580 bytes
 public/assets/scigap-header-logo.png            |   Bin 0 -> 8152 bytes
 public/css/admin.css                            |   307 +
 public/css/bootstrap.min.css                    |    57 +
 public/css/datetimepicker.css                   |     5 +
 public/css/style.css                            |     0
 public/favicon.ico                              |     0
 public/fonts/glyphicons-halflings-regular.eot   |   Bin 0 -> 20290 bytes
 public/fonts/glyphicons-halflings-regular.svg   |   229 +
 public/fonts/glyphicons-halflings-regular.ttf   |   Bin 0 -> 41236 bytes
 public/fonts/glyphicons-halflings-regular.woff  |   Bin 0 -> 23292 bytes
 public/index.php                                |    55 +
 public/js/datetimepicker.js                     |     1 +
 public/js/deployment.js                         |    86 +
 public/js/gateway.js                            |    66 +
 public/js/interface.js                          |   135 +
 public/js/moment.js                             |  2936 ++
 public/js/script.js                             |   323 +
 public/robots.txt                               |     2 +
 server.php                                      |    19 +
 vendor/apache/thrift                            |     1 +
 vendor/autoload.php                             |     7 +
 vendor/bin/boris                                |     1 +
 vendor/bin/classpreloader.php                   |     1 +
 vendor/classpreloader/classpreloader/.gitignore |     2 +
 vendor/classpreloader/classpreloader/LICENSE.md |    19 +
 vendor/classpreloader/classpreloader/README.md  |   108 +
 .../classpreloader/classpreloader.php           |    10 +
 .../classpreloader/classpreloader/composer.json |    28 +
 .../src/ClassPreloader/Application.php          |    33 +
 .../src/ClassPreloader/ClassList.php            |    87 +
 .../src/ClassPreloader/ClassLoader.php          |   110 +
 .../src/ClassPreloader/ClassNode.php            |    36 +
 .../Command/PreCompileCommand.php               |   216 +
 .../src/ClassPreloader/Config.php               |   133 +
 .../Parser/AbstractNodeVisitor.php              |    48 +
 .../src/ClassPreloader/Parser/DirVisitor.php    |    16 +
 .../src/ClassPreloader/Parser/FileVisitor.php   |    16 +
 .../src/ClassPreloader/Parser/NodeTraverser.php |    21 +
 vendor/composer/ClassLoader.php                 |   413 +
 vendor/composer/autoload_classmap.php           |  2121 +
 vendor/composer/autoload_files.php              |    13 +
 vendor/composer/autoload_namespaces.php         |    41 +
 vendor/composer/autoload_psr4.php               |    10 +
 vendor/composer/autoload_real.php               |    59 +
 vendor/composer/include_paths.php               |    10 +
 vendor/composer/installed.json                  |  1743 +
 vendor/d11wtq/boris/.gitignore                  |     4 +
 vendor/d11wtq/boris/CONTRIBUTING.md             |    14 +
 vendor/d11wtq/boris/LICENSE                     |    20 +
 vendor/d11wtq/boris/README.md                   |    63 +
 vendor/d11wtq/boris/bin/boris                   |    18 +
 vendor/d11wtq/boris/box.json                    |    14 +
 vendor/d11wtq/boris/composer.json               |    17 +
 vendor/d11wtq/boris/lib/Boris/Boris.php         |   178 +
 .../boris/lib/Boris/CLIOptionsHandler.php       |    92 +
 .../d11wtq/boris/lib/Boris/ColoredInspector.php |   241 +
 vendor/d11wtq/boris/lib/Boris/Config.php        |    88 +
 vendor/d11wtq/boris/lib/Boris/DumpInspector.php |    16 +
 vendor/d11wtq/boris/lib/Boris/EvalWorker.php    |   275 +
 .../d11wtq/boris/lib/Boris/ExportInspector.php  |    14 +
 vendor/d11wtq/boris/lib/Boris/Inspector.php     |    18 +
 .../d11wtq/boris/lib/Boris/ReadlineClient.php   |   106 +
 vendor/d11wtq/boris/lib/Boris/ShallowParser.php |   258 +
 vendor/d11wtq/boris/lib/autoload.php            |    17 +
 vendor/d11wtq/boris/release.php                 |   150 +
 vendor/filp/whoops/LICENSE.md                   |    19 +
 vendor/filp/whoops/composer.json                |    33 +
 .../src/Whoops/Exception/ErrorException.php     |    17 +
 .../whoops/src/Whoops/Exception/Formatter.php   |    74 +
 .../filp/whoops/src/Whoops/Exception/Frame.php  |   269 +
 .../src/Whoops/Exception/FrameCollection.php    |   191 +
 .../whoops/src/Whoops/Exception/Inspector.php   |   161 +
 .../src/Whoops/Handler/CallbackHandler.php      |    52 +
 .../filp/whoops/src/Whoops/Handler/Handler.php  |    89 +
 .../src/Whoops/Handler/HandlerInterface.php     |    37 +
 .../src/Whoops/Handler/JsonResponseHandler.php  |    90 +
 .../src/Whoops/Handler/PlainTextHandler.php     |   331 +
 .../src/Whoops/Handler/PrettyPageHandler.php    |   468 +
 .../src/Whoops/Handler/SoapResponseHandler.php  |    49 +
 .../src/Whoops/Handler/XmlResponseHandler.php   |    99 +
 .../Provider/Phalcon/WhoopsServiceProvider.php  |    78 +
 .../Provider/Silex/WhoopsServiceProvider.php    |   111 +
 .../src/Whoops/Resources/css/whoops.base.css    |   423 +
 .../src/Whoops/Resources/js/whoops.base.js      |    79 +
 .../whoops/src/Whoops/Resources/js/zepto.min.js |     2 +
 .../Whoops/Resources/views/env_details.html.php |    39 +
 .../Whoops/Resources/views/frame_code.html.php  |    52 +
 .../Whoops/Resources/views/frame_list.html.php  |    17 +
 .../src/Whoops/Resources/views/header.html.php  |    34 +
 .../src/Whoops/Resources/views/layout.html.php  |    37 +
 vendor/filp/whoops/src/Whoops/Run.php           |   408 +
 vendor/filp/whoops/src/Whoops/Util/Misc.php     |    44 +
 .../whoops/src/Whoops/Util/TemplateHelper.php   |   154 +
 .../src/deprecated/Zend/ExceptionStrategy.php   |    63 +
 .../filp/whoops/src/deprecated/Zend/Module.php  |   107 +
 .../deprecated/Zend/RouteNotFoundStrategy.php   |    67 +
 .../deprecated/Zend/module.config.example.php   |    20 +
 vendor/ircmaxell/password-compat/LICENSE.md     |     7 +
 vendor/ircmaxell/password-compat/composer.json  |    20 +
 .../ircmaxell/password-compat/lib/password.php  |   314 +
 .../ircmaxell/password-compat/version-test.php  |     6 +
 vendor/jeremeamia/SuperClosure/.gitignore       |     8 +
 vendor/jeremeamia/SuperClosure/.travis.yml      |    20 +
 vendor/jeremeamia/SuperClosure/LICENSE.md       |    18 +
 vendor/jeremeamia/SuperClosure/README.md        |   124 +
 vendor/jeremeamia/SuperClosure/composer.json    |    23 +
 .../jeremeamia/SuperClosure/demo/factorial.php  |    23 +
 .../SuperClosure/demo/hello-world.php           |    23 +
 vendor/jeremeamia/SuperClosure/phpunit.xml.dist |    34 +
 .../Jeremeamia/SuperClosure/ClosureLocation.php |    77 +
 .../Jeremeamia/SuperClosure/ClosureParser.php   |   195 +
 .../SuperClosure/SerializableClosure.php        |   114 +
 .../Visitor/ClosureFinderVisitor.php            |   109 +
 .../Visitor/MagicConstantVisitor.php            |    50 +
 .../SuperClosure/Test/ClosureLocationTest.php   |    33 +
 .../SuperClosure/Test/ClosureParserTest.php     |   115 +
 .../Test/SerializableClosureTest.php            |   115 +
 .../Test/Visitor/ClosureFinderVisitorTest.php   |    57 +
 .../Test/Visitor/MagicConstantVisitorTest.php   |    54 +
 .../jeremeamia/SuperClosure/tests/bootstrap.php |     4 +
 vendor/laravel/framework/.gitattributes         |     2 +
 vendor/laravel/framework/.gitignore             |     5 +
 vendor/laravel/framework/.scrutinizer.yml       |    55 +
 vendor/laravel/framework/.travis.yml            |    13 +
 vendor/laravel/framework/CONTRIBUTING.md        |     3 +
 vendor/laravel/framework/LICENSE.txt            |    21 +
 vendor/laravel/framework/composer.json          |    96 +
 vendor/laravel/framework/phpunit.php            |    30 +
 vendor/laravel/framework/phpunit.xml            |    30 +
 vendor/laravel/framework/readme.md              |    27 +
 .../src/Illuminate/Auth/AuthManager.php         |   116 +
 .../src/Illuminate/Auth/AuthServiceProvider.php |    42 +
 .../Auth/Console/ClearRemindersCommand.php      |    33 +
 .../Auth/Console/RemindersControllerCommand.php |    93 +
 .../Auth/Console/RemindersTableCommand.php      |    94 +
 .../Auth/Console/stubs/controller.stub          |    75 +
 .../Auth/Console/stubs/reminders.stub           |    33 +
 .../Illuminate/Auth/DatabaseUserProvider.php    |   140 +
 .../Illuminate/Auth/EloquentUserProvider.php    |   123 +
 .../src/Illuminate/Auth/GenericUser.php         |   119 +
 .../framework/src/Illuminate/Auth/Guard.php     |   752 +
 .../Reminders/DatabaseReminderRepository.php    |   195 +
 .../Auth/Reminders/PasswordBroker.php           |   282 +
 .../Auth/Reminders/RemindableInterface.php      |    12 +
 .../Auth/Reminders/RemindableTrait.php          |    15 +
 .../Reminders/ReminderRepositoryInterface.php   |    37 +
 .../Auth/Reminders/ReminderServiceProvider.php  |   122 +
 .../src/Illuminate/Auth/UserInterface.php       |    41 +
 .../Illuminate/Auth/UserProviderInterface.php   |    48 +
 .../framework/src/Illuminate/Auth/UserTrait.php |    56 +
 .../framework/src/Illuminate/Auth/composer.json |    35 +
 .../framework/src/Illuminate/Cache/ApcStore.php |   128 +
 .../src/Illuminate/Cache/ApcWrapper.php         |    91 +
 .../src/Illuminate/Cache/ArrayStore.php         |   108 +
 .../src/Illuminate/Cache/CacheManager.php       |   182 +
 .../Illuminate/Cache/CacheServiceProvider.php   |    71 +
 .../Cache/Console/CacheTableCommand.php         |    72 +
 .../Illuminate/Cache/Console/ClearCommand.php   |    70 +
 .../Illuminate/Cache/Console/stubs/cache.stub   |    33 +
 .../src/Illuminate/Cache/DatabaseStore.php      |   223 +
 .../src/Illuminate/Cache/FileStore.php          |   257 +
 .../src/Illuminate/Cache/MemcachedConnector.php |    47 +
 .../src/Illuminate/Cache/MemcachedStore.php     |   138 +
 .../src/Illuminate/Cache/NullStore.php          |   103 +
 .../src/Illuminate/Cache/RedisStore.php         |   185 +
 .../src/Illuminate/Cache/RedisTaggedCache.php   |    90 +
 .../src/Illuminate/Cache/Repository.php         |   284 +
 .../src/Illuminate/Cache/StoreInterface.php     |    72 +
 .../framework/src/Illuminate/Cache/TagSet.php   |    97 +
 .../src/Illuminate/Cache/TaggableStore.php      |    27 +
 .../src/Illuminate/Cache/TaggedCache.php        |   244 +
 .../src/Illuminate/Cache/WinCacheStore.php      |   119 +
 .../src/Illuminate/Cache/XCacheStore.php        |   119 +
 .../src/Illuminate/Cache/composer.json          |    31 +
 .../Illuminate/Config/EnvironmentVariables.php  |    45 +
 .../EnvironmentVariablesLoaderInterface.php     |    13 +
 .../Config/FileEnvironmentVariablesLoader.php   |    68 +
 .../src/Illuminate/Config/FileLoader.php        |   259 +
 .../src/Illuminate/Config/LoaderInterface.php   |    52 +
 .../src/Illuminate/Config/Repository.php        |   415 +
 .../src/Illuminate/Config/composer.json         |    25 +
 .../src/Illuminate/Console/Application.php      |   243 +
 .../src/Illuminate/Console/Command.php          |   384 +
 .../src/Illuminate/Console/ConfirmableTrait.php |    50 +
 .../src/Illuminate/Console/composer.json        |    26 +
 .../Container/BindingResolutionException.php    |     3 +
 .../src/Illuminate/Container/Container.php      |   866 +
 .../src/Illuminate/Container/composer.json      |    25 +
 .../src/Illuminate/Cookie/CookieJar.php         |   167 +
 .../Illuminate/Cookie/CookieServiceProvider.php |    22 +
 .../framework/src/Illuminate/Cookie/Guard.php   |   141 +
 .../framework/src/Illuminate/Cookie/Queue.php   |    57 +
 .../src/Illuminate/Cookie/composer.json         |    29 +
 .../src/Illuminate/Database/Capsule/Manager.php |   227 +
 .../src/Illuminate/Database/Connection.php      |  1173 +
 .../Illuminate/Database/ConnectionInterface.php |   148 +
 .../Illuminate/Database/ConnectionResolver.php  |    90 +
 .../Database/ConnectionResolverInterface.php    |    28 +
 .../Database/Connectors/ConnectionFactory.php   |   230 +
 .../Database/Connectors/Connector.php           |    71 +
 .../Database/Connectors/ConnectorInterface.php  |    13 +
 .../Database/Connectors/MySqlConnector.php      |   101 +
 .../Database/Connectors/PostgresConnector.php   |    86 +
 .../Database/Connectors/SQLiteConnector.php     |    38 +
 .../Database/Connectors/SqlServerConnector.php  |    69 +
 .../Database/Console/Migrations/BaseCommand.php |    49 +
 .../Console/Migrations/InstallCommand.php       |    69 +
 .../Console/Migrations/MigrateCommand.php       |   130 +
 .../Console/Migrations/MigrateMakeCommand.php   |   127 +
 .../Console/Migrations/RefreshCommand.php       |    96 +
 .../Console/Migrations/ResetCommand.php         |    91 +
 .../Console/Migrations/RollbackCommand.php      |    86 +
 .../Illuminate/Database/Console/SeedCommand.php |   100 +
 .../src/Illuminate/Database/DatabaseManager.php |   324 +
 .../Database/DatabaseServiceProvider.php        |    45 +
 .../Illuminate/Database/Eloquent/Builder.php    |   987 +
 .../Illuminate/Database/Eloquent/Collection.php |   253 +
 .../Eloquent/MassAssignmentException.php        |     3 +
 .../src/Illuminate/Database/Eloquent/Model.php  |  3148 ++
 .../Eloquent/ModelNotFoundException.php         |    37 +
 .../Database/Eloquent/Relations/BelongsTo.php   |   275 +
 .../Eloquent/Relations/BelongsToMany.php        |  1055 +
 .../Database/Eloquent/Relations/HasMany.php     |    47 +
 .../Eloquent/Relations/HasManyThrough.php       |   263 +
 .../Database/Eloquent/Relations/HasOne.php      |    47 +
 .../Eloquent/Relations/HasOneOrMany.php         |   291 +
 .../Database/Eloquent/Relations/MorphMany.php   |    47 +
 .../Database/Eloquent/Relations/MorphOne.php    |    47 +
 .../Eloquent/Relations/MorphOneOrMany.php       |   159 +
 .../Database/Eloquent/Relations/MorphPivot.php  |    79 +
 .../Database/Eloquent/Relations/MorphTo.php     |   246 +
 .../Database/Eloquent/Relations/MorphToMany.php |   158 +
 .../Database/Eloquent/Relations/Pivot.php       |   171 +
 .../Database/Eloquent/Relations/Relation.php    |   288 +
 .../Database/Eloquent/ScopeInterface.php        |    21 +
 .../Database/Eloquent/SoftDeletingScope.php     |   170 +
 .../Database/Eloquent/SoftDeletingTrait.php     |   170 +
 .../src/Illuminate/Database/Grammar.php         |   179 +
 .../Database/MigrationServiceProvider.php       |   217 +
 .../Migrations/DatabaseMigrationRepository.php  |   181 +
 .../Database/Migrations/Migration.php           |    22 +
 .../Database/Migrations/MigrationCreator.php    |   183 +
 .../Migrations/MigrationRepositoryInterface.php |    65 +
 .../Illuminate/Database/Migrations/Migrator.php |   384 +
 .../Database/Migrations/stubs/blank.stub        |    28 +
 .../Database/Migrations/stubs/create.stub       |    32 +
 .../Database/Migrations/stubs/update.stub       |    34 +
 .../src/Illuminate/Database/MySqlConnection.php |    62 +
 .../Illuminate/Database/PostgresConnection.php  |    50 +
 .../src/Illuminate/Database/Query/Builder.php   |  2187 ++
 .../Illuminate/Database/Query/Expression.php    |    43 +
 .../Database/Query/Grammars/Grammar.php         |   759 +
 .../Database/Query/Grammars/MySqlGrammar.php    |   130 +
 .../Database/Query/Grammars/PostgresGrammar.php |   174 +
 .../Database/Query/Grammars/SQLiteGrammar.php   |   130 +
 .../Query/Grammars/SqlServerGrammar.php         |   224 +
 .../Illuminate/Database/Query/JoinClause.php    |   117 +
 .../Query/Processors/MySqlProcessor.php         |    16 +
 .../Query/Processors/PostgresProcessor.php      |    40 +
 .../Database/Query/Processors/Processor.php     |    48 +
 .../Query/Processors/SQLiteProcessor.php        |    16 +
 .../Query/Processors/SqlServerProcessor.php     |    36 +
 .../src/Illuminate/Database/QueryException.php  |    78 +
 .../framework/src/Illuminate/Database/README.md |    71 +
 .../Illuminate/Database/SQLiteConnection.php    |    49 +
 .../Illuminate/Database/Schema/Blueprint.php    |   837 +
 .../src/Illuminate/Database/Schema/Builder.php  |   223 +
 .../Database/Schema/Grammars/Grammar.php        |   270 +
 .../Database/Schema/Grammars/MySqlGrammar.php   |   595 +
 .../Schema/Grammars/PostgresGrammar.php         |   489 +
 .../Database/Schema/Grammars/SQLiteGrammar.php  |   553 +
 .../Schema/Grammars/SqlServerGrammar.php        |   483 +
 .../Illuminate/Database/Schema/MySqlBuilder.php |    41 +
 .../Illuminate/Database/SeedServiceProvider.php |    55 +
 .../src/Illuminate/Database/Seeder.php          |    98 +
 .../Illuminate/Database/SqlServerConnection.php |    91 +
 .../src/Illuminate/Database/composer.json       |    36 +
 .../Illuminate/Encryption/DecryptException.php  |     3 +
 .../src/Illuminate/Encryption/Encrypter.php     |   308 +
 .../Encryption/EncryptionServiceProvider.php    |    27 +
 .../Encryption/InvalidKeyException.php          |     3 +
 .../src/Illuminate/Encryption/composer.json     |    27 +
 .../src/Illuminate/Events/Dispatcher.php        |   351 +
 .../Illuminate/Events/EventServiceProvider.php  |    20 +
 .../src/Illuminate/Events/composer.json         |    27 +
 .../Exception/ExceptionDisplayerInterface.php   |    14 +
 .../Exception/ExceptionServiceProvider.php      |   162 +
 .../src/Illuminate/Exception/Handler.php        |   385 +
 .../src/Illuminate/Exception/PlainDisplayer.php |    24 +
 .../Illuminate/Exception/SymfonyDisplayer.php   |    56 +
 .../Illuminate/Exception/WhoopsDisplayer.php    |    52 +
 .../src/Illuminate/Exception/composer.json      |    33 +
 .../Illuminate/Exception/resources/plain.html   |    71 +
 .../Filesystem/FileNotFoundException.php        |     3 +
 .../src/Illuminate/Filesystem/Filesystem.php    |   412 +
 .../Filesystem/FilesystemServiceProvider.php    |    17 +
 .../src/Illuminate/Filesystem/composer.json     |    27 +
 .../src/Illuminate/Foundation/AliasLoader.php   |   158 +
 .../src/Illuminate/Foundation/Application.php   |  1141 +
 .../src/Illuminate/Foundation/Artisan.php       |    60 +
 .../Illuminate/Foundation/AssetPublisher.php    |    94 +
 .../src/Illuminate/Foundation/Composer.php      |    98 +
 .../Illuminate/Foundation/ConfigPublisher.php   |   144 +
 .../Foundation/Console/AssetPublishCommand.php  |   170 +
 .../Foundation/Console/AutoloadCommand.php      |    91 +
 .../Foundation/Console/ChangesCommand.php       |   112 +
 .../Foundation/Console/ClearCompiledCommand.php |    39 +
 .../Foundation/Console/CommandMakeCommand.php   |   156 +
 .../Foundation/Console/ConfigPublishCommand.php |   116 +
 .../Foundation/Console/DownCommand.php          |    33 +
 .../Foundation/Console/EnvironmentCommand.php   |    31 +
 .../Foundation/Console/KeyGenerateCommand.php   |    80 +
 .../Console/MigratePublishCommand.php           |    63 +
 .../Foundation/Console/Optimize/config.php      |   120 +
 .../Foundation/Console/OptimizeCommand.php      |   163 +
 .../Foundation/Console/RoutesCommand.php        |   217 +
 .../Foundation/Console/ServeCommand.php         |    73 +
 .../Foundation/Console/TailCommand.php          |   165 +
 .../Foundation/Console/TinkerCommand.php        |   125 +
 .../Illuminate/Foundation/Console/UpCommand.php |    33 +
 .../Foundation/Console/ViewPublishCommand.php   |   104 +
 .../Foundation/Console/stubs/command.stub       |    67 +
 .../Foundation/EnvironmentDetector.php          |    99 +
 .../Foundation/MigrationPublisher.php           |   131 +
 .../Foundation/ProviderRepository.php           |   230 +
 .../Providers/ArtisanServiceProvider.php        |    58 +
 .../Providers/CommandCreatorServiceProvider.php |    42 +
 .../Providers/ComposerServiceProvider.php       |    46 +
 .../Providers/ConsoleSupportServiceProvider.php |    73 +
 .../Providers/KeyGeneratorServiceProvider.php   |    40 +
 .../Providers/MaintenanceServiceProvider.php    |    46 +
 .../Providers/OptimizeServiceProvider.php       |    66 +
 .../Providers/PublisherServiceProvider.php      |   201 +
 .../Providers/RouteListServiceProvider.php      |    40 +
 .../Providers/ServerServiceProvider.php         |    40 +
 .../Providers/TinkerServiceProvider.php         |    40 +
 .../Foundation/Testing/ApplicationTrait.php     |   190 +
 .../Foundation/Testing/AssertionsTrait.php      |   223 +
 .../Illuminate/Foundation/Testing/Client.php    |    38 +
 .../Illuminate/Foundation/Testing/TestCase.php  |    29 +
 .../src/Illuminate/Foundation/ViewPublisher.php |   117 +
 .../src/Illuminate/Foundation/changes.json      |   215 +
 .../src/Illuminate/Foundation/start.php         |   271 +
 .../src/Illuminate/Hashing/BcryptHasher.php     |    73 +
 .../Illuminate/Hashing/HashServiceProvider.php  |    34 +
 .../src/Illuminate/Hashing/HasherInterface.php  |    33 +
 .../src/Illuminate/Hashing/composer.json        |    27 +
 .../src/Illuminate/Html/FormBuilder.php         |   985 +
 .../src/Illuminate/Html/HtmlBuilder.php         |   375 +
 .../src/Illuminate/Html/HtmlServiceProvider.php |    64 +
 .../framework/src/Illuminate/Html/composer.json |    28 +
 .../src/Illuminate/Http/FrameGuard.php          |    45 +
 .../src/Illuminate/Http/JsonResponse.php        |    78 +
 .../src/Illuminate/Http/RedirectResponse.php    |   224 +
 .../framework/src/Illuminate/Http/Request.php   |   608 +
 .../framework/src/Illuminate/Http/Response.php  |    85 +
 .../src/Illuminate/Http/ResponseTrait.php       |    35 +
 .../framework/src/Illuminate/Http/composer.json |    29 +
 .../src/Illuminate/Log/LogServiceProvider.php   |    55 +
 .../framework/src/Illuminate/Log/Writer.php     |   311 +
 .../framework/src/Illuminate/Log/composer.json  |    30 +
 .../src/Illuminate/Mail/MailServiceProvider.php |   261 +
 .../framework/src/Illuminate/Mail/Mailer.php    |   504 +
 .../framework/src/Illuminate/Mail/Message.php   |   295 +
 .../Illuminate/Mail/Transport/LogTransport.php  |    87 +
 .../Mail/Transport/MailgunTransport.php         |   168 +
 .../Mail/Transport/MandrillTransport.php        |   107 +
 .../framework/src/Illuminate/Mail/composer.json |    33 +
 .../Pagination/BootstrapPresenter.php           |    42 +
 .../src/Illuminate/Pagination/Factory.php       |   289 +
 .../Pagination/PaginationServiceProvider.php    |    43 +
 .../src/Illuminate/Pagination/Paginator.php     |   544 +
 .../src/Illuminate/Pagination/Presenter.php     |   277 +
 .../src/Illuminate/Pagination/composer.json     |    30 +
 .../src/Illuminate/Pagination/views/simple.php  |    15 +
 .../Illuminate/Pagination/views/slider-3.php    |     9 +
 .../src/Illuminate/Pagination/views/slider.php  |    11 +
 .../src/Illuminate/Queue/BeanstalkdQueue.php    |   142 +
 .../src/Illuminate/Queue/Capsule/Manager.php    |   182 +
 .../Queue/Connectors/BeanstalkdConnector.php    |    24 +
 .../Queue/Connectors/ConnectorInterface.php     |    13 +
 .../Queue/Connectors/IronConnector.php          |    59 +
 .../Queue/Connectors/RedisConnector.php         |    52 +
 .../Queue/Connectors/SqsConnector.php           |    21 +
 .../Queue/Connectors/SyncConnector.php          |    18 +
 .../Queue/Console/FailedTableCommand.php        |    70 +
 .../Queue/Console/FlushFailedCommand.php        |    33 +
 .../Queue/Console/ForgetFailedCommand.php       |    51 +
 .../Queue/Console/ListFailedCommand.php         |    62 +
 .../Illuminate/Queue/Console/ListenCommand.php  |   145 +
 .../Illuminate/Queue/Console/RestartCommand.php |    33 +
 .../Illuminate/Queue/Console/RetryCommand.php   |    74 +
 .../Queue/Console/SubscribeCommand.php          |   153 +
 .../Illuminate/Queue/Console/WorkCommand.php    |   175 +
 .../Queue/Console/stubs/failed_jobs.stub        |    35 +
 .../Queue/FailConsoleServiceProvider.php        |    69 +
 .../Queue/Failed/DatabaseFailedJobProvider.php  |   111 +
 .../Queue/Failed/FailedJobProviderInterface.php |    45 +
 .../Illuminate/Queue/IlluminateQueueClosure.php |    39 +
 .../src/Illuminate/Queue/IronQueue.php          |   258 +
 .../src/Illuminate/Queue/Jobs/BeanstalkdJob.php |   150 +
 .../src/Illuminate/Queue/Jobs/IronJob.php       |   171 +
 .../framework/src/Illuminate/Queue/Jobs/Job.php |   179 +
 .../src/Illuminate/Queue/Jobs/RedisJob.php      |   134 +
 .../src/Illuminate/Queue/Jobs/SqsJob.php        |   139 +
 .../src/Illuminate/Queue/Jobs/SyncJob.php       |    97 +
 .../framework/src/Illuminate/Queue/Listener.php |   238 +
 .../framework/src/Illuminate/Queue/Queue.php    |   139 +
 .../src/Illuminate/Queue/QueueInterface.php     |    44 +
 .../src/Illuminate/Queue/QueueManager.php       |   223 +
 .../Illuminate/Queue/QueueServiceProvider.php   |   305 +
 .../framework/src/Illuminate/Queue/README.md    |    34 +
 .../src/Illuminate/Queue/RedisQueue.php         |   319 +
 .../framework/src/Illuminate/Queue/SqsQueue.php |   126 +
 .../src/Illuminate/Queue/SyncQueue.php          |    67 +
 .../framework/src/Illuminate/Queue/Worker.php   |   362 +
 .../src/Illuminate/Queue/composer.json          |    44 +
 .../framework/src/Illuminate/Redis/Database.php |    98 +
 .../Illuminate/Redis/RedisServiceProvider.php   |    37 +
 .../src/Illuminate/Redis/composer.json          |    27 +
 .../src/Illuminate/Remote/Connection.php        |   262 +
 .../Illuminate/Remote/ConnectionInterface.php   |    52 +
 .../src/Illuminate/Remote/GatewayInterface.php  |    60 +
 .../src/Illuminate/Remote/MultiConnection.php   |   100 +
 .../src/Illuminate/Remote/RemoteManager.php     |   199 +
 .../Illuminate/Remote/RemoteServiceProvider.php |    37 +
 .../src/Illuminate/Remote/SecLibGateway.php     |   321 +
 .../src/Illuminate/Remote/composer.json         |    31 +
 .../Routing/Console/MakeControllerCommand.php   |   181 +
 .../src/Illuminate/Routing/Controller.php       |   271 +
 .../Illuminate/Routing/ControllerDispatcher.php |   243 +
 .../Illuminate/Routing/ControllerInspector.php  |   131 +
 .../Routing/ControllerServiceProvider.php       |    60 +
 .../Routing/Generators/ControllerGenerator.php  |   207 +
 .../Routing/Generators/stubs/controller.stub    |     7 +
 .../Routing/Generators/stubs/create.stub        |     9 +
 .../Routing/Generators/stubs/destroy.stub       |    10 +
 .../Routing/Generators/stubs/edit.stub          |    10 +
 .../Routing/Generators/stubs/index.stub         |     9 +
 .../Routing/Generators/stubs/show.stub          |    10 +
 .../Routing/Generators/stubs/store.stub         |     9 +
 .../Routing/Generators/stubs/update.stub        |    10 +
 .../Routing/Matching/HostValidator.php          |    22 +
 .../Routing/Matching/MethodValidator.php        |    20 +
 .../Routing/Matching/SchemeValidator.php        |    29 +
 .../Routing/Matching/UriValidator.php           |    22 +
 .../Routing/Matching/ValidatorInterface.php     |    17 +
 .../src/Illuminate/Routing/Redirector.php       |   219 +
 .../framework/src/Illuminate/Routing/Route.php  |   814 +
 .../src/Illuminate/Routing/RouteCollection.php  |   305 +
 .../Routing/RouteFiltererInterface.php          |    26 +
 .../framework/src/Illuminate/Routing/Router.php |  1748 +
 .../Routing/RoutingServiceProvider.php          |    88 +
 .../src/Illuminate/Routing/UrlGenerator.php     |   527 +
 .../src/Illuminate/Routing/composer.json        |    36 +
 .../Session/CacheBasedSessionHandler.php        |    92 +
 .../Session/CommandsServiceProvider.php         |    39 +
 .../Session/Console/SessionTableCommand.php     |    72 +
 .../Session/Console/stubs/database.stub         |    32 +
 .../Illuminate/Session/CookieSessionHandler.php |    94 +
 .../Session/DatabaseSessionHandler.php          |   132 +
 .../Session/ExistenceAwareInterface.php         |    13 +
 .../Illuminate/Session/FileSessionHandler.php   |    97 +
 .../src/Illuminate/Session/Middleware.php       |   258 +
 .../src/Illuminate/Session/SessionInterface.php |    30 +
 .../src/Illuminate/Session/SessionManager.php   |   199 +
 .../Session/SessionServiceProvider.php          |    65 +
 .../framework/src/Illuminate/Session/Store.php  |   630 +
 .../Session/TokenMismatchException.php          |     3 +
 .../src/Illuminate/Session/composer.json        |    35 +
 .../framework/src/Illuminate/Support/Arr.php    |   386 +
 .../src/Illuminate/Support/ClassLoader.php      |   107 +
 .../src/Illuminate/Support/Collection.php       |   851 +
 .../Support/Contracts/ArrayableInterface.php    |    12 +
 .../Support/Contracts/JsonableInterface.php     |    13 +
 .../Contracts/MessageProviderInterface.php      |    12 +
 .../Support/Contracts/RenderableInterface.php   |    12 +
 .../Contracts/ResponsePreparerInterface.php     |    20 +
 .../src/Illuminate/Support/Facades/App.php      |    15 +
 .../src/Illuminate/Support/Facades/Artisan.php  |    15 +
 .../src/Illuminate/Support/Facades/Auth.php     |    16 +
 .../src/Illuminate/Support/Facades/Blade.php    |    18 +
 .../src/Illuminate/Support/Facades/Cache.php    |    16 +
 .../src/Illuminate/Support/Facades/Config.php   |    15 +
 .../src/Illuminate/Support/Facades/Cookie.php   |    38 +
 .../src/Illuminate/Support/Facades/Crypt.php    |    15 +
 .../src/Illuminate/Support/Facades/DB.php       |    16 +
 .../src/Illuminate/Support/Facades/Event.php    |    15 +
 .../src/Illuminate/Support/Facades/Facade.php   |   224 +
 .../src/Illuminate/Support/Facades/File.php     |    15 +
 .../src/Illuminate/Support/Facades/Form.php     |    15 +
 .../src/Illuminate/Support/Facades/HTML.php     |    15 +
 .../src/Illuminate/Support/Facades/Hash.php     |    15 +
 .../src/Illuminate/Support/Facades/Input.php    |    29 +
 .../src/Illuminate/Support/Facades/Lang.php     |    15 +
 .../src/Illuminate/Support/Facades/Log.php      |    15 +
 .../src/Illuminate/Support/Facades/Mail.php     |    15 +
 .../Illuminate/Support/Facades/Paginator.php    |    15 +
 .../src/Illuminate/Support/Facades/Password.php |    50 +
 .../src/Illuminate/Support/Facades/Queue.php    |    16 +
 .../src/Illuminate/Support/Facades/Redirect.php |    15 +
 .../src/Illuminate/Support/Facades/Redis.php    |    15 +
 .../src/Illuminate/Support/Facades/Request.php  |    15 +
 .../src/Illuminate/Support/Facades/Response.php |   112 +
 .../src/Illuminate/Support/Facades/Route.php    |    15 +
 .../src/Illuminate/Support/Facades/SSH.php      |    16 +
 .../src/Illuminate/Support/Facades/Schema.php   |    29 +
 .../src/Illuminate/Support/Facades/Session.php  |    16 +
 .../src/Illuminate/Support/Facades/URL.php      |    15 +
 .../Illuminate/Support/Facades/Validator.php    |    15 +
 .../src/Illuminate/Support/Facades/View.php     |    15 +
 .../framework/src/Illuminate/Support/Fluent.php |   193 +
 .../src/Illuminate/Support/Manager.php          |   141 +
 .../src/Illuminate/Support/MessageBag.php       |   305 +
 .../Support/NamespacedItemResolver.php          |   109 +
 .../src/Illuminate/Support/Pluralizer.php       |   269 +
 .../Illuminate/Support/SerializableClosure.php  |    59 +
 .../src/Illuminate/Support/ServiceProvider.php  |   192 +
 .../framework/src/Illuminate/Support/Str.php    |   366 +
 .../Support/Traits/CapsuleManagerTrait.php      |    69 +
 .../Support/Traits/MacroableTrait.php           |    68 +
 .../src/Illuminate/Support/ViewErrorBag.php     |   105 +
 .../src/Illuminate/Support/composer.json        |    32 +
 .../src/Illuminate/Support/helpers.php          |  1033 +
 .../src/Illuminate/Translation/FileLoader.php   |   130 +
 .../Illuminate/Translation/LoaderInterface.php  |    24 +
 .../Translation/TranslationServiceProvider.php  |    63 +
 .../src/Illuminate/Translation/Translator.php   |   365 +
 .../src/Illuminate/Translation/composer.json    |    28 +
 .../Validation/DatabasePresenceVerifier.php     |   127 +
 .../src/Illuminate/Validation/Factory.php       |   237 +
 .../Validation/PresenceVerifierInterface.php    |    29 +
 .../Validation/ValidationServiceProvider.php    |    62 +
 .../src/Illuminate/Validation/Validator.php     |  2567 ++
 .../src/Illuminate/Validation/composer.json     |    32 +
 .../Illuminate/View/Compilers/BladeCompiler.php |   727 +
 .../src/Illuminate/View/Compilers/Compiler.php  |    68 +
 .../View/Compilers/CompilerInterface.php        |    29 +
 .../Illuminate/View/Engines/CompilerEngine.php  |   100 +
 .../src/Illuminate/View/Engines/Engine.php      |    22 +
 .../Illuminate/View/Engines/EngineInterface.php |    14 +
 .../Illuminate/View/Engines/EngineResolver.php  |    57 +
 .../src/Illuminate/View/Engines/PhpEngine.php   |    66 +
 .../framework/src/Illuminate/View/Factory.php   |   842 +
 .../src/Illuminate/View/FileViewFinder.php      |   280 +
 .../framework/src/Illuminate/View/View.php      |   391 +
 .../src/Illuminate/View/ViewFinderInterface.php |    47 +
 .../src/Illuminate/View/ViewServiceProvider.php |   182 +
 .../framework/src/Illuminate/View/composer.json |    29 +
 .../Workbench/Console/WorkbenchMakeCommand.php  |   144 +
 .../src/Illuminate/Workbench/Package.php        |    76 +
 .../src/Illuminate/Workbench/PackageCreator.php |   376 +
 .../src/Illuminate/Workbench/Starter.php        |    33 +
 .../Workbench/WorkbenchServiceProvider.php      |    45 +
 .../src/Illuminate/Workbench/composer.json      |    31 +
 .../src/Illuminate/Workbench/stubs/.travis.yml  |    13 +
 .../Illuminate/Workbench/stubs/composer.json    |    23 +
 .../Illuminate/Workbench/stubs/gitignore.txt    |     4 +
 .../src/Illuminate/Workbench/stubs/phpunit.xml  |    18 +
 .../Workbench/stubs/plain.composer.json         |    20 +
 .../Workbench/stubs/plain.provider.stub         |    34 +
 .../Illuminate/Workbench/stubs/provider.stub    |    44 +
 vendor/monolog/monolog/.php_cs                  |    15 +
 vendor/monolog/monolog/CHANGELOG.mdown          |   217 +
 vendor/monolog/monolog/LICENSE                  |    19 +
 vendor/monolog/monolog/README.mdown             |   292 +
 vendor/monolog/monolog/composer.json            |    54 +
 vendor/monolog/monolog/doc/extending.md         |    76 +
 vendor/monolog/monolog/doc/sockets.md           |    37 +
 vendor/monolog/monolog/doc/usage.md             |   162 +
 vendor/monolog/monolog/phpunit.xml.dist         |    15 +
 .../monolog/src/Monolog/ErrorHandler.php        |   208 +
 .../Monolog/Formatter/ChromePHPFormatter.php    |    79 +
 .../src/Monolog/Formatter/ElasticaFormatter.php |    87 +
 .../src/Monolog/Formatter/FlowdockFormatter.php |   104 +
 .../Monolog/Formatter/FormatterInterface.php    |    36 +
 .../Monolog/Formatter/GelfMessageFormatter.php  |   111 +
 .../src/Monolog/Formatter/HtmlFormatter.php     |   140 +
 .../src/Monolog/Formatter/JsonFormatter.php     |   116 +
 .../src/Monolog/Formatter/LineFormatter.php     |   159 +
 .../src/Monolog/Formatter/LogglyFormatter.php   |    47 +
 .../src/Monolog/Formatter/LogstashFormatter.php |   165 +
 .../src/Monolog/Formatter/MongoDBFormatter.php  |   105 +
 .../Monolog/Formatter/NormalizerFormatter.php   |   150 +
 .../src/Monolog/Formatter/ScalarFormatter.php   |    48 +
 .../src/Monolog/Formatter/WildfireFormatter.php |   113 +
 .../src/Monolog/Handler/AbstractHandler.php     |   184 +
 .../Handler/AbstractProcessingHandler.php       |    66 +
 .../Monolog/Handler/AbstractSyslogHandler.php   |    92 +
 .../monolog/src/Monolog/Handler/AmqpHandler.php |    98 +
 .../Monolog/Handler/BrowserConsoleHandler.php   |   184 +
 .../src/Monolog/Handler/BufferHandler.php       |   117 +
 .../src/Monolog/Handler/ChromePHPHandler.php    |   204 +
 .../src/Monolog/Handler/CouchDBHandler.php      |    72 +
 .../monolog/src/Monolog/Handler/CubeHandler.php |   145 +
 .../Monolog/Handler/DoctrineCouchDBHandler.php  |    45 +
 .../src/Monolog/Handler/DynamoDbHandler.php     |    89 +
 .../Monolog/Handler/ElasticSearchHandler.php    |   128 +
 .../src/Monolog/Handler/ErrorLogHandler.php     |    82 +
 .../src/Monolog/Handler/FilterHandler.php       |   140 +
 .../ActivationStrategyInterface.php             |    28 +
 .../ChannelLevelActivationStrategy.php          |    59 +
 .../ErrorLevelActivationStrategy.php            |    34 +
 .../Monolog/Handler/FingersCrossedHandler.php   |   150 +
 .../src/Monolog/Handler/FirePHPHandler.php      |   195 +
 .../src/Monolog/Handler/FleepHookHandler.php    |   126 +
 .../src/Monolog/Handler/FlowdockHandler.php     |   103 +
 .../monolog/src/Monolog/Handler/GelfHandler.php |    72 +
 .../src/Monolog/Handler/GroupHandler.php        |    80 +
 .../src/Monolog/Handler/HandlerInterface.php    |    90 +
 .../src/Monolog/Handler/HipChatHandler.php      |   306 +
 .../src/Monolog/Handler/LogEntriesHandler.php   |    55 +
 .../src/Monolog/Handler/LogglyHandler.php       |    98 +
 .../monolog/src/Monolog/Handler/MailHandler.php |    55 +
 .../src/Monolog/Handler/MandrillHandler.php     |    69 +
 .../Handler/MissingExtensionException.php       |    21 +
 .../src/Monolog/Handler/MongoDBHandler.php      |    55 +
 .../src/Monolog/Handler/NativeMailerHandler.php |   176 +
 .../src/Monolog/Handler/NewRelicHandler.php     |   176 +
 .../monolog/src/Monolog/Handler/NullHandler.php |    45 +
 .../monolog/src/Monolog/Handler/PsrHandler.php  |    56 +
 .../src/Monolog/Handler/PushoverHandler.php     |   172 +
 .../src/Monolog/Handler/RavenHandler.php        |   187 +
 .../src/Monolog/Handler/RedisHandler.php        |    58 +
 .../src/Monolog/Handler/RollbarHandler.php      |    73 +
 .../src/Monolog/Handler/RotatingFileHandler.php |   153 +
 .../src/Monolog/Handler/SamplingHandler.php     |    82 +
 .../src/Monolog/Handler/SlackHandler.php        |   280 +
 .../src/Monolog/Handler/SocketHandler.php       |   284 +
 .../src/Monolog/Handler/StreamHandler.php       |   104 +
 .../src/Monolog/Handler/SwiftMailerHandler.php  |    87 +
 .../src/Monolog/Handler/SyslogHandler.php       |    67 +
 .../src/Monolog/Handler/SyslogUdp/UdpSocket.php |    46 +
 .../src/Monolog/Handler/SyslogUdpHandler.php    |    80 +
 .../monolog/src/Monolog/Handler/TestHandler.php |   140 +
 .../Monolog/Handler/WhatFailureGroupHandler.php |    57 +
 .../src/Monolog/Handler/ZendMonitorHandler.php  |    95 +
 vendor/monolog/monolog/src/Monolog/Logger.php   |   615 +
 .../src/Monolog/Processor/GitProcessor.php      |    64 +
 .../Processor/IntrospectionProcessor.php        |    82 +
 .../Processor/MemoryPeakUsageProcessor.php      |    40 +
 .../src/Monolog/Processor/MemoryProcessor.php   |    63 +
 .../Monolog/Processor/MemoryUsageProcessor.php  |    40 +
 .../Monolog/Processor/ProcessIdProcessor.php    |    31 +
 .../Processor/PsrLogMessageProcessor.php        |    48 +
 .../src/Monolog/Processor/TagProcessor.php      |    34 +
 .../src/Monolog/Processor/UidProcessor.php      |    38 +
 .../src/Monolog/Processor/WebProcessor.php      |   105 +
 vendor/monolog/monolog/src/Monolog/Registry.php |   134 +
 .../monolog/tests/Monolog/ErrorHandlerTest.php  |    31 +
 .../Formatter/ChromePHPFormatterTest.php        |   158 +
 .../Monolog/Formatter/ElasticaFormatterTest.php |    79 +
 .../Monolog/Formatter/FlowdockFormatterTest.php |    55 +
 .../Formatter/GelfMessageFormatterTest.php      |   204 +
 .../Monolog/Formatter/JsonFormatterTest.php     |    78 +
 .../Monolog/Formatter/LineFormatterTest.php     |   208 +
 .../Monolog/Formatter/LogglyFormatterTest.php   |    40 +
 .../Monolog/Formatter/LogstashFormatterTest.php |   289 +
 .../Monolog/Formatter/MongoDBFormatterTest.php  |   253 +
 .../Formatter/NormalizerFormatterTest.php       |   253 +
 .../Monolog/Formatter/ScalarFormatterTest.php   |    98 +
 .../Monolog/Formatter/WildfireFormatterTest.php |   142 +
 .../Monolog/Handler/AbstractHandlerTest.php     |   115 +
 .../Handler/AbstractProcessingHandlerTest.php   |    80 +
 .../tests/Monolog/Handler/AmqpHandlerTest.php   |   137 +
 .../Handler/BrowserConsoleHandlerTest.php       |   130 +
 .../tests/Monolog/Handler/BufferHandlerTest.php |   158 +
 .../Monolog/Handler/ChromePHPHandlerTest.php    |   141 +
 .../Monolog/Handler/CouchDBHandlerTest.php      |    41 +
 .../Handler/DoctrineCouchDBHandlerTest.php      |    52 +
 .../Monolog/Handler/DynamoDbHandlerTest.php     |    73 +
 .../Handler/ElasticSearchHandlerTest.php        |   239 +
 .../Monolog/Handler/ErrorLogHandlerTest.php     |    66 +
 .../tests/Monolog/Handler/FilterHandlerTest.php |   170 +
 .../Handler/FingersCrossedHandlerTest.php       |   240 +
 .../Monolog/Handler/FirePHPHandlerTest.php      |    96 +
 .../tests/Monolog/Handler/Fixtures/.gitkeep     |     0
 .../Monolog/Handler/FleepHookHandlerTest.php    |    85 +
 .../Monolog/Handler/FlowdockHandlerTest.php     |    88 +
 .../Monolog/Handler/GelfHandlerLegacyTest.php   |    95 +
 .../tests/Monolog/Handler/GelfHandlerTest.php   |   117 +
 .../Handler/GelfMockMessagePublisher.php        |    25 +
 .../tests/Monolog/Handler/GroupHandlerTest.php  |    89 +
 .../Monolog/Handler/HipChatHandlerTest.php      |   178 +
 .../Monolog/Handler/LogEntriesHandlerTest.php   |    84 +
 .../tests/Monolog/Handler/MailHandlerTest.php   |    75 +
 .../tests/Monolog/Handler/MockRavenClient.php   |    26 +
 .../Monolog/Handler/MongoDBHandlerTest.php      |    65 +
 .../Monolog/Handler/NativeMailerHandlerTest.php |    61 +
 .../Monolog/Handler/NewRelicHandlerTest.php     |   192 +
 .../tests/Monolog/Handler/NullHandlerTest.php   |    33 +
 .../tests/Monolog/Handler/PsrHandlerTest.php    |    50 +
 .../Monolog/Handler/PushoverHandlerTest.php     |   141 +
 .../tests/Monolog/Handler/RavenHandlerTest.php  |   170 +
 .../tests/Monolog/Handler/RedisHandlerTest.php  |    71 +
 .../Monolog/Handler/RotatingFileHandlerTest.php |    99 +
 .../Monolog/Handler/SamplingHandlerTest.php     |    33 +
 .../tests/Monolog/Handler/SlackHandlerTest.php  |   133 +
 .../tests/Monolog/Handler/SocketHandlerTest.php |   282 +
 .../tests/Monolog/Handler/StreamHandlerTest.php |   118 +
 .../Monolog/Handler/SwiftMailerHandlerTest.php  |    65 +
 .../tests/Monolog/Handler/SyslogHandlerTest.php |    44 +
 .../Monolog/Handler/SyslogUdpHandlerTest.php    |    49 +
 .../tests/Monolog/Handler/TestHandlerTest.php   |    56 +
 .../tests/Monolog/Handler/UdpSocketTest.php     |    46 +
 .../Handler/WhatFailureGroupHandlerTest.php     |   121 +
 .../Monolog/Handler/ZendMonitorHandlerTest.php  |    69 +
 .../monolog/tests/Monolog/LoggerTest.php        |   409 +
 .../Monolog/Processor/GitProcessorTest.php      |    29 +
 .../Processor/IntrospectionProcessorTest.php    |   123 +
 .../Processor/MemoryPeakUsageProcessorTest.php  |    42 +
 .../Processor/MemoryUsageProcessorTest.php      |    42 +
 .../Processor/ProcessIdProcessorTest.php        |    30 +
 .../Processor/PsrLogMessageProcessorTest.php    |    43 +
 .../Monolog/Processor/TagProcessorTest.php      |    29 +
 .../Monolog/Processor/UidProcessorTest.php      |    27 +
 .../Monolog/Processor/WebProcessorTest.php      |    98 +
 .../monolog/tests/Monolog/PsrLogCompatTest.php  |    47 +
 .../monolog/tests/Monolog/RegistryTest.php      |    63 +
 .../monolog/monolog/tests/Monolog/TestCase.php  |    58 +
 vendor/monolog/monolog/tests/bootstrap.php      |    15 +
 vendor/nesbot/carbon/.editorconfig              |    14 +
 vendor/nesbot/carbon/LICENSE                    |    19 +
 vendor/nesbot/carbon/composer.json              |    30 +
 vendor/nesbot/carbon/phpunit.xml.dist           |    25 +
 vendor/nesbot/carbon/readme.md                  |    81 +
 vendor/nesbot/carbon/src/Carbon/Carbon.php      |  2267 ++
 vendor/nesbot/carbon/tests/AddTest.php          |   201 +
 vendor/nesbot/carbon/tests/ComparisonTest.php   |   200 +
 vendor/nesbot/carbon/tests/ConstructTest.php    |   105 +
 vendor/nesbot/carbon/tests/CopyTest.php         |    38 +
 .../nesbot/carbon/tests/CreateFromDateTest.php  |    59 +
 .../carbon/tests/CreateFromFormatTest.php       |    42 +
 .../nesbot/carbon/tests/CreateFromTimeTest.php  |    61 +
 .../carbon/tests/CreateFromTimestampTest.php    |    52 +
 vendor/nesbot/carbon/tests/CreateTest.php       |   142 +
 .../carbon/tests/DayOfWeekModifiersTest.php     |   288 +
 vendor/nesbot/carbon/tests/DiffTest.php         |   953 +
 vendor/nesbot/carbon/tests/FluidSettersTest.php |   113 +
 vendor/nesbot/carbon/tests/GettersTest.php      |   285 +
 vendor/nesbot/carbon/tests/InstanceTest.php     |    35 +
 vendor/nesbot/carbon/tests/IsTest.php           |   133 +
 vendor/nesbot/carbon/tests/IssetTest.php        |    49 +
 .../tests/NowAndOtherStaticHelpersTest.php      |    79 +
 vendor/nesbot/carbon/tests/RelativeTest.php     |    45 +
 vendor/nesbot/carbon/tests/SettersTest.php      |   253 +
 vendor/nesbot/carbon/tests/StartEndOfTest.php   |   236 +
 vendor/nesbot/carbon/tests/StringsTest.php      |   157 +
 vendor/nesbot/carbon/tests/SubTest.php          |   175 +
 vendor/nesbot/carbon/tests/TestFixture.php      |    56 +
 vendor/nesbot/carbon/tests/TestingAidsTest.php  |   124 +
 vendor/nikic/php-parser/.travis.yml             |    13 +
 vendor/nikic/php-parser/CHANGELOG.md            |   168 +
 vendor/nikic/php-parser/LICENSE                 |    31 +
 vendor/nikic/php-parser/README.md               |    78 +
 vendor/nikic/php-parser/composer.json           |    24 +
 .../php-parser/doc/0_Introduction.markdown      |    81 +
 .../php-parser/doc/1_Installation.markdown      |    48 +
 .../doc/2_Usage_of_basic_components.markdown    |   394 +
 .../3_Other_node_tree_representations.markdown  |   201 +
 .../php-parser/doc/4_Code_generation.markdown   |   267 +
 .../php-parser/doc/component/Lexer.markdown     |   114 +
 vendor/nikic/php-parser/grammar/README.md       |    29 +
 vendor/nikic/php-parser/grammar/analyze.php     |    96 +
 .../nikic/php-parser/grammar/kmyacc.php.parser  |   361 +
 .../nikic/php-parser/grammar/rebuildParser.php  |   225 +
 .../grammar/zend_language_parser.phpy           |   906 +
 .../php-parser/lib/PHPParser/Autoloader.php     |    33 +
 .../nikic/php-parser/lib/PHPParser/Builder.php  |    11 +
 .../php-parser/lib/PHPParser/Builder/Class.php  |   137 +
 .../lib/PHPParser/Builder/Function.php          |   109 +
 .../lib/PHPParser/Builder/Interface.php         |    92 +
 .../php-parser/lib/PHPParser/Builder/Method.php |   187 +
 .../php-parser/lib/PHPParser/Builder/Param.php  |    75 +
 .../lib/PHPParser/Builder/Property.php          |    92 +
 .../lib/PHPParser/BuilderAbstract.php           |    94 +
 .../php-parser/lib/PHPParser/BuilderFactory.php |    87 +
 .../nikic/php-parser/lib/PHPParser/Comment.php  |   117 +
 .../php-parser/lib/PHPParser/Comment/Doc.php    |     5 +
 vendor/nikic/php-parser/lib/PHPParser/Error.php |    70 +
 vendor/nikic/php-parser/lib/PHPParser/Lexer.php |   199 +
 .../lib/PHPParser/Lexer/Emulative.php           |   200 +
 vendor/nikic/php-parser/lib/PHPParser/Node.php  |    75 +
 .../nikic/php-parser/lib/PHPParser/Node/Arg.php |    25 +
 .../php-parser/lib/PHPParser/Node/Const.php     |    25 +
 .../php-parser/lib/PHPParser/Node/Expr.php      |     5 +
 .../lib/PHPParser/Node/Expr/Array.php           |    22 +
 .../lib/PHPParser/Node/Expr/ArrayDimFetch.php   |    25 +
 .../lib/PHPParser/Node/Expr/ArrayItem.php       |    28 +
 .../lib/PHPParser/Node/Expr/Assign.php          |    25 +
 .../PHPParser/Node/Expr/AssignBitwiseAnd.php    |    25 +
 .../lib/PHPParser/Node/Expr/AssignBitwiseOr.php |    25 +
 .../PHPParser/Node/Expr/AssignBitwiseXor.php    |    25 +
 .../lib/PHPParser/Node/Expr/AssignConcat.php    |    25 +
 .../lib/PHPParser/Node/Expr/AssignDiv.php       |    25 +
 .../lib/PHPParser/Node/Expr/AssignMinus.php     |    25 +
 .../lib/PHPParser/Node/Expr/AssignMod.php       |    25 +
 .../lib/PHPParser/Node/Expr/AssignMul.php       |    25 +
 .../lib/PHPParser/Node/Expr/AssignPlus.php      |    25 +
 .../lib/PHPParser/Node/Expr/AssignRef.php       |    25 +
 .../lib/PHPParser/Node/Expr/AssignShiftLeft.php |    25 +
 .../PHPParser/Node/Expr/AssignShiftRight.php    |    25 +
 .../lib/PHPParser/Node/Expr/BitwiseAnd.php      |    25 +
 .../lib/PHPParser/Node/Expr/BitwiseNot.php      |    22 +
 .../lib/PHPParser/Node/Expr/BitwiseOr.php       |    25 +
 .../lib/PHPParser/Node/Expr/BitwiseXor.php      |    25 +
 .../lib/PHPParser/Node/Expr/BooleanAnd.php      |    25 +
 .../lib/PHPParser/Node/Expr/BooleanNot.php      |    22 +
 .../lib/PHPParser/Node/Expr/BooleanOr.php       |    25 +
 .../php-parser/lib/PHPParser/Node/Expr/Cast.php |    22 +
 .../lib/PHPParser/Node/Expr/Cast/Array.php      |     5 +
 .../lib/PHPParser/Node/Expr/Cast/Bool.php       |     5 +
 .../lib/PHPParser/Node/Expr/Cast/Double.php     |     5 +
 .../lib/PHPParser/Node/Expr/Cast/Int.php        |     5 +
 .../lib/PHPParser/Node/Expr/Cast/Object.php     |     5 +
 .../lib/PHPParser/Node/Expr/Cast/String.php     |     5 +
 .../lib/PHPParser/Node/Expr/Cast/Unset.php      |     5 +
 .../lib/PHPParser/Node/Expr/ClassConstFetch.php |    25 +
 .../lib/PHPParser/Node/Expr/Clone.php           |    22 +
 .../lib/PHPParser/Node/Expr/Closure.php         |    35 +
 .../lib/PHPParser/Node/Expr/ClosureUse.php      |    25 +
 .../lib/PHPParser/Node/Expr/Concat.php          |    25 +
 .../lib/PHPParser/Node/Expr/ConstFetch.php      |    22 +
 .../php-parser/lib/PHPParser/Node/Expr/Div.php  |    25 +
 .../lib/PHPParser/Node/Expr/Empty.php           |    22 +
 .../lib/PHPParser/Node/Expr/Equal.php           |    25 +
 .../lib/PHPParser/Node/Expr/ErrorSuppress.php   |    22 +
 .../php-parser/lib/PHPParser/Node/Expr/Eval.php |    22 +
 .../php-parser/lib/PHPParser/Node/Expr/Exit.php |    22 +
 .../lib/PHPParser/Node/Expr/FuncCall.php        |    25 +
 .../lib/PHPParser/Node/Expr/Greater.php         |    25 +
 .../lib/PHPParser/Node/Expr/GreaterOrEqual.php  |    25 +
 .../lib/PHPParser/Node/Expr/Identical.php       |    25 +
 .../lib/PHPParser/Node/Expr/Include.php         |    30 +
 .../lib/PHPParser/Node/Expr/Instanceof.php      |    25 +
 .../lib/PHPParser/Node/Expr/Isset.php           |    22 +
 .../php-parser/lib/PHPParser/Node/Expr/List.php |    22 +
 .../lib/PHPParser/Node/Expr/LogicalAnd.php      |    25 +
 .../lib/PHPParser/Node/Expr/LogicalOr.php       |    25 +
 .../lib/PHPParser/Node/Expr/LogicalXor.php      |    25 +
 .../lib/PHPParser/Node/Expr/MethodCall.php      |    28 +
 .../lib/PHPParser/Node/Expr/Minus.php           |    25 +
 .../php-parser/lib/PHPParser/Node/Expr/Mod.php  |    25 +
 .../php-parser/lib/PHPParser/Node/Expr/Mul.php  |    25 +
 .../php-parser/lib/PHPParser/Node/Expr/New.php  |    25 +
 .../lib/PHPParser/Node/Expr/NotEqual.php        |    25 +
 .../lib/PHPParser/Node/Expr/NotIdentical.php    |    25 +
 .../php-parser/lib/PHPParser/Node/Expr/Plus.php |    25 +
 .../lib/PHPParser/Node/Expr/PostDec.php         |    22 +
 .../lib/PHPParser/Node/Expr/PostInc.php         |    22 +
 .../lib/PHPParser/Node/Expr/PreDec.php          |    22 +
 .../lib/PHPParser/Node/Expr/PreInc.php          |    22 +
 .../lib/PHPParser/Node/Expr/Print.php           |    22 +
 .../lib/PHPParser/Node/Expr/PropertyFetch.php   |    25 +
 .../lib/PHPParser/Node/Expr/ShellExec.php       |    22 +
 .../lib/PHPParser/Node/Expr/ShiftLeft.php       |    25 +
 .../lib/PHPParser/Node/Expr/ShiftRight.php      |    25 +
 .../lib/PHPParser/Node/Expr/Smaller.php         |    25 +
 .../lib/PHPParser/Node/Expr/SmallerOrEqual.php  |    25 +
 .../lib/PHPParser/Node/Expr/StaticCall.php      |    28 +
 .../PHPParser/Node/Expr/StaticPropertyFetch.php |    25 +
 .../lib/PHPParser/Node/Expr/Ternary.php         |    28 +
 .../lib/PHPParser/Node/Expr/UnaryMinus.php      |    22 +
 .../lib/PHPParser/Node/Expr/UnaryPlus.php       |    22 +
 .../lib/PHPParser/Node/Expr/Variable.php        |    22 +
 .../lib/PHPParser/Node/Expr/Yield.php           |    25 +
 .../php-parser/lib/PHPParser/Node/Name.php      |   168 +
 .../lib/PHPParser/Node/Name/FullyQualified.php  |    40 +
 .../lib/PHPParser/Node/Name/Relative.php        |    40 +
 .../php-parser/lib/PHPParser/Node/Param.php     |    31 +
 .../php-parser/lib/PHPParser/Node/Scalar.php    |     5 +
 .../lib/PHPParser/Node/Scalar/ClassConst.php    |    13 +
 .../lib/PHPParser/Node/Scalar/DNumber.php       |    58 +
 .../lib/PHPParser/Node/Scalar/DirConst.php      |    13 +
 .../lib/PHPParser/Node/Scalar/Encapsed.php      |    22 +
 .../lib/PHPParser/Node/Scalar/FileConst.php     |    13 +
 .../lib/PHPParser/Node/Scalar/FuncConst.php     |    13 +
 .../lib/PHPParser/Node/Scalar/LNumber.php       |    55 +
 .../lib/PHPParser/Node/Scalar/LineConst.php     |    13 +
 .../lib/PHPParser/Node/Scalar/MethodConst.php   |    13 +
 .../lib/PHPParser/Node/Scalar/NSConst.php       |    13 +
 .../lib/PHPParser/Node/Scalar/String.php        |   109 +
 .../lib/PHPParser/Node/Scalar/TraitConst.php    |    13 +
 .../php-parser/lib/PHPParser/Node/Stmt.php      |     5 +
 .../lib/PHPParser/Node/Stmt/Break.php           |    22 +
 .../php-parser/lib/PHPParser/Node/Stmt/Case.php |    25 +
 .../lib/PHPParser/Node/Stmt/Catch.php           |    28 +
 .../lib/PHPParser/Node/Stmt/Class.php           |   102 +
 .../lib/PHPParser/Node/Stmt/ClassConst.php      |    22 +
 .../lib/PHPParser/Node/Stmt/ClassMethod.php     |    71 +
 .../lib/PHPParser/Node/Stmt/Const.php           |    22 +
 .../lib/PHPParser/Node/Stmt/Continue.php        |    22 +
 .../lib/PHPParser/Node/Stmt/Declare.php         |    25 +
 .../lib/PHPParser/Node/Stmt/DeclareDeclare.php  |    25 +
 .../php-parser/lib/PHPParser/Node/Stmt/Do.php   |    25 +
 .../php-parser/lib/PHPParser/Node/Stmt/Echo.php |    22 +
 .../php-parser/lib/PHPParser/Node/Stmt/Else.php |    22 +
 .../lib/PHPParser/Node/Stmt/ElseIf.php          |    25 +
 .../php-parser/lib/PHPParser/Node/Stmt/For.php  |    32 +
 .../lib/PHPParser/Node/Stmt/Foreach.php         |    35 +
 .../lib/PHPParser/Node/Stmt/Function.php        |    32 +
 .../lib/PHPParser/Node/Stmt/Global.php          |    22 +
 .../php-parser/lib/PHPParser/Node/Stmt/Goto.php |    22 +
 .../lib/PHPParser/Node/Stmt/HaltCompiler.php    |    22 +
 .../php-parser/lib/PHPParser/Node/Stmt/If.php   |    33 +
 .../lib/PHPParser/Node/Stmt/InlineHTML.php      |    22 +
 .../lib/PHPParser/Node/Stmt/Interface.php       |    45 +
 .../lib/PHPParser/Node/Stmt/Label.php           |    22 +
 .../lib/PHPParser/Node/Stmt/Namespace.php       |   122 +
 .../lib/PHPParser/Node/Stmt/Property.php        |    41 +
 .../PHPParser/Node/Stmt/PropertyProperty.php    |    25 +
 .../lib/PHPParser/Node/Stmt/Return.php          |    22 +
 .../lib/PHPParser/Node/Stmt/Static.php          |    22 +
 .../lib/PHPParser/Node/Stmt/StaticVar.php       |    25 +
 .../lib/PHPParser/Node/Stmt/Switch.php          |    25 +
 .../lib/PHPParser/Node/Stmt/Throw.php           |    22 +
 .../lib/PHPParser/Node/Stmt/Trait.php           |    25 +
 .../lib/PHPParser/Node/Stmt/TraitUse.php        |    25 +
 .../PHPParser/Node/Stmt/TraitUseAdaptation.php  |     5 +
 .../Node/Stmt/TraitUseAdaptation/Alias.php      |    31 +
 .../Node/Stmt/TraitUseAdaptation/Precedence.php |    28 +
 .../lib/PHPParser/Node/Stmt/TryCatch.php        |    32 +
 .../lib/PHPParser/Node/Stmt/Unset.php           |    22 +
 .../php-parser/lib/PHPParser/Node/Stmt/Use.php  |    22 +
 .../lib/PHPParser/Node/Stmt/UseUse.php          |    36 +
 .../lib/PHPParser/Node/Stmt/While.php           |    25 +
 .../php-parser/lib/PHPParser/NodeAbstract.php   |   125 +
 .../php-parser/lib/PHPParser/NodeDumper.php     |    39 +
 .../php-parser/lib/PHPParser/NodeTraverser.php  |   132 +
 .../lib/PHPParser/NodeTraverserInterface.php    |    21 +
 .../php-parser/lib/PHPParser/NodeVisitor.php    |    58 +
 .../lib/PHPParser/NodeVisitor/NameResolver.php  |   139 +
 .../lib/PHPParser/NodeVisitorAbstract.php       |    12 +
 .../nikic/php-parser/lib/PHPParser/Parser.php   |  2721 ++
 .../lib/PHPParser/PrettyPrinter/Default.php     |   725 +
 .../lib/PHPParser/PrettyPrinter/Zend.php        |    10 +
 .../lib/PHPParser/PrettyPrinterAbstract.php     |   262 +
 .../php-parser/lib/PHPParser/Serializer.php     |    13 +
 .../php-parser/lib/PHPParser/Serializer/XML.php |    78 +
 .../nikic/php-parser/lib/PHPParser/Template.php |    75 +
 .../php-parser/lib/PHPParser/TemplateLoader.php |    51 +
 .../php-parser/lib/PHPParser/Unserializer.php   |    13 +
 .../lib/PHPParser/Unserializer/XML.php          |   133 +
 vendor/nikic/php-parser/lib/bootstrap.php       |    14 +
 vendor/nikic/php-parser/phpunit.xml.dist        |    24 +
 .../test/PHPParser/Tests/Builder/ClassTest.php  |    91 +
 .../PHPParser/Tests/Builder/FunctionTest.php    |    70 +
 .../PHPParser/Tests/Builder/InterfaceTest.php   |    91 +
 .../test/PHPParser/Tests/Builder/MethodTest.php |   137 +
 .../test/PHPParser/Tests/Builder/ParamTest.php  |   118 +
 .../PHPParser/Tests/Builder/PropertyTest.php    |   123 +
 .../test/PHPParser/Tests/BuilderFactoryTest.php |    23 +
 .../test/PHPParser/Tests/CodeTestAbstract.php   |    51 +
 .../test/PHPParser/Tests/CommentTest.php        |    69 +
 .../test/PHPParser/Tests/ErrorTest.php          |    33 +
 .../PHPParser/Tests/Lexer/EmulativeTest.php     |   103 +
 .../test/PHPParser/Tests/LexerTest.php          |   145 +
 .../test/PHPParser/Tests/Node/NameTest.php      |   130 +
 .../PHPParser/Tests/Node/Scalar/StringTest.php  |    59 +
 .../Tests/Node/Stmt/ClassMethodTest.php         |    35 +
 .../PHPParser/Tests/Node/Stmt/ClassTest.php     |    40 +
 .../PHPParser/Tests/Node/Stmt/PropertyTest.php  |    34 +
 .../test/PHPParser/Tests/NodeAbstractTest.php   |    96 +
 .../test/PHPParser/Tests/NodeDumperTest.php     |    66 +
 .../test/PHPParser/Tests/NodeTraverserTest.php  |   144 +
 .../Tests/NodeVisitor/NameResolverTest.php      |   246 +
 .../test/PHPParser/Tests/ParserTest.php         |    44 +
 .../test/PHPParser/Tests/PrettyPrinterTest.php  |    42 +
 .../test/PHPParser/Tests/Serializer/XMLTest.php |   152 +
 .../test/PHPParser/Tests/TemplateLoaderTest.php |    48 +
 .../test/PHPParser/Tests/TemplateTest.php       |    59 +
 .../PHPParser/Tests/Unserializer/XMLTest.php    |   141 +
 .../test/code/parser/expr/arrayDef.test         |   139 +
 .../test/code/parser/expr/assign.test           |   225 +
 .../php-parser/test/code/parser/expr/cast.test  |    72 +
 .../php-parser/test/code/parser/expr/clone.test |    13 +
 .../test/code/parser/expr/closure.test          |    94 +
 .../test/code/parser/expr/comparison.test       |    98 +
 .../test/code/parser/expr/errorSuppress.test    |    12 +
 .../php-parser/test/code/parser/expr/exit.test  |    34 +
 .../code/parser/expr/fetchAndCall/args.test     |    71 +
 .../parser/expr/fetchAndCall/constFetch.test    |    33 +
 .../parser/expr/fetchAndCall/constantDeref.test |   181 +
 .../code/parser/expr/fetchAndCall/funcCall.test |   117 +
 .../code/parser/expr/fetchAndCall/newDeref.test |    70 +
 .../parser/expr/fetchAndCall/objectAccess.test  |   118 +
 .../expr/fetchAndCall/simpleArrayAccess.test    |    62 +
 .../parser/expr/fetchAndCall/staticCall.test    |   151 +
 .../expr/fetchAndCall/staticPropertyFetch.test  |    71 +
 .../test/code/parser/expr/includeAndEval.test   |    40 +
 .../test/code/parser/expr/issetAndEmpty.test    |    75 +
 .../php-parser/test/code/parser/expr/logic.test |   138 +
 .../php-parser/test/code/parser/expr/math.test  |   187 +
 .../php-parser/test/code/parser/expr/new.test   |   139 +
 .../php-parser/test/code/parser/expr/print.test |    12 +
 .../test/code/parser/expr/shellExec.test        |    38 +
 .../test/code/parser/expr/ternary.test          |    72 +
 .../test/code/parser/expr/variable.test         |    54 +
 .../test/code/parser/scalar/constantString.test |    53 +
 .../test/code/parser/scalar/docString.test      |    67 +
 .../test/code/parser/scalar/encapsedString.test |   148 +
 .../test/code/parser/scalar/float.test          |    70 +
 .../php-parser/test/code/parser/scalar/int.test |    47 +
 .../test/code/parser/scalar/magicConst.test     |    31 +
 .../code/parser/stmt/blocklessStatement.test    |   112 +
 .../test/code/parser/stmt/class/abstract.test   |    37 +
 .../code/parser/stmt/class/conditional.test     |    33 +
 .../test/code/parser/stmt/class/final.test      |    17 +
 .../test/code/parser/stmt/class/interface.test  |    35 +
 .../code/parser/stmt/class/modifier.test-fail   |    29 +
 .../test/code/parser/stmt/class/name.test-fail  |    61 +
 .../test/code/parser/stmt/class/php4Style.test  |    38 +
 .../test/code/parser/stmt/class/simple.test     |   139 +
 .../parser/stmt/class/staticMethod.test-fail    |    25 +
 .../test/code/parser/stmt/class/trait.test      |   159 +
 .../php-parser/test/code/parser/stmt/const.test |    40 +
 .../test/code/parser/stmt/controlFlow.test      |    55 +
 .../test/code/parser/stmt/declare.test          |    47 +
 .../php-parser/test/code/parser/stmt/echo.test  |    32 +
 .../test/code/parser/stmt/function/byRef.test   |    37 +
 .../code/parser/stmt/function/conditional.test  |    32 +
 .../parser/stmt/function/defaultValues.test     |   138 +
 .../code/parser/stmt/function/generator.test    |   227 +
 .../code/parser/stmt/function/specialVars.test  |    50 +
 .../code/parser/stmt/function/typeHints.test    |    44 +
 .../test/code/parser/stmt/haltCompiler.test     |    55 +
 .../stmt/haltCompilerInvalidSyntax.test-fail    |     6 +
 .../stmt/haltCompilerOutermostScope.test-fail   |     8 +
 .../php-parser/test/code/parser/stmt/if.test    |    95 +
 .../test/code/parser/stmt/inlineHTML.test       |    27 +
 .../test/code/parser/stmt/loop/do.test          |    17 +
 .../test/code/parser/stmt/loop/for.test         |    86 +
 .../test/code/parser/stmt/loop/foreach.test     |   139 +
 .../test/code/parser/stmt/loop/while.test       |    25 +
 .../test/code/parser/stmt/namespace/alias.test  |    85 +
 .../test/code/parser/stmt/namespace/braced.test |    42 +
 .../code/parser/stmt/namespace/mix.test-fail    |    13 +
 .../test/code/parser/stmt/namespace/name.test   |    42 +
 .../code/parser/stmt/namespace/name.test-fail   |    25 +
 .../code/parser/stmt/namespace/nested.test-fail |    10 +
 .../code/parser/stmt/namespace/notBraced.test   |    45 +
 .../code/parser/stmt/namespace/outsideStmt.test |    37 +
 .../parser/stmt/namespace/outsideStmt.test-fail |    13 +
 .../test/code/parser/stmt/switch.test           |    67 +
 .../test/code/parser/stmt/tryCatch.test         |   114 +
 .../test/code/parser/stmt/tryCatch.test-fail    |     7 +
 .../php-parser/test/code/parser/stmt/unset.test |    26 +
 .../test/code/prettyPrinter/closure.test        |    18 +
 .../test/code/prettyPrinter/comments.test       |    56 +
 .../test/code/prettyPrinter/include.test        |     7 +
 .../inlineHTMLandPHPtest.file-test              |    52 +
 .../test/code/prettyPrinter/namespaces.test     |    58 +
 .../code/prettyPrinter/onlyInlineHTML.file-test |    11 +
 .../test/code/prettyPrinter/onlyPHP.file-test   |    11 +
 .../test/code/prettyPrinter/parentheses.test    |    45 +
 .../test/code/prettyPrinter/switch.test         |    35 +
 vendor/nikic/php-parser/test_old/run.php        |   189 +
 vendor/patchwork/utf8/.travis.yml               |    18 +
 vendor/patchwork/utf8/CHANGELOG.md              |   172 +
 vendor/patchwork/utf8/README.md                 |   153 +
 vendor/patchwork/utf8/class/Normalizer.php      |    17 +
 .../utf8/class/Patchwork/PHP/Shim/Iconv.php     |   646 +
 .../utf8/class/Patchwork/PHP/Shim/Intl.php      |   156 +
 .../utf8/class/Patchwork/PHP/Shim/Mbstring.php  |   523 +
 .../class/Patchwork/PHP/Shim/Normalizer.php     |   295 +
 .../utf8/class/Patchwork/PHP/Shim/Xml.php       |    61 +
 .../Patchwork/PHP/Shim/charset/from.big5.ser    |     1 +
 .../Patchwork/PHP/Shim/charset/from.cp037.ser   |   Bin 0 -> 4192 bytes
 .../Patchwork/PHP/Shim/charset/from.cp1006.ser  |   Bin 0 -> 4273 bytes
 .../Patchwork/PHP/Shim/charset/from.cp1026.ser  |   Bin 0 -> 4192 bytes
 .../Patchwork/PHP/Shim/charset/from.cp424.ser   |   Bin 0 -> 3547 bytes
 .../Patchwork/PHP/Shim/charset/from.cp437.ser   |   Bin 0 -> 4254 bytes
 .../Patchwork/PHP/Shim/charset/from.cp500.ser   |   Bin 0 -> 4192 bytes
 .../Patchwork/PHP/Shim/charset/from.cp737.ser   |   Bin 0 -> 4247 bytes
 .../Patchwork/PHP/Shim/charset/from.cp775.ser   |   Bin 0 -> 4228 bytes
 .../Patchwork/PHP/Shim/charset/from.cp850.ser   |   Bin 0 -> 4222 bytes
 .../Patchwork/PHP/Shim/charset/from.cp852.ser   |   Bin 0 -> 4221 bytes
 .../Patchwork/PHP/Shim/charset/from.cp855.ser   |   Bin 0 -> 4222 bytes
 .../Patchwork/PHP/Shim/charset/from.cp856.ser   |   Bin 0 -> 3525 bytes
 .../Patchwork/PHP/Shim/charset/from.cp857.ser   |   Bin 0 -> 4170 bytes
 .../Patchwork/PHP/Shim/charset/from.cp860.ser   |   Bin 0 -> 4253 bytes
 .../Patchwork/PHP/Shim/charset/from.cp861.ser   |   Bin 0 -> 4254 bytes
 .../Patchwork/PHP/Shim/charset/from.cp862.ser   |   Bin 0 -> 4254 bytes
 .../Patchwork/PHP/Shim/charset/from.cp863.ser   |   Bin 0 -> 4254 bytes
 .../Patchwork/PHP/Shim/charset/from.cp864.ser   |   Bin 0 -> 4180 bytes
 .../Patchwork/PHP/Shim/charset/from.cp865.ser   |   Bin 0 -> 4254 bytes
 .../Patchwork/PHP/Shim/charset/from.cp866.ser   |   Bin 0 -> 4244 bytes
 .../Patchwork/PHP/Shim/charset/from.cp869.ser   |   Bin 0 -> 4071 bytes
 .../Patchwork/PHP/Shim/charset/from.cp874.ser   |   Bin 0 -> 3761 bytes
 .../Patchwork/PHP/Shim/charset/from.cp875.ser   |   Bin 0 -> 4189 bytes
 .../Patchwork/PHP/Shim/charset/from.cp932.ser   |   Bin 0 -> 149785 bytes
 .../Patchwork/PHP/Shim/charset/from.cp936.ser   |   Bin 0 -> 415908 bytes
 .../Patchwork/PHP/Shim/charset/from.cp949.ser   |   Bin 0 -> 325759 bytes
 .../Patchwork/PHP/Shim/charset/from.cp950.ser   |   Bin 0 -> 258514 bytes
 .../Patchwork/PHP/Shim/charset/from.gsm0338.ser |   Bin 0 -> 2228 bytes
 .../PHP/Shim/charset/from.iso-8859-1.ser        |   Bin 0 -> 4192 bytes
 .../PHP/Shim/charset/from.iso-8859-10.ser       |   Bin 0 -> 4193 bytes
 .../PHP/Shim/charset/from.iso-8859-11.ser       |   Bin 0 -> 4143 bytes
 .../PHP/Shim/charset/from.iso-8859-13.ser       |   Bin 0 -> 4196 bytes
 .../PHP/Shim/charset/from.iso-8859-14.ser       |   Bin 0 -> 4214 bytes
 .../PHP/Shim/charset/from.iso-8859-15.ser       |   Bin 0 -> 4193 bytes
 .../PHP/Shim/charset/from.iso-8859-16.ser       |   Bin 0 -> 4195 bytes
 .../PHP/Shim/charset/from.iso-8859-2.ser        |   Bin 0 -> 4192 bytes
 .../PHP/Shim/charset/from.iso-8859-3.ser        |   Bin 0 -> 4073 bytes
 .../PHP/Shim/charset/from.iso-8859-4.ser        |   Bin 0 -> 4192 bytes
 .../PHP/Shim/charset/from.iso-8859-5.ser        |   Bin 0 -> 4193 bytes
 .../PHP/Shim/charset/from.iso-8859-6.ser        |   Bin 0 -> 3427 bytes
 .../PHP/Shim/charset/from.iso-8859-7.ser        |   Bin 0 -> 4093 bytes
 .../PHP/Shim/charset/from.iso-8859-8.ser        |   Bin 0 -> 3583 bytes
 .../PHP/Shim/charset/from.iso-8859-9.ser        |   Bin 0 -> 4192 bytes
 .../Patchwork/PHP/Shim/charset/from.koi8-r.ser  |   Bin 0 -> 4248 bytes
 .../Patchwork/PHP/Shim/charset/from.koi8-u.ser  |   Bin 0 -> 4240 bytes
 .../Patchwork/PHP/Shim/charset/from.mazovia.ser |   Bin 0 -> 4254 bytes
 .../PHP/Shim/charset/from.nextstep.ser          |   Bin 0 -> 4211 bytes
 .../Patchwork/PHP/Shim/charset/from.stdenc.ser  |     1 +
 .../Patchwork/PHP/Shim/charset/from.symbol.ser  |     1 +
 .../Patchwork/PHP/Shim/charset/from.turkish.ser |   Bin 0 -> 4185 bytes
 .../PHP/Shim/charset/from.us-ascii-quotes.ser   |   Bin 0 -> 2020 bytes
 .../PHP/Shim/charset/from.us-ascii.ser          |   Bin 0 -> 2016 bytes
 .../PHP/Shim/charset/from.windows-1250.ser      |   Bin 0 -> 4124 bytes
 .../PHP/Shim/charset/from.windows-1251.ser      |   Bin 0 -> 4193 bytes
 .../PHP/Shim/charset/from.windows-1252.ser      |   Bin 0 -> 4124 bytes
 .../PHP/Shim/charset/from.windows-1253.ser      |   Bin 0 -> 3921 bytes
 .../PHP/Shim/charset/from.windows-1254.ser      |   Bin 0 -> 4090 bytes
 .../PHP/Shim/charset/from.windows-1255.ser      |   Bin 0 -> 3821 bytes
 .../PHP/Shim/charset/from.windows-1256.ser      |   Bin 0 -> 4213 bytes
 .../PHP/Shim/charset/from.windows-1257.ser      |   Bin 0 -> 4005 bytes
 .../PHP/Shim/charset/from.windows-1258.ser      |   Bin 0 -> 4057 bytes
 .../PHP/Shim/charset/from.x-mac-ce.ser          |   Bin 0 -> 4214 bytes
 .../PHP/Shim/charset/from.x-mac-cyrillic.ser    |   Bin 0 -> 4212 bytes
 .../PHP/Shim/charset/from.x-mac-greek.ser       |   Bin 0 -> 4190 bytes
 .../PHP/Shim/charset/from.x-mac-icelandic.ser   |   Bin 0 -> 4201 bytes
 .../PHP/Shim/charset/from.x-mac-roman.ser       |   Bin 0 -> 4207 bytes
 .../PHP/Shim/charset/from.zdingbat.ser          |     1 +
 .../Patchwork/PHP/Shim/charset/to.gsm0338.ser   |   Bin 0 -> 2459 bytes
 .../Patchwork/PHP/Shim/charset/to.mazovia.ser   |   Bin 0 -> 4232 bytes
 .../Patchwork/PHP/Shim/charset/to.stdenc.ser    |     1 +
 .../Patchwork/PHP/Shim/charset/to.symbol.ser    |     1 +
 .../Patchwork/PHP/Shim/charset/to.zdingbat.ser  |     1 +
 .../Patchwork/PHP/Shim/charset/translit.ser     |     1 +
 .../PHP/Shim/unidata/canonicalComposition.ser   |     1 +
 .../PHP/Shim/unidata/canonicalDecomposition.ser |     1 +
 .../PHP/Shim/unidata/combiningClass.ser         |     1 +
 .../Shim/unidata/compatibilityDecomposition.ser |     1 +
 .../Patchwork/PHP/Shim/unidata/lowerCase.ser    |     1 +
 .../Patchwork/PHP/Shim/unidata/upperCase.ser    |     1 +
 .../utf8/class/Patchwork/TurkishUtf8.php        |   112 +
 vendor/patchwork/utf8/class/Patchwork/Utf8.php  |   657 +
 .../utf8/class/Patchwork/Utf8/BestFit.php       |    68 +
 .../utf8/class/Patchwork/Utf8/Bootup.php        |   243 +
 .../utf8/class/Patchwork/Utf8/Bootup/iconv.php  |    48 +
 .../utf8/class/Patchwork/Utf8/Bootup/intl.php   |    28 +
 .../class/Patchwork/Utf8/Bootup/mbstring.php    |    50 +
 .../class/Patchwork/Utf8/Bootup/utf8_encode.php |    14 +
 .../Patchwork/Utf8/WindowsStreamWrapper.php     |   405 +
 .../Patchwork/Utf8/data/caseFolding_full.ser    |     1 +
 .../Patchwork/Utf8/data/to.bestfit1250.ser      |   Bin 0 -> 11885 bytes
 .../Patchwork/Utf8/data/to.bestfit1251.ser      |   Bin 0 -> 10912 bytes
 .../Patchwork/Utf8/data/to.bestfit1252.ser      |   Bin 0 -> 11968 bytes
 .../Patchwork/Utf8/data/to.bestfit1253.ser      |   Bin 0 -> 10587 bytes
 .../Patchwork/Utf8/data/to.bestfit1254.ser      |   Bin 0 -> 11902 bytes
 .../Patchwork/Utf8/data/to.bestfit1255.ser      |   Bin 0 -> 5948 bytes
 .../Patchwork/Utf8/data/to.bestfit1256.ser      |   Bin 0 -> 9202 bytes
 .../Patchwork/Utf8/data/to.bestfit1257.ser      |   Bin 0 -> 5903 bytes
 .../Patchwork/Utf8/data/to.bestfit1258.ser      |   Bin 0 -> 5902 bytes
 .../class/Patchwork/Utf8/data/to.bestfit874.ser |   Bin 0 -> 6760 bytes
 .../class/Patchwork/Utf8/data/to.bestfit932.ser |   Bin 0 -> 179471 bytes
 .../class/Patchwork/Utf8/data/to.bestfit936.ser |   Bin 0 -> 464524 bytes
 .../class/Patchwork/Utf8/data/to.bestfit949.ser |   Bin 0 -> 336734 bytes
 .../class/Patchwork/Utf8/data/to.bestfit950.ser |   Bin 0 -> 385467 bytes
 .../Patchwork/Utf8/data/translit_extra.ser      |     1 +
 vendor/patchwork/utf8/composer.json             |    35 +
 vendor/patchwork/utf8/phpunit.xml.dist          |    21 +
 vendor/phpseclib/phpseclib/.gitattributes       |     1 +
 vendor/phpseclib/phpseclib/.gitignore           |     2 +
 vendor/phpseclib/phpseclib/.scrutinizer.yml     |     7 +
 vendor/phpseclib/phpseclib/.travis.yml          |    35 +
 vendor/phpseclib/phpseclib/AUTHORS              |     5 +
 vendor/phpseclib/phpseclib/CHANGELOG.md         |    83 +
 vendor/phpseclib/phpseclib/LICENSE              |    21 +
 vendor/phpseclib/phpseclib/README.md            |    65 +
 vendor/phpseclib/phpseclib/build/build.xml      |    32 +
 .../build/code-sniffer-ruleset-tests.xml        |    21 +
 .../phpseclib/build/code-sniffer-ruleset.xml    |    75 +
 vendor/phpseclib/phpseclib/build/sami.conf.php  |    31 +
 vendor/phpseclib/phpseclib/composer.json        |    80 +
 vendor/phpseclib/phpseclib/composer.lock        |  1380 +
 .../phpseclib/phpseclib/phpseclib/Crypt/AES.php |   207 +
 .../phpseclib/phpseclib/Crypt/Base.php          |  2011 +
 .../phpseclib/phpseclib/Crypt/Blowfish.php      |   644 +
 .../phpseclib/phpseclib/phpseclib/Crypt/DES.php |  1506 +
 .../phpseclib/phpseclib/Crypt/Hash.php          |   841 +
 .../phpseclib/phpseclib/phpseclib/Crypt/RC2.php |   652 +
 .../phpseclib/phpseclib/phpseclib/Crypt/RC4.php |   329 +
 .../phpseclib/phpseclib/phpseclib/Crypt/RSA.php |  2997 ++
 .../phpseclib/phpseclib/Crypt/Random.php        |   300 +
 .../phpseclib/phpseclib/Crypt/Rijndael.php      |  1348 +
 .../phpseclib/phpseclib/Crypt/TripleDES.php     |   428 +
 .../phpseclib/phpseclib/Crypt/Twofish.php       |   895 +
 .../phpseclib/phpseclib/phpseclib/File/ANSI.php |   559 +
 .../phpseclib/phpseclib/phpseclib/File/ASN1.php |  1358 +
 .../phpseclib/phpseclib/phpseclib/File/X509.php |  4583 +++
 .../phpseclib/phpseclib/Math/BigInteger.php     |  3758 ++
 .../phpseclib/phpseclib/phpseclib/Net/SCP.php   |   360 +
 .../phpseclib/phpseclib/phpseclib/Net/SFTP.php  |  2778 ++
 .../phpseclib/phpseclib/Net/SFTP/Stream.php     |   801 +
 .../phpseclib/phpseclib/phpseclib/Net/SSH1.php  |  1651 +
 .../phpseclib/phpseclib/phpseclib/Net/SSH2.php  |  3878 ++
 .../phpseclib/phpseclib/System/SSH/Agent.php    |   313 +
 .../phpseclib/phpseclib/System/SSH_Agent.php    |    39 +
 .../phpseclib/phpseclib/phpseclib/openssl.cnf   |     6 +
 vendor/phpseclib/phpseclib/phpunit.xml.dist     |    21 +
 .../Functional/Net/SCPSSH2UserStoryTest.php     |    88 +
 .../tests/Functional/Net/SFTPLargeFileTest.php  |    74 +
 .../tests/Functional/Net/SFTPUserStoryTest.php  |   478 +
 .../tests/Functional/Net/SSH2AgentTest.php      |    31 +
 .../phpseclib/tests/Functional/Net/SSH2Test.php |    88 +
 .../tests/PhpseclibFunctionalTestCase.php       |    72 +
 .../phpseclib/tests/PhpseclibTestCase.php       |   104 +
 .../tests/Unit/Crypt/AES/InternalTest.php       |    17 +
 .../tests/Unit/Crypt/AES/McryptTest.php         |    21 +
 .../phpseclib/tests/Unit/Crypt/AES/TestCase.php |   107 +
 .../phpseclib/tests/Unit/Crypt/Hash/MD5Test.php |    47 +
 .../tests/Unit/Crypt/Hash/SHA256Test.php        |    79 +
 .../tests/Unit/Crypt/Hash/SHA256_96Test.php     |    30 +
 .../tests/Unit/Crypt/Hash/SHA512Test.php        |    79 +
 .../tests/Unit/Crypt/Hash/SHA512_96Test.php     |    30 +
 .../tests/Unit/Crypt/Hash/TestCase.php          |    52 +
 .../tests/Unit/Crypt/RSA/LoadKeyTest.php        |   304 +
 .../phpseclib/tests/Unit/Crypt/RandomTest.php   |    53 +
 .../phpseclib/tests/Unit/File/ASN1/FE.pdf.p7m   |   Bin 0 -> 14223 bytes
 .../phpseclib/tests/Unit/File/ASN1Test.php      |   292 +
 .../phpseclib/tests/Unit/File/X509/CSRTest.php  |    31 +
 .../tests/Unit/File/X509/SPKACTest.php          |    99 +
 .../tests/Unit/Math/BigInteger/BCMathTest.php   |    20 +
 .../tests/Unit/Math/BigInteger/GMPTest.php      |    20 +
 .../Math/BigInteger/InternalOpenSSLTest.php     |    20 +
 .../tests/Unit/Math/BigInteger/InternalTest.php |    24 +
 .../tests/Unit/Math/BigInteger/TestCase.php     |   361 +
 .../phpseclib/tests/Unit/Net/SFTPStreamTest.php |    33 +
 .../phpseclib/tests/Unit/Net/SSH1Test.php       |    41 +
 .../phpseclib/tests/Unit/Net/SSH2Test.php       |   114 +
 vendor/phpseclib/phpseclib/tests/bootstrap.php  |    31 +
 .../phpseclib/travis/code_coverage_id_rsa       |    30 +
 .../phpseclib/travis/install-php-extensions.sh  |    30 +
 .../phpseclib/phpseclib/travis/run-phpunit.sh   |    34 +
 .../phpseclib/travis/setup-composer.sh          |     3 +
 .../phpseclib/travis/setup-secure-shell.sh      |    31 +
 .../travis/upload-code-coverage-html.sh         |    50 +
 .../travis/upload-code-coverage-scrutinizer.sh  |    13 +
 vendor/predis/predis/.gitignore                 |     7 +
 vendor/predis/predis/.travis.yml                |    23 +
 vendor/predis/predis/CHANGELOG.NAMING.md        |    53 +
 vendor/predis/predis/CHANGELOG.md               |   685 +
 vendor/predis/predis/CONTRIBUTING.md            |    44 +
 vendor/predis/predis/FAQ.md                     |   169 +
 vendor/predis/predis/LICENSE                    |    22 +
 vendor/predis/predis/README.md                  |   390 +
 vendor/predis/predis/VERSION                    |     1 +
 vendor/predis/predis/autoload.php               |    14 +
 vendor/predis/predis/bin/create-command-test    |   271 +
 vendor/predis/predis/bin/create-pear            |   221 +
 vendor/predis/predis/bin/create-phar            |    71 +
 vendor/predis/predis/bin/create-single-file     |   663 +
 vendor/predis/predis/composer.json              |    28 +
 .../examples/CustomDistributionStrategy.php     |    94 +
 .../predis/predis/examples/DispatcherLoop.php   |    78 +
 vendor/predis/predis/examples/KeyPrefixes.php   |    37 +
 .../predis/examples/MasterSlaveReplication.php  |    52 +
 .../examples/MasterSlaveReplicationComplex.php  |    85 +
 .../predis/predis/examples/MonitorContext.php   |    44 +
 .../predis/examples/MultiBulkReplyIterators.php |    56 +
 .../predis/examples/MultipleSetAndGet.php       |    38 +
 .../predis/predis/examples/PipelineContext.php  |    47 +
 vendor/predis/predis/examples/PubSubContext.php |    59 +
 .../examples/RedisCollectionsIterators.php      |    96 +
 .../predis/examples/ServerSideScripting.php     |    66 +
 .../predis/predis/examples/SessionHandler.php   |    39 +
 .../predis/examples/SharedConfigurations.php    |    33 +
 .../examples/SimpleDebuggableConnection.php     |    88 +
 .../predis/predis/examples/SimpleSetAndGet.php  |    25 +
 .../predis/examples/TransactionWithCAS.php      |    51 +
 vendor/predis/predis/lib/Predis/Autoloader.php  |    62 +
 .../predis/lib/Predis/BasicClientInterface.php  |    31 +
 vendor/predis/predis/lib/Predis/Client.php      |   465 +
 .../predis/lib/Predis/ClientException.php       |    21 +
 .../predis/lib/Predis/ClientInterface.php       |    66 +
 .../Cluster/CommandHashStrategyInterface.php    |    42 +
 .../DistributionStrategyInterface.php           |    53 +
 .../Cluster/Distribution/EmptyRingException.php |    21 +
 .../Predis/Cluster/Distribution/HashRing.php    |   246 +
 .../Cluster/Distribution/KetamaPureRing.php     |    71 +
 .../Predis/Cluster/Hash/CRC16HashGenerator.php  |    72 +
 .../Cluster/Hash/HashGeneratorInterface.php     |    29 +
 .../Cluster/PredisClusterHashStrategy.php       |   398 +
 .../Predis/Cluster/RedisClusterHashStrategy.php |    50 +
 .../Collection/Iterator/CursorBasedIterator.php |   191 +
 .../lib/Predis/Collection/Iterator/HashKey.php  |    56 +
 .../lib/Predis/Collection/Iterator/Keyspace.php |    43 +
 .../lib/Predis/Collection/Iterator/ListKey.php  |   174 +
 .../lib/Predis/Collection/Iterator/SetKey.php   |    47 +
 .../Predis/Collection/Iterator/SortedSetKey.php |    58 +
 .../lib/Predis/Command/AbstractCommand.php      |   158 +
 .../lib/Predis/Command/CommandInterface.php     |    77 +
 .../lib/Predis/Command/ConnectionAuth.php       |    27 +
 .../lib/Predis/Command/ConnectionEcho.php       |    27 +
 .../lib/Predis/Command/ConnectionPing.php       |    35 +
 .../lib/Predis/Command/ConnectionQuit.php       |    27 +
 .../lib/Predis/Command/ConnectionSelect.php     |    27 +
 .../predis/lib/Predis/Command/HashDelete.php    |    35 +
 .../predis/lib/Predis/Command/HashExists.php    |    35 +
 .../predis/lib/Predis/Command/HashGet.php       |    27 +
 .../predis/lib/Predis/Command/HashGetAll.php    |    41 +
 .../lib/Predis/Command/HashGetMultiple.php      |    35 +
 .../lib/Predis/Command/HashIncrementBy.php      |    27 +
 .../lib/Predis/Command/HashIncrementByFloat.php |    27 +
 .../predis/lib/Predis/Command/HashKeys.php      |    27 +
 .../predis/lib/Predis/Command/HashLength.php    |    27 +
 .../predis/lib/Predis/Command/HashScan.php      |    84 +
 .../predis/lib/Predis/Command/HashSet.php       |    35 +
 .../lib/Predis/Command/HashSetMultiple.php      |    47 +
 .../lib/Predis/Command/HashSetPreserve.php      |    35 +
 .../predis/lib/Predis/Command/HashValues.php    |    27 +
 .../lib/Predis/Command/HyperLogLogAdd.php       |    43 +
 .../lib/Predis/Command/HyperLogLogCount.php     |    43 +
 .../lib/Predis/Command/HyperLogLogMerge.php     |    43 +
 .../predis/lib/Predis/Command/KeyDelete.php     |    43 +
 .../predis/lib/Predis/Command/KeyDump.php       |    27 +
 .../predis/lib/Predis/Command/KeyExists.php     |    35 +
 .../predis/lib/Predis/Command/KeyExpire.php     |    35 +
 .../predis/lib/Predis/Command/KeyExpireAt.php   |    35 +
 .../predis/lib/Predis/Command/KeyKeys.php       |    27 +
 .../predis/lib/Predis/Command/KeyKeysV12x.php   |    28 +
 .../predis/lib/Predis/Command/KeyMove.php       |    35 +
 .../predis/lib/Predis/Command/KeyPersist.php    |    35 +
 .../lib/Predis/Command/KeyPreciseExpire.php     |    27 +
 .../lib/Predis/Command/KeyPreciseExpireAt.php   |    27 +
 .../lib/Predis/Command/KeyPreciseTimeToLive.php |    27 +
 .../predis/lib/Predis/Command/KeyRandom.php     |    35 +
 .../predis/lib/Predis/Command/KeyRename.php     |    35 +
 .../lib/Predis/Command/KeyRenamePreserve.php    |    35 +
 .../predis/lib/Predis/Command/KeyRestore.php    |    27 +
 .../predis/lib/Predis/Command/KeyScan.php       |    76 +
 .../predis/lib/Predis/Command/KeySort.php       |   117 +
 .../predis/lib/Predis/Command/KeyTimeToLive.php |    27 +
 .../predis/lib/Predis/Command/KeyType.php       |    27 +
 .../predis/lib/Predis/Command/ListIndex.php     |    27 +
 .../predis/lib/Predis/Command/ListInsert.php    |    27 +
 .../predis/lib/Predis/Command/ListLength.php    |    27 +
 .../predis/lib/Predis/Command/ListPopFirst.php  |    27 +
 .../lib/Predis/Command/ListPopFirstBlocking.php |    48 +
 .../predis/lib/Predis/Command/ListPopLast.php   |    27 +
 .../lib/Predis/Command/ListPopLastBlocking.php  |    27 +
 .../lib/Predis/Command/ListPopLastPushHead.php  |    35 +
 .../Command/ListPopLastPushHeadBlocking.php     |    35 +
 .../predis/lib/Predis/Command/ListPushHead.php  |    27 +
 .../predis/lib/Predis/Command/ListPushHeadX.php |    27 +
 .../predis/lib/Predis/Command/ListPushTail.php  |    35 +
 .../predis/lib/Predis/Command/ListPushTailX.php |    27 +
 .../predis/lib/Predis/Command/ListRange.php     |    27 +
 .../predis/lib/Predis/Command/ListRemove.php    |    27 +
 .../predis/lib/Predis/Command/ListSet.php       |    27 +
 .../predis/lib/Predis/Command/ListTrim.php      |    27 +
 .../predis/lib/Predis/Command/PrefixHelpers.php |   108 +
 .../lib/Predis/Command/PrefixableCommand.php    |    31 +
 .../Command/PrefixableCommandInterface.php      |    27 +
 .../Processor/CommandProcessingInterface.php    |    34 +
 .../CommandProcessorChainInterface.php          |    42 +
 .../Processor/CommandProcessorInterface.php     |    29 +
 .../Command/Processor/KeyPrefixProcessor.php    |    72 +
 .../Predis/Command/Processor/ProcessorChain.php |   130 +
 .../predis/lib/Predis/Command/PubSubPublish.php |    27 +
 .../lib/Predis/Command/PubSubSubscribe.php      |    43 +
 .../Predis/Command/PubSubSubscribeByPattern.php |    27 +
 .../lib/Predis/Command/PubSubUnsubscribe.php    |    43 +
 .../Command/PubSubUnsubscribeByPattern.php      |    27 +
 .../predis/lib/Predis/Command/RawCommand.php    |   157 +
 .../lib/Predis/Command/ScriptedCommand.php      |    76 +
 .../Command/ServerBackgroundRewriteAOF.php      |    35 +
 .../lib/Predis/Command/ServerBackgroundSave.php |    35 +
 .../predis/lib/Predis/Command/ServerClient.php  |    73 +
 .../predis/lib/Predis/Command/ServerCommand.php |    27 +
 .../predis/lib/Predis/Command/ServerConfig.php  |    48 +
 .../lib/Predis/Command/ServerDatabaseSize.php   |    27 +
 .../predis/lib/Predis/Command/ServerEval.php    |    51 +
 .../predis/lib/Predis/Command/ServerEvalSHA.php |    37 +
 .../lib/Predis/Command/ServerFlushAll.php       |    27 +
 .../lib/Predis/Command/ServerFlushDatabase.php  |    27 +
 .../predis/lib/Predis/Command/ServerInfo.php    |   111 +
 .../lib/Predis/Command/ServerInfoV26x.php       |    50 +
 .../lib/Predis/Command/ServerLastSave.php       |    27 +
 .../predis/lib/Predis/Command/ServerMonitor.php |    27 +
 .../predis/lib/Predis/Command/ServerObject.php  |    27 +
 .../predis/lib/Predis/Command/ServerSave.php    |    27 +
 .../predis/lib/Predis/Command/ServerScript.php  |    27 +
 .../lib/Predis/Command/ServerShutdown.php       |    27 +
 .../predis/lib/Predis/Command/ServerSlaveOf.php |    39 +
 .../predis/lib/Predis/Command/ServerSlowlog.php |    50 +
 .../predis/lib/Predis/Command/ServerTime.php    |    27 +
 .../predis/predis/lib/Predis/Command/SetAdd.php |    35 +
 .../lib/Predis/Command/SetCardinality.php       |    27 +
 .../predis/lib/Predis/Command/SetDifference.php |    27 +
 .../lib/Predis/Command/SetDifferenceStore.php   |    27 +
 .../lib/Predis/Command/SetIntersection.php      |    43 +
 .../lib/Predis/Command/SetIntersectionStore.php |    47 +
 .../predis/lib/Predis/Command/SetIsMember.php   |    35 +
 .../predis/lib/Predis/Command/SetMembers.php    |    27 +
 .../predis/lib/Predis/Command/SetMove.php       |    43 +
 .../predis/predis/lib/Predis/Command/SetPop.php |    27 +
 .../lib/Predis/Command/SetRandomMember.php      |    27 +
 .../predis/lib/Predis/Command/SetRemove.php     |    35 +
 .../predis/lib/Predis/Command/SetScan.php       |    76 +
 .../predis/lib/Predis/Command/SetUnion.php      |    27 +
 .../predis/lib/Predis/Command/SetUnionStore.php |    27 +
 .../predis/lib/Predis/Command/StringAppend.php  |    27 +
 .../lib/Predis/Command/StringBitCount.php       |    27 +
 .../predis/lib/Predis/Command/StringBitOp.php   |    49 +
 .../lib/Predis/Command/StringDecrement.php      |    27 +
 .../lib/Predis/Command/StringDecrementBy.php    |    27 +
 .../predis/lib/Predis/Command/StringGet.php     |    27 +
 .../predis/lib/Predis/Command/StringGetBit.php  |    27 +
 .../lib/Predis/Command/StringGetMultiple.php    |    43 +
 .../lib/Predis/Command/StringGetRange.php       |    27 +
 .../predis/lib/Predis/Command/StringGetSet.php  |    27 +
 .../lib/Predis/Command/StringIncrement.php      |    27 +
 .../lib/Predis/Command/StringIncrementBy.php    |    27 +
 .../Predis/Command/StringIncrementByFloat.php   |    27 +
 .../Predis/Command/StringPreciseSetExpire.php   |    27 +
 .../predis/lib/Predis/Command/StringSet.php     |    27 +
 .../predis/lib/Predis/Command/StringSetBit.php  |    27 +
 .../lib/Predis/Command/StringSetExpire.php      |    27 +
 .../lib/Predis/Command/StringSetMultiple.php    |    55 +
 .../Command/StringSetMultiplePreserve.php       |    35 +
 .../lib/Predis/Command/StringSetPreserve.php    |    35 +
 .../lib/Predis/Command/StringSetRange.php       |    27 +
 .../predis/lib/Predis/Command/StringStrlen.php  |    27 +
 .../predis/lib/Predis/Command/StringSubstr.php  |    27 +
 .../lib/Predis/Command/TransactionDiscard.php   |    27 +
 .../lib/Predis/Command/TransactionExec.php      |    27 +
 .../lib/Predis/Command/TransactionMulti.php     |    27 +
 .../lib/Predis/Command/TransactionUnwatch.php   |    35 +
 .../lib/Predis/Command/TransactionWatch.php     |    55 +
 .../predis/lib/Predis/Command/ZSetAdd.php       |    46 +
 .../lib/Predis/Command/ZSetCardinality.php      |    27 +
 .../predis/lib/Predis/Command/ZSetCount.php     |    27 +
 .../lib/Predis/Command/ZSetIncrementBy.php      |    27 +
 .../Predis/Command/ZSetIntersectionStore.php    |    27 +
 .../predis/lib/Predis/Command/ZSetLexCount.php  |    27 +
 .../predis/lib/Predis/Command/ZSetRange.php     |   103 +
 .../lib/Predis/Command/ZSetRangeByLex.php       |    54 +
 .../lib/Predis/Command/ZSetRangeByScore.php     |    67 +
 .../predis/lib/Predis/Command/ZSetRank.php      |    27 +
 .../predis/lib/Predis/Command/ZSetRemove.php    |    35 +
 .../lib/Predis/Command/ZSetRemoveRangeByLex.php |    27 +
 .../Predis/Command/ZSetRemoveRangeByRank.php    |    27 +
 .../Predis/Command/ZSetRemoveRangeByScore.php   |    27 +
 .../lib/Predis/Command/ZSetReverseRange.php     |    27 +
 .../Predis/Command/ZSetReverseRangeByScore.php  |    27 +
 .../lib/Predis/Command/ZSetReverseRank.php      |    27 +
 .../predis/lib/Predis/Command/ZSetScan.php      |    85 +
 .../predis/lib/Predis/Command/ZSetScore.php     |    27 +
 .../lib/Predis/Command/ZSetUnionStore.php       |    93 +
 .../lib/Predis/CommunicationException.php       |    76 +
 .../Predis/Connection/AbstractConnection.php    |   227 +
 .../AggregatedConnectionInterface.php           |    55 +
 .../Connection/ClusterConnectionInterface.php   |    22 +
 .../ComposableConnectionInterface.php           |    57 +
 .../Connection/ComposableStreamConnection.php   |   135 +
 .../Predis/Connection/ConnectionException.php   |    23 +
 .../lib/Predis/Connection/ConnectionFactory.php |   180 +
 .../Connection/ConnectionFactoryInterface.php   |    53 +
 .../Predis/Connection/ConnectionInterface.php   |    63 +
 .../Predis/Connection/ConnectionParameters.php  |   183 +
 .../ConnectionParametersInterface.php           |    44 +
 .../Connection/MasterSlaveReplication.php       |   261 +
 .../Predis/Connection/PhpiredisConnection.php   |   393 +
 .../Connection/PhpiredisStreamConnection.php    |   242 +
 .../lib/Predis/Connection/PredisCluster.php     |   232 +
 .../lib/Predis/Connection/RedisCluster.php      |   530 +
 .../ReplicationConnectionInterface.php          |    48 +
 .../Connection/SingleConnectionInterface.php    |    58 +
 .../lib/Predis/Connection/StreamConnection.php  |   307 +
 .../lib/Predis/Connection/WebdisConnection.php  |   334 +
 .../lib/Predis/ExecutableContextInterface.php   |    29 +
 vendor/predis/predis/lib/Predis/Helpers.php     |    73 +
 .../lib/Predis/Iterator/MultiBulkResponse.php   |   100 +
 .../Predis/Iterator/MultiBulkResponseSimple.php |    89 +
 .../Predis/Iterator/MultiBulkResponseTuple.php  |    83 +
 .../lib/Predis/Monitor/MonitorContext.php       |   165 +
 .../predis/lib/Predis/NotSupportedException.php |    22 +
 .../predis/lib/Predis/Option/AbstractOption.php |    48 +
 .../predis/lib/Predis/Option/ClientCluster.php  |    96 +
 .../Predis/Option/ClientConnectionFactory.php   |    73 +
 .../lib/Predis/Option/ClientExceptions.php      |    36 +
 .../predis/lib/Predis/Option/ClientOptions.php  |   125 +
 .../Predis/Option/ClientOptionsInterface.php    |    21 +
 .../predis/lib/Predis/Option/ClientPrefix.php   |    30 +
 .../predis/lib/Predis/Option/ClientProfile.php  |    61 +
 .../lib/Predis/Option/ClientReplication.php     |    78 +
 .../predis/lib/Predis/Option/CustomOption.php   |    89 +
 .../lib/Predis/Option/OptionInterface.php       |    47 +
 .../Predis/Pipeline/FireAndForgetExecutor.php   |    55 +
 .../lib/Predis/Pipeline/MultiExecExecutor.php   |   168 +
 .../lib/Predis/Pipeline/PipelineContext.php     |   189 +
 .../Pipeline/PipelineExecutorInterface.php      |    33 +
 .../lib/Predis/Pipeline/SafeClusterExecutor.php |    72 +
 .../predis/lib/Predis/Pipeline/SafeExecutor.php |    57 +
 .../lib/Predis/Pipeline/StandardExecutor.php    |   123 +
 .../predis/lib/Predis/PredisException.php       |    21 +
 .../predis/lib/Predis/Profile/ServerProfile.php |   229 +
 .../Predis/Profile/ServerProfileInterface.php   |    56 +
 .../lib/Predis/Profile/ServerVersion12.php      |   125 +
 .../lib/Predis/Profile/ServerVersion20.php      |   173 +
 .../lib/Predis/Profile/ServerVersion22.php      |   202 +
 .../lib/Predis/Profile/ServerVersion24.php      |   207 +
 .../lib/Predis/Profile/ServerVersion26.php      |   233 +
 .../lib/Predis/Profile/ServerVersion28.php      |   258 +
 .../lib/Predis/Profile/ServerVersion30.php      |   261 +
 .../lib/Predis/Profile/ServerVersionNext.php    |    36 +
 .../Protocol/CommandSerializerInterface.php     |    30 +
 .../Protocol/ComposableProtocolInterface.php    |    50 +
 .../lib/Predis/Protocol/ProtocolException.php   |    24 +
 .../lib/Predis/Protocol/ProtocolInterface.php   |    40 +
 .../Protocol/ResponseHandlerInterface.php       |    32 +
 .../Predis/Protocol/ResponseReaderInterface.php |    31 +
 .../Protocol/Text/ComposableTextProtocol.php    |   129 +
 .../Protocol/Text/ResponseBulkHandler.php       |    53 +
 .../Protocol/Text/ResponseErrorHandler.php      |    37 +
 .../Protocol/Text/ResponseIntegerHandler.php    |    49 +
 .../Protocol/Text/ResponseMultiBulkHandler.php  |    72 +
 .../Text/ResponseMultiBulkStreamHandler.php     |    48 +
 .../Protocol/Text/ResponseStatusHandler.php     |    43 +
 .../Protocol/Text/TextCommandSerializer.php     |    47 +
 .../lib/Predis/Protocol/Text/TextProtocol.php   |   137 +
 .../Predis/Protocol/Text/TextResponseReader.php |   113 +
 .../lib/Predis/PubSub/AbstractPubSubContext.php |   218 +
 .../predis/lib/Predis/PubSub/DispatcherLoop.php |   170 +
 .../predis/lib/Predis/PubSub/PubSubContext.php  |   147 +
 .../Predis/Replication/ReplicationStrategy.php  |   226 +
 .../predis/predis/lib/Predis/ResponseError.php  |    59 +
 .../lib/Predis/ResponseErrorInterface.php       |    35 +
 .../lib/Predis/ResponseObjectInterface.php      |    21 +
 .../predis/predis/lib/Predis/ResponseQueued.php |    53 +
 .../predis/lib/Predis/ServerException.php       |    42 +
 .../lib/Predis/Session/SessionHandler.php       |   138 +
 .../Transaction/AbortedMultiExecException.php   |    45 +
 .../lib/Predis/Transaction/MultiExecContext.php |   452 +
 vendor/predis/predis/package.ini                |    36 +
 vendor/predis/predis/phpunit.xml.dist           |    39 +
 vendor/predis/predis/phpunit.xml.travisci       |    43 +
 .../PHPUnit/ArrayHasSameValuesConstraint.php    |    58 +
 .../tests/PHPUnit/PredisCommandTestCase.php     |   127 +
 .../tests/PHPUnit/PredisConnectionTestCase.php  |   333 +
 .../tests/PHPUnit/PredisDistributorTestCase.php |    67 +
 .../tests/PHPUnit/PredisProfileTestCase.php     |    81 +
 .../predis/tests/PHPUnit/PredisTestCase.php     |   307 +
 .../tests/PHPUnit/RedisCommandConstraint.php    |    98 +
 .../predis/tests/Predis/ClientExceptionTest.php |    43 +
 .../predis/predis/tests/Predis/ClientTest.php   |   777 +
 .../Distribution/EmptyRingExceptionTest.php     |    31 +
 .../Cluster/Distribution/HashRingTest.php       |   153 +
 .../Cluster/Distribution/KetamaPureRingTest.php |   153 +
 .../Cluster/PredisClusterHashStrategyTest.php   |   383 +
 .../Cluster/RedisClusterHashStrategyTest.php    |   396 +
 .../Predis/Collection/Iterator/HashKeyTest.php  |   480 +
 .../Predis/Collection/Iterator/KeyspaceTest.php |   448 +
 .../Predis/Collection/Iterator/ListKeyTest.php  |   248 +
 .../Predis/Collection/Iterator/SetKeyTest.php   |   448 +
 .../Collection/Iterator/SortedSetKeyTest.php    |   480 +
 .../predis/tests/Predis/Command/CommandTest.php |   180 +
 .../tests/Predis/Command/ConnectionAuthTest.php |    62 +
 .../tests/Predis/Command/ConnectionEchoTest.php |    74 +
 .../tests/Predis/Command/ConnectionPingTest.php |    69 +
 .../tests/Predis/Command/ConnectionQuitTest.php |    70 +
 .../Predis/Command/ConnectionSelectTest.php     |    84 +
 .../tests/Predis/Command/HashDeleteTest.php     |   123 +
 .../tests/Predis/Command/HashExistsTest.php     |   112 +
 .../tests/Predis/Command/HashGetAllTest.php     |   113 +
 .../Predis/Command/HashGetMultipleTest.php      |   129 +
 .../predis/tests/Predis/Command/HashGetTest.php |   109 +
 .../Predis/Command/HashIncrementByFloatTest.php |   134 +
 .../Predis/Command/HashIncrementByTest.php      |   134 +
 .../tests/Predis/Command/HashKeysTest.php       |   113 +
 .../tests/Predis/Command/HashLengthTest.php     |   108 +
 .../tests/Predis/Command/HashScanTest.php       |   161 +
 .../Predis/Command/HashSetMultipleTest.php      |   135 +
 .../Predis/Command/HashSetPreserveTest.php      |   112 +
 .../predis/tests/Predis/Command/HashSetTest.php |   111 +
 .../tests/Predis/Command/HashValuesTest.php     |   113 +
 .../tests/Predis/Command/HyperLogLogAddTest.php |    89 +
 .../Predis/Command/HyperLogLogCountTest.php     |   105 +
 .../Predis/Command/HyperLogLogMergeTest.php     |    87 +
 .../tests/Predis/Command/KeyDeleteTest.php      |   117 +
 .../predis/tests/Predis/Command/KeyDumpTest.php |    87 +
 .../tests/Predis/Command/KeyExistsTest.php      |   106 +
 .../tests/Predis/Command/KeyExpireAtTest.php    |   129 +
 .../tests/Predis/Command/KeyExpireTest.php      |   143 +
 .../predis/tests/Predis/Command/KeyKeysTest.php |   103 +
 .../tests/Predis/Command/KeyKeysV12xTest.php    |    89 +
 .../predis/tests/Predis/Command/KeyMoveTest.php |   119 +
 .../tests/Predis/Command/KeyPersistTest.php     |   121 +
 .../Predis/Command/KeyPreciseExpireAtTest.php   |   119 +
 .../Predis/Command/KeyPreciseExpireTest.php     |   144 +
 .../Predis/Command/KeyPreciseTimeToLiveTest.php |   120 +
 .../tests/Predis/Command/KeyRandomTest.php      |    85 +
 .../Predis/Command/KeyRenamePreserveTest.php    |   109 +
 .../tests/Predis/Command/KeyRenameTest.php      |   108 +
 .../tests/Predis/Command/KeyRestoreTest.php     |    82 +
 .../predis/tests/Predis/Command/KeyScanTest.php |   136 +
 .../predis/tests/Predis/Command/KeySortTest.php |   279 +
 .../tests/Predis/Command/KeyTimeToLiveTest.php  |   122 +
 .../predis/tests/Predis/Command/KeyTypeTest.php |   107 +
 .../tests/Predis/Command/ListIndexTest.php      |   124 +
 .../tests/Predis/Command/ListInsertTest.php     |   132 +
 .../tests/Predis/Command/ListLengthTest.php     |   119 +
 .../Predis/Command/ListPopFirstBlockingTest.php |   103 +
 .../tests/Predis/Command/ListPopFirstTest.php   |   119 +
 .../Predis/Command/ListPopLastBlockingTest.php  |   103 +
 .../Command/ListPopLastPushHeadBlockingTest.php |    84 +
 .../Predis/Command/ListPopLastPushHeadTest.php  |   153 +
 .../tests/Predis/Command/ListPopLastTest.php    |   119 +
 .../tests/Predis/Command/ListPushHeadTest.php   |   122 +
 .../tests/Predis/Command/ListPushHeadXTest.php  |   120 +
 .../tests/Predis/Command/ListPushTailTest.php   |   122 +
 .../tests/Predis/Command/ListPushTailXTest.php  |   120 +
 .../tests/Predis/Command/ListRangeTest.php      |   163 +
 .../tests/Predis/Command/ListRemoveTest.php     |   147 +
 .../predis/tests/Predis/Command/ListSetTest.php |   121 +
 .../tests/Predis/Command/ListTrimTest.php       |   153 +
 .../tests/Predis/Command/PrefixHelpersTest.php  |    84 +
 .../Predis/Command/PrefixableCommandTest.php    |    54 +
 .../Processor/KeyPrefixProcessorTest.php        |   111 +
 .../Command/Processor/ProcessorChainTest.php    |   170 +
 .../tests/Predis/Command/PubSubPublishTest.php  |    96 +
 .../Command/PubSubSubscribeByPatternTest.php    |   182 +
 .../Predis/Command/PubSubSubscribeTest.php      |   182 +
 .../Command/PubSubUnsubscribeByPatternTest.php  |   150 +
 .../Predis/Command/PubSubUnsubscribeTest.php    |   150 +
 .../tests/Predis/Command/RawCommandTest.php     |   154 +
 .../Predis/Command/ScriptedCommandTest.php      |   200 +
 .../Command/ServerBackgroundRewriteAOFTest.php  |    54 +
 .../Predis/Command/ServerBackgroundSaveTest.php |    54 +
 .../tests/Predis/Command/ServerClientTest.php   |   218 +
 .../tests/Predis/Command/ServerCommandTest.php  |   118 +
 .../tests/Predis/Command/ServerConfigTest.php   |   171 +
 .../Predis/Command/ServerDatabaseSizeTest.php   |    65 +
 .../tests/Predis/Command/ServerEvalSHATest.php  |   136 +
 .../tests/Predis/Command/ServerEvalTest.php     |   131 +
 .../tests/Predis/Command/ServerFlushAllTest.php |    54 +
 .../Predis/Command/ServerFlushDatabaseTest.php  |    67 +
 .../tests/Predis/Command/ServerInfoTest.php     |   287 +
 .../tests/Predis/Command/ServerInfoV26xTest.php |   305 +
 .../tests/Predis/Command/ServerLastSaveTest.php |    64 +
 .../tests/Predis/Command/ServerMonitorTest.php  |    72 +
 .../tests/Predis/Command/ServerObjectTest.php   |   113 +
 .../tests/Predis/Command/ServerSaveTest.php     |    54 +
 .../tests/Predis/Command/ServerScriptTest.php   |   108 +
 .../tests/Predis/Command/ServerShutdownTest.php |    46 +
 .../tests/Predis/Command/ServerSlaveOfTest.php  |    85 +
 .../tests/Predis/Command/ServerSlowlogTest.php  |   118 +
 .../tests/Predis/Command/ServerTimeTest.php     |    72 +
 .../predis/tests/Predis/Command/SetAddTest.php  |   121 +
 .../tests/Predis/Command/SetCardinalityTest.php |   117 +
 .../Predis/Command/SetDifferenceStoreTest.php   |   140 +
 .../tests/Predis/Command/SetDifferenceTest.php  |   142 +
 .../Predis/Command/SetIntersectionStoreTest.php |   153 +
 .../Predis/Command/SetIntersectionTest.php      |   153 +
 .../tests/Predis/Command/SetIsMemberTest.php    |   121 +
 .../tests/Predis/Command/SetMembersTest.php     |   113 +
 .../predis/tests/Predis/Command/SetMoveTest.php |   129 +
 .../predis/tests/Predis/Command/SetPopTest.php  |   110 +
 .../Predis/Command/SetRandomMemberTest.php      |   118 +
 .../tests/Predis/Command/SetRemoveTest.php      |   125 +
 .../predis/tests/Predis/Command/SetScanTest.php |   156 +
 .../tests/Predis/Command/SetUnionStoreTest.php  |   140 +
 .../tests/Predis/Command/SetUnionTest.php       |   142 +
 .../tests/Predis/Command/StringAppendTest.php   |   120 +
 .../tests/Predis/Command/StringBitCountTest.php |   117 +
 .../tests/Predis/Command/StringBitOpTest.php    |   202 +
 .../Predis/Command/StringDecrementByTest.php    |   145 +
 .../Predis/Command/StringDecrementTest.php      |   132 +
 .../tests/Predis/Command/StringGetBitTest.php   |   138 +
 .../Predis/Command/StringGetMultipleTest.php    |   135 +
 .../tests/Predis/Command/StringGetRangeTest.php |   123 +
 .../tests/Predis/Command/StringGetSetTest.php   |   109 +
 .../tests/Predis/Command/StringGetTest.php      |   130 +
 .../Command/StringIncrementByFloatTest.php      |   145 +
 .../Predis/Command/StringIncrementByTest.php    |   145 +
 .../Predis/Command/StringIncrementTest.php      |   119 +
 .../Command/StringPreciseSetExpireTest.php      |   139 +
 .../tests/Predis/Command/StringSetBitTest.php   |   154 +
 .../Predis/Command/StringSetExpireTest.php      |   138 +
 .../Command/StringSetMultiplePreserveTest.php   |   122 +
 .../Predis/Command/StringSetMultipleTest.php    |   108 +
 .../Predis/Command/StringSetPreserveTest.php    |    94 +
 .../tests/Predis/Command/StringSetRangeTest.php |   148 +
 .../tests/Predis/Command/StringSetTest.php      |    94 +
 .../tests/Predis/Command/StringStrlenTest.php   |   119 +
 .../tests/Predis/Command/StringSubstrTest.php   |    86 +
 .../Predis/Command/TransactionDiscardTest.php   |    80 +
 .../Predis/Command/TransactionExecTest.php      |   112 +
 .../Predis/Command/TransactionMultiTest.php     |    91 +
 .../Predis/Command/TransactionUnwatchTest.php   |    84 +
 .../Predis/Command/TransactionWatchTest.php     |   143 +
 .../predis/tests/Predis/Command/ZSetAddTest.php |   134 +
 .../Predis/Command/ZSetCardinalityTest.php      |   108 +
 .../tests/Predis/Command/ZSetCountTest.php      |   141 +
 .../Predis/Command/ZSetIncrementByTest.php      |   108 +
 .../Command/ZSetIntersectionStoreTest.php       |   201 +
 .../tests/Predis/Command/ZSetLexCountTest.php   |   156 +
 .../tests/Predis/Command/ZSetRangeByLexTest.php |   223 +
 .../Predis/Command/ZSetRangeByScoreTest.php     |   257 +
 .../tests/Predis/Command/ZSetRangeTest.php      |   180 +
 .../tests/Predis/Command/ZSetRankTest.php       |   111 +
 .../Predis/Command/ZSetRemoveRangeByLexTest.php |   168 +
 .../Command/ZSetRemoveRangeByRankTest.php       |   123 +
 .../Command/ZSetRemoveRangeByScoreTest.php      |   123 +
 .../tests/Predis/Command/ZSetRemoveTest.php     |   110 +
 .../Command/ZSetReverseRangeByScoreTest.php     |   257 +
 .../Predis/Command/ZSetReverseRangeTest.php     |   180 +
 .../Predis/Command/ZSetReverseRankTest.php      |   111 +
 .../tests/Predis/Command/ZSetScanTest.php       |   161 +
 .../tests/Predis/Command/ZSetScoreTest.php      |   111 +
 .../tests/Predis/Command/ZSetUnionStoreTest.php |   219 +
 .../tests/Predis/CommunicationExceptionTest.php |   113 +
 .../ComposableStreamConnectionTest.php          |   120 +
 .../Connection/ConnectionExceptionTest.php      |    30 +
 .../Predis/Connection/ConnectionFactoryTest.php |   383 +
 .../Connection/ConnectionParametersTest.php     |   265 +
 .../Connection/MasterSlaveReplicationTest.php   |   593 +
 .../Connection/PhpiredisConnectionTest.php      |   138 +
 .../PhpiredisStreamConnectionTest.php           |   145 +
 .../Predis/Connection/PredisClusterTest.php     |   404 +
 .../Predis/Connection/RedisClusterTest.php      |   757 +
 .../Predis/Connection/StreamConnectionTest.php  |   137 +
 .../Predis/Connection/WebdisConnectionTest.php  |   186 +
 .../predis/predis/tests/Predis/HelpersTest.php  |    70 +
 .../Iterator/MultiBulkResponseSimpleTest.php    |   128 +
 .../Iterator/MultiBulkResponseTupleTest.php     |   114 +
 .../tests/Predis/Monitor/MonitorContextTest.php |   196 +
 .../tests/Predis/Option/AbstractOptionTest.php  |    79 +
 .../tests/Predis/Option/ClientClusterTest.php   |   127 +
 .../Option/ClientConnectionFactoryTest.php      |   137 +
 .../Predis/Option/ClientExceptionsTest.php      |    31 +
 .../tests/Predis/Option/ClientOptionsTest.php   |   128 +
 .../tests/Predis/Option/ClientPrefixTest.php    |    59 +
 .../tests/Predis/Option/ClientProfileTest.php   |   210 +
 .../Predis/Option/ClientReplicationTest.php     |   101 +
 .../tests/Predis/Option/CustomOptionTest.php    |   114 +
 .../Pipeline/FireAndForgetExecutorTest.php      |    86 +
 .../Predis/Pipeline/MultiExecExecutorTest.php   |   187 +
 .../Predis/Pipeline/PipelineContextTest.php     |   438 +
 .../Predis/Pipeline/StandardExecutorTest.php    |   159 +
 .../predis/tests/Predis/PredisExceptionTest.php |    33 +
 .../tests/Predis/Profile/ServerProfileTest.php  |   293 +
 .../Predis/Profile/ServerVersion12Test.php      |   116 +
 .../Predis/Profile/ServerVersion20Test.php      |   148 +
 .../Predis/Profile/ServerVersion22Test.php      |   163 +
 .../Predis/Profile/ServerVersion24Test.php      |   164 +
 .../Predis/Profile/ServerVersion26Test.php      |   178 +
 .../Predis/Profile/ServerVersion28Test.php      |   189 +
 .../Predis/Profile/ServerVersion30Test.php      |   189 +
 .../Predis/Profile/ServerVersionNextTest.php    |   189 +
 .../Predis/Protocol/ProtocolExceptionTest.php   |    31 +
 .../Text/ComposableTextProtocolTest.php         |   119 +
 .../Protocol/Text/ResponseBulkHandlerTest.php   |    91 +
 .../Protocol/Text/ResponseErrorHandlerTest.php  |    39 +
 .../Text/ResponseIntegerHandlerTest.php         |    70 +
 .../Text/ResponseMultiBulkHandlerTest.php       |    84 +
 .../Text/ResponseMultiBulkStreamHandlerTest.php |    52 +
 .../Protocol/Text/ResponseStatusHandlerTest.php |    66 +
 .../Protocol/Text/TextCommandSerializerTest.php |    64 +
 .../Predis/Protocol/Text/TextProtocolTest.php   |   119 +
 .../Protocol/Text/TextResponseReaderTest.php    |   123 +
 .../tests/Predis/PubSub/DispatcherLoopTest.php  |   125 +
 .../tests/Predis/PubSub/PubSubContextTest.php   |   340 +
 .../Replication/ReplicationStrategyTest.php     |   382 +
 .../predis/tests/Predis/ResponseErrorTest.php   |    63 +
 .../predis/tests/Predis/ResponseQueuedTest.php  |    51 +
 .../predis/tests/Predis/ServerExceptionTest.php |    69 +
 .../AbortedMultiExecExceptionTest.php           |    35 +
 .../Predis/Transaction/MultiExecContextTest.php |   840 +
 vendor/predis/predis/tests/README.md            |    83 +
 vendor/predis/predis/tests/bootstrap.php        |    26 +
 vendor/psr/log/.gitignore                       |     1 +
 vendor/psr/log/LICENSE                          |    19 +
 vendor/psr/log/Psr/Log/AbstractLogger.php       |   120 +
 .../log/Psr/Log/InvalidArgumentException.php    |     7 +
 vendor/psr/log/Psr/Log/LogLevel.php             |    18 +
 vendor/psr/log/Psr/Log/LoggerAwareInterface.php |    17 +
 vendor/psr/log/Psr/Log/LoggerAwareTrait.php     |    22 +
 vendor/psr/log/Psr/Log/LoggerInterface.php      |   114 +
 vendor/psr/log/Psr/Log/LoggerTrait.php          |   131 +
 vendor/psr/log/Psr/Log/NullLogger.php           |    27 +
 .../log/Psr/Log/Test/LoggerInterfaceTest.php    |   116 +
 vendor/psr/log/README.md                        |    45 +
 vendor/psr/log/composer.json                    |    17 +
 vendor/stack/builder/.gitignore                 |     1 +
 vendor/stack/builder/.travis.yml                |    20 +
 vendor/stack/builder/CHANGELOG.md               |    18 +
 vendor/stack/builder/LICENSE                    |    19 +
 vendor/stack/builder/README.md                  |    62 +
 vendor/stack/builder/composer.json              |    26 +
 vendor/stack/builder/composer.lock              |   488 +
 vendor/stack/builder/phpunit.xml.dist           |    30 +
 vendor/stack/builder/src/Stack/Builder.php      |    63 +
 .../builder/src/Stack/StackedHttpKernel.php     |    37 +
 .../tests/functional/SilexApplicationTest.php   |    60 +
 .../builder/tests/unit/Stack/BuilderTest.php    |   215 +
 .../tests/unit/Stack/StackedHttpKernelTest.php  |   155 +
 vendor/swiftmailer/swiftmailer/.gitattributes   |     9 +
 vendor/swiftmailer/swiftmailer/.gitignore       |     4 +
 vendor/swiftmailer/swiftmailer/.travis.yml      |    25 +
 vendor/swiftmailer/swiftmailer/CHANGES          |   200 +
 vendor/swiftmailer/swiftmailer/LICENSE          |    19 +
 vendor/swiftmailer/swiftmailer/README           |    16 +
 vendor/swiftmailer/swiftmailer/VERSION          |     1 +
 vendor/swiftmailer/swiftmailer/composer.json    |    31 +
 vendor/swiftmailer/swiftmailer/doc/headers.rst  |   742 +
 .../swiftmailer/doc/help-resources.rst          |    44 +
 .../swiftmailer/doc/including-the-files.rst     |    46 +
 vendor/swiftmailer/swiftmailer/doc/index.rst    |    16 +
 .../swiftmailer/swiftmailer/doc/installing.rst  |    89 +
 .../swiftmailer/doc/introduction.rst            |   135 +
 vendor/swiftmailer/swiftmailer/doc/japanese.rst |    22 +
 vendor/swiftmailer/swiftmailer/doc/messages.rst |  1057 +
 vendor/swiftmailer/swiftmailer/doc/overview.rst |   161 +
 vendor/swiftmailer/swiftmailer/doc/plugins.rst  |   385 +
 vendor/swiftmailer/swiftmailer/doc/sending.rst  |   607 +
 .../swiftmailer/doc/uml/Encoders.graffle        |   Bin 0 -> 3503 bytes
 .../swiftmailer/doc/uml/Mime.graffle            |   Bin 0 -> 5575 bytes
 .../swiftmailer/doc/uml/Transports.graffle      |   Bin 0 -> 3061 bytes
 .../swiftmailer/lib/classes/Swift.php           |    80 +
 .../lib/classes/Swift/Attachment.php            |    71 +
 .../AbstractFilterableInputStream.php           |   179 +
 .../Swift/ByteStream/ArrayByteStream.php        |   184 +
 .../classes/Swift/ByteStream/FileByteStream.php |   229 +
 .../ByteStream/TemporaryFileByteStream.php      |    42 +
 .../lib/classes/Swift/CharacterReader.php       |    67 +
 .../CharacterReader/GenericFixedWidthReader.php |    97 +
 .../Swift/CharacterReader/UsAsciiReader.php     |    84 +
 .../Swift/CharacterReader/Utf8Reader.php        |   179 +
 .../classes/Swift/CharacterReaderFactory.php    |    26 +
 .../SimpleCharacterReaderFactory.php            |   124 +
 .../lib/classes/Swift/CharacterStream.php       |    89 +
 .../CharacterStream/ArrayCharacterStream.php    |   293 +
 .../Swift/CharacterStream/NgCharacterStream.php |   276 +
 .../lib/classes/Swift/ConfigurableSpool.php     |    63 +
 .../lib/classes/Swift/DependencyContainer.php   |   372 +
 .../lib/classes/Swift/DependencyException.php   |    27 +
 .../lib/classes/Swift/EmbeddedFile.php          |    69 +
 .../swiftmailer/lib/classes/Swift/Encoder.php   |    27 +
 .../lib/classes/Swift/Encoder/Base64Encoder.php |    58 +
 .../lib/classes/Swift/Encoder/QpEncoder.php     |   289 +
 .../classes/Swift/Encoder/Rfc2231Encoder.php    |    92 +
 .../swiftmailer/lib/classes/Swift/Encoding.php  |    64 +
 .../lib/classes/Swift/Events/CommandEvent.php   |    65 +
 .../classes/Swift/Events/CommandListener.php    |    24 +
 .../lib/classes/Swift/Events/Event.php          |    38 +
 .../classes/Swift/Events/EventDispatcher.php    |    83 +
 .../lib/classes/Swift/Events/EventListener.php  |    18 +
 .../lib/classes/Swift/Events/EventObject.php    |    63 +
 .../lib/classes/Swift/Events/ResponseEvent.php  |    65 +
 .../classes/Swift/Events/ResponseListener.php   |    24 +
 .../lib/classes/Swift/Events/SendEvent.php      |   129 +
 .../lib/classes/Swift/Events/SendListener.php   |    31 +
 .../Swift/Events/SimpleEventDispatcher.php      |   156 +
 .../Swift/Events/TransportChangeEvent.php       |    27 +
 .../Swift/Events/TransportChangeListener.php    |    45 +
 .../Swift/Events/TransportExceptionEvent.php    |    46 +
 .../Swift/Events/TransportExceptionListener.php |    24 +
 .../lib/classes/Swift/FailoverTransport.php     |    45 +
 .../swiftmailer/lib/classes/Swift/FileSpool.php |   208 +
 .../lib/classes/Swift/FileStream.php            |    24 +
 .../lib/classes/Swift/Filterable.php            |    32 +
 .../swiftmailer/lib/classes/Swift/Image.php     |    61 +
 .../lib/classes/Swift/InputByteStream.php       |    75 +
 .../lib/classes/Swift/IoException.php           |    27 +
 .../swiftmailer/lib/classes/Swift/KeyCache.php  |   105 +
 .../classes/Swift/KeyCache/ArrayKeyCache.php    |   206 +
 .../lib/classes/Swift/KeyCache/DiskKeyCache.php |   324 +
 .../Swift/KeyCache/KeyCacheInputStream.php      |    51 +
 .../lib/classes/Swift/KeyCache/NullKeyCache.php |   115 +
 .../KeyCache/SimpleKeyCacheInputStream.php      |   127 +
 .../lib/classes/Swift/LoadBalancedTransport.php |    45 +
 .../lib/classes/Swift/MailTransport.php         |    45 +
 .../swiftmailer/lib/classes/Swift/Mailer.php    |   114 +
 .../Swift/Mailer/ArrayRecipientIterator.php     |    55 +
 .../classes/Swift/Mailer/RecipientIterator.php  |    32 +
 .../lib/classes/Swift/MemorySpool.php           |    84 +
 .../swiftmailer/lib/classes/Swift/Message.php   |   287 +
 .../lib/classes/Swift/Mime/Attachment.php       |   153 +
 .../lib/classes/Swift/Mime/CharsetObserver.php  |    24 +
 .../lib/classes/Swift/Mime/ContentEncoder.php   |    34 +
 .../ContentEncoder/Base64ContentEncoder.php     |   104 +
 .../ContentEncoder/NativeQpContentEncoder.php   |   123 +
 .../Mime/ContentEncoder/PlainContentEncoder.php |   162 +
 .../Mime/ContentEncoder/QpContentEncoder.php    |   123 +
 .../ContentEncoder/QpContentEncoderProxy.php    |    97 +
 .../Mime/ContentEncoder/RawContentEncoder.php   |    63 +
 .../lib/classes/Swift/Mime/EmbeddedFile.php     |    45 +
 .../lib/classes/Swift/Mime/EncodingObserver.php |    24 +
 .../lib/classes/Swift/Mime/Grammar.php          |   176 +
 .../lib/classes/Swift/Mime/Header.php           |    93 +
 .../lib/classes/Swift/Mime/HeaderEncoder.php    |    24 +
 .../Mime/HeaderEncoder/Base64HeaderEncoder.php  |    55 +
 .../Mime/HeaderEncoder/QpHeaderEncoder.php      |    65 +
 .../lib/classes/Swift/Mime/HeaderFactory.php    |    78 +
 .../lib/classes/Swift/Mime/HeaderSet.php        |   169 +
 .../Swift/Mime/Headers/AbstractHeader.php       |   503 +
 .../classes/Swift/Mime/Headers/DateHeader.php   |   125 +
 .../Swift/Mime/Headers/IdentificationHeader.php |   180 +
 .../Swift/Mime/Headers/MailboxHeader.php        |   354 +
 .../Swift/Mime/Headers/OpenDKIMHeader.php       |   135 +
 .../Swift/Mime/Headers/ParameterizedHeader.php  |   260 +
 .../classes/Swift/Mime/Headers/PathHeader.php   |   143 +
 .../Swift/Mime/Headers/UnstructuredHeader.php   |   112 +
 .../lib/classes/Swift/Mime/Message.php          |   223 +
 .../lib/classes/Swift/Mime/MimeEntity.php       |   115 +
 .../lib/classes/Swift/Mime/MimePart.php         |   214 +
 .../classes/Swift/Mime/ParameterizedHeader.php  |    34 +
 .../classes/Swift/Mime/SimpleHeaderFactory.php  |   197 +
 .../lib/classes/Swift/Mime/SimpleHeaderSet.php  |   396 +
 .../lib/classes/Swift/Mime/SimpleMessage.php    |   649 +
 .../lib/classes/Swift/Mime/SimpleMimeEntity.php |   867 +
 .../swiftmailer/lib/classes/Swift/MimePart.php  |    59 +
 .../lib/classes/Swift/NullTransport.php         |    39 +
 .../lib/classes/Swift/OutputByteStream.php      |    46 +
 .../classes/Swift/Plugins/AntiFloodPlugin.php   |   141 +
 .../Swift/Plugins/BandwidthMonitorPlugin.php    |   164 +
 .../Swift/Plugins/Decorator/Replacements.php    |    31 +
 .../classes/Swift/Plugins/DecoratorPlugin.php   |   207 +
 .../classes/Swift/Plugins/ImpersonatePlugin.php |    68 +
 .../lib/classes/Swift/Plugins/Logger.php        |    36 +
 .../lib/classes/Swift/Plugins/LoggerPlugin.php  |   141 +
 .../Swift/Plugins/Loggers/ArrayLogger.php       |    72 +
 .../Swift/Plugins/Loggers/EchoLogger.php        |    58 +
 .../lib/classes/Swift/Plugins/MessageLogger.php |    75 +
 .../Swift/Plugins/Pop/Pop3Connection.php        |    31 +
 .../classes/Swift/Plugins/Pop/Pop3Exception.php |    27 +
 .../Swift/Plugins/PopBeforeSmtpPlugin.php       |   273 +
 .../classes/Swift/Plugins/RedirectingPlugin.php |   211 +
 .../lib/classes/Swift/Plugins/Reporter.php      |    32 +
 .../classes/Swift/Plugins/ReporterPlugin.php    |    73 +
 .../Swift/Plugins/Reporters/HitReporter.php     |    59 +
 .../Swift/Plugins/Reporters/HtmlReporter.php    |    39 +
 .../lib/classes/Swift/Plugins/Sleeper.php       |    24 +
 .../classes/Swift/Plugins/ThrottlerPlugin.php   |   200 +
 .../lib/classes/Swift/Plugins/Timer.php         |    24 +
 .../lib/classes/Swift/Preferences.php           |   103 +
 .../classes/Swift/ReplacementFilterFactory.php  |    27 +
 .../classes/Swift/RfcComplianceException.php    |    27 +
 .../lib/classes/Swift/SendmailTransport.php     |    45 +
 .../lib/classes/Swift/SignedMessage.php         |    22 +
 .../swiftmailer/lib/classes/Swift/Signer.php    |    20 +
 .../lib/classes/Swift/Signers/BodySigner.php    |    33 +
 .../lib/classes/Swift/Signers/DKIMSigner.php    |   688 +
 .../classes/Swift/Signers/DomainKeySigner.php   |   512 +
 .../lib/classes/Swift/Signers/HeaderSigner.php  |    65 +
 .../classes/Swift/Signers/OpenDKIMSigner.php    |   186 +
 .../lib/classes/Swift/Signers/SMimeSigner.php   |   437 +
 .../lib/classes/Swift/SmtpTransport.php         |    57 +
 .../swiftmailer/lib/classes/Swift/Spool.php     |    53 +
 .../lib/classes/Swift/SpoolTransport.php        |    47 +
 .../lib/classes/Swift/StreamFilter.php          |    35 +
 .../ByteArrayReplacementFilter.php              |   169 +
 .../StreamFilters/StringReplacementFilter.php   |    66 +
 .../StringReplacementFilterFactory.php          |    45 +
 .../lib/classes/Swift/SwiftException.php        |    27 +
 .../swiftmailer/lib/classes/Swift/Transport.php |    54 +
 .../Swift/Transport/AbstractSmtpTransport.php   |   490 +
 .../Esmtp/Auth/CramMd5Authenticator.php         |    81 +
 .../Transport/Esmtp/Auth/LoginAuthenticator.php |    51 +
 .../Transport/Esmtp/Auth/NTLMAuthenticator.php  |   700 +
 .../Transport/Esmtp/Auth/PlainAuthenticator.php |    50 +
 .../Esmtp/Auth/XOAuth2Authenticator.php         |    69 +
 .../Swift/Transport/Esmtp/AuthHandler.php       |   263 +
 .../Swift/Transport/Esmtp/Authenticator.php     |    35 +
 .../classes/Swift/Transport/EsmtpHandler.php    |    86 +
 .../classes/Swift/Transport/EsmtpTransport.php  |   386 +
 .../Swift/Transport/FailoverTransport.php       |    85 +
 .../lib/classes/Swift/Transport/IoBuffer.php    |    67 +
 .../Swift/Transport/LoadBalancedTransport.php   |   166 +
 .../lib/classes/Swift/Transport/MailInvoker.php |    32 +
 .../classes/Swift/Transport/MailTransport.php   |   237 +
 .../classes/Swift/Transport/NullTransport.php   |    93 +
 .../Swift/Transport/SendmailTransport.php       |   159 +
 .../Swift/Transport/SimpleMailInvoker.php       |    39 +
 .../lib/classes/Swift/Transport/SmtpAgent.php   |    36 +
 .../classes/Swift/Transport/SpoolTransport.php  |   117 +
 .../classes/Swift/Transport/StreamBuffer.php    |   321 +
 .../lib/classes/Swift/TransportException.php    |    27 +
 .../swiftmailer/lib/classes/Swift/Validate.php  |    42 +
 .../lib/dependency_maps/cache_deps.php          |    23 +
 .../lib/dependency_maps/message_deps.php        |     9 +
 .../lib/dependency_maps/mime_deps.php           |   123 +
 .../lib/dependency_maps/transport_deps.php      |    76 +
 .../swiftmailer/swiftmailer/lib/mime_types.php  |  1007 +
 .../swiftmailer/swiftmailer/lib/preferences.php |    25 +
 .../swiftmailer/swiftmailer/lib/swift_init.php  |    28 +
 .../swiftmailer/lib/swift_required.php          |    30 +
 .../swiftmailer/lib/swift_required_pear.php     |    30 +
 .../lib/swiftmailer_generate_mimes_config.php   |   193 +
 vendor/swiftmailer/swiftmailer/phpunit.xml.dist |    37 +
 .../tests/IdenticalBinaryConstraint.php         |    60 +
 .../swiftmailer/tests/StreamCollector.php       |    11 +
 .../tests/SwiftMailerSmokeTestCase.php          |    46 +
 .../swiftmailer/tests/SwiftMailerTestCase.php   |    33 +
 .../tests/_samples/charsets/iso-2022-jp/one.txt |    11 +
 .../tests/_samples/charsets/iso-8859-1/one.txt  |    19 +
 .../tests/_samples/charsets/utf-8/one.txt       |    22 +
 .../tests/_samples/charsets/utf-8/three.txt     |    45 +
 .../tests/_samples/charsets/utf-8/two.txt       |     3 +
 .../tests/_samples/dkim/dkim.test.priv          |    15 +
 .../tests/_samples/dkim/dkim.test.pub           |     6 +
 .../swiftmailer/tests/_samples/files/data.txt   |     1 +
 .../tests/_samples/files/swiftmailer.png        |   Bin 0 -> 3194 bytes
 .../tests/_samples/files/textfile.zip           |   Bin 0 -> 202 bytes
 .../swiftmailer/tests/_samples/smime/CA.srl     |     1 +
 .../swiftmailer/tests/_samples/smime/ca.crt     |    21 +
 .../swiftmailer/tests/_samples/smime/ca.key     |    27 +
 .../tests/_samples/smime/create-cert.sh         |    40 +
 .../tests/_samples/smime/encrypt.crt            |    19 +
 .../tests/_samples/smime/encrypt.key            |    27 +
 .../tests/_samples/smime/encrypt2.crt           |    19 +
 .../tests/_samples/smime/encrypt2.key           |    27 +
 .../tests/_samples/smime/intermediate.crt       |    19 +
 .../tests/_samples/smime/intermediate.key       |    27 +
 .../swiftmailer/tests/_samples/smime/sign.crt   |    19 +
 .../swiftmailer/tests/_samples/smime/sign.key   |    27 +
 .../swiftmailer/tests/_samples/smime/sign2.crt  |    19 +
 .../swiftmailer/tests/_samples/smime/sign2.key  |    27 +
 .../tests/acceptance.conf.php.default           |    44 +
 .../Swift/AttachmentAcceptanceTest.php          |    12 +
 .../ByteStream/FileByteStreamAcceptanceTest.php |   174 +
 ...mpleCharacterReaderFactoryAcceptanceTest.php |   179 +
 .../Swift/DependencyContainerAcceptanceTest.php |    20 +
 .../Swift/EmbeddedFileAcceptanceTest.php        |    12 +
 .../Encoder/Base64EncoderAcceptanceTest.php     |    45 +
 .../Swift/Encoder/QpEncoderAcceptanceTest.php   |    50 +
 .../Encoder/Rfc2231EncoderAcceptanceTest.php    |    50 +
 .../acceptance/Swift/EncodingAcceptanceTest.php |    30 +
 .../KeyCache/ArrayKeyCacheAcceptanceTest.php    |   173 +
 .../KeyCache/DiskKeyCacheAcceptanceTest.php     |   183 +
 .../acceptance/Swift/MessageAcceptanceTest.php  |    57 +
 .../Swift/Mime/AttachmentAcceptanceTest.php     |   125 +
 .../Base64ContentEncoderAcceptanceTest.php      |    56 +
 .../NativeQpContentEncoderAcceptanceTest.php    |    86 +
 .../PlainContentEncoderAcceptanceTest.php       |    88 +
 .../QpContentEncoderAcceptanceTest.php          |   157 +
 .../Swift/Mime/EmbeddedFileAcceptanceTest.php   |   137 +
 .../Base64HeaderEncoderAcceptanceTest.php       |    32 +
 .../Swift/Mime/MimePartAcceptanceTest.php       |   129 +
 .../Swift/Mime/SimpleMessageAcceptanceTest.php  |  1251 +
 .../acceptance/Swift/MimePartAcceptanceTest.php |    15 +
 .../AbstractStreamBufferAcceptanceTest.php      |   134 +
 .../StreamBuffer/BasicSocketAcceptanceTest.php  |    34 +
 .../StreamBuffer/ProcessAcceptanceTest.php      |    27 +
 .../StreamBuffer/SocketTimeoutTest.php          |    65 +
 .../StreamBuffer/SslSocketAcceptanceTest.php    |    41 +
 .../StreamBuffer/TlsSocketAcceptanceTest.php    |    40 +
 .../swiftmailer/swiftmailer/tests/bootstrap.php |    19 +
 .../swiftmailer/tests/bug/Swift/Bug111Test.php  |    42 +
 .../swiftmailer/tests/bug/Swift/Bug118Test.php  |    20 +
 .../swiftmailer/tests/bug/Swift/Bug206Test.php  |    38 +
 .../swiftmailer/tests/bug/Swift/Bug274Test.php  |    21 +
 .../swiftmailer/tests/bug/Swift/Bug34Test.php   |    75 +
 .../swiftmailer/tests/bug/Swift/Bug35Test.php   |    73 +
 .../swiftmailer/tests/bug/Swift/Bug38Test.php   |   194 +
 .../swiftmailer/tests/bug/Swift/Bug518Test.php  |    38 +
 .../swiftmailer/tests/bug/Swift/Bug51Test.php   |   121 +
 .../swiftmailer/tests/bug/Swift/Bug534Test.php  |    38 +
 .../swiftmailer/tests/bug/Swift/Bug71Test.php   |    20 +
 .../swiftmailer/tests/bug/Swift/Bug76Test.php   |    82 +
 .../tests/fixtures/EsmtpTransportFixture.php    |    10 +
 .../tests/fixtures/MimeEntityFixture.php        |    41 +
 .../swiftmailer/tests/smoke.conf.php.default    |    63 +
 .../smoke/Swift/Smoke/AttachmentSmokeTest.php   |    30 +
 .../tests/smoke/Swift/Smoke/BasicSmokeTest.php  |    23 +
 .../Swift/Smoke/HtmlWithAttachmentSmokeTest.php |    29 +
 .../Swift/Smoke/InternationalSmokeTest.php      |    37 +
 .../Swift/ByteStream/ArrayByteStreamTest.php    |   204 +
 .../GenericFixedWidthReaderTest.php             |    43 +
 .../Swift/CharacterReader/UsAsciiReaderTest.php |    52 +
 .../Swift/CharacterReader/Utf8ReaderTest.php    |    65 +
 .../ArrayCharacterStreamTest.php                |   360 +
 .../unit/Swift/DependencyContainerTest.php      |   174 +
 .../unit/Swift/Encoder/Base64EncoderTest.php    |   173 +
 .../tests/unit/Swift/Encoder/QpEncoderTest.php  |   381 +
 .../unit/Swift/Encoder/Rfc2231EncoderTest.php   |   141 +
 .../unit/Swift/Events/CommandEventTest.php      |    36 +
 .../tests/unit/Swift/Events/EventObjectTest.php |    34 +
 .../unit/Swift/Events/ResponseEventTest.php     |    40 +
 .../tests/unit/Swift/Events/SendEventTest.php   |    99 +
 .../Swift/Events/SimpleEventDispatcherTest.php  |   135 +
 .../Swift/Events/TransportChangeEventTest.php   |    32 +
 .../Events/TransportExceptionEventTest.php      |    43 +
 .../unit/Swift/KeyCache/ArrayKeyCacheTest.php   |   242 +
 .../KeyCache/SimpleKeyCacheInputStreamTest.php  |    73 +
 .../Swift/Mailer/ArrayRecipientIteratorTest.php |    42 +
 .../swiftmailer/tests/unit/Swift/MailerTest.php |   152 +
 .../tests/unit/Swift/MessageTest.php            |   130 +
 .../unit/Swift/Mime/AbstractMimeEntityTest.php  |  1054 +
 .../tests/unit/Swift/Mime/AttachmentTest.php    |   320 +
 .../ContentEncoder/Base64ContentEncoderTest.php |   323 +
 .../ContentEncoder/PlainContentEncoderTest.php  |   173 +
 .../ContentEncoder/QpContentEncoderTest.php     |   496 +
 .../tests/unit/Swift/Mime/EmbeddedFileTest.php  |    57 +
 .../HeaderEncoder/Base64HeaderEncoderTest.php   |    13 +
 .../Mime/HeaderEncoder/QpHeaderEncoderTest.php  |   223 +
 .../unit/Swift/Mime/Headers/DateHeaderTest.php  |    69 +
 .../Mime/Headers/IdentificationHeaderTest.php   |   189 +
 .../Swift/Mime/Headers/MailboxHeaderTest.php    |   327 +
 .../Mime/Headers/ParameterizedHeaderTest.php    |   400 +
 .../unit/Swift/Mime/Headers/PathHeaderTest.php  |    77 +
 .../Mime/Headers/UnstructuredHeaderTest.php     |   355 +
 .../tests/unit/Swift/Mime/MimePartTest.php      |   233 +
 .../unit/Swift/Mime/SimpleHeaderFactoryTest.php |   168 +
 .../unit/Swift/Mime/SimpleHeaderSetTest.php     |   734 +
 .../tests/unit/Swift/Mime/SimpleMessageTest.php |   829 +
 .../unit/Swift/Mime/SimpleMimeEntityTest.php    |    11 +
 .../unit/Swift/Plugins/AntiFloodPluginTest.php  |    95 +
 .../Plugins/BandwidthMonitorPluginTest.php      |   127 +
 .../unit/Swift/Plugins/DecoratorPluginTest.php  |   269 +
 .../unit/Swift/Plugins/LoggerPluginTest.php     |   190 +
 .../Swift/Plugins/Loggers/ArrayLoggerTest.php   |    65 +
 .../Swift/Plugins/Loggers/EchoLoggerTest.php    |    24 +
 .../Swift/Plugins/PopBeforeSmtpPluginTest.php   |   103 +
 .../Swift/Plugins/RedirectingPluginTest.php     |   185 +
 .../unit/Swift/Plugins/ReporterPluginTest.php   |    88 +
 .../Swift/Plugins/Reporters/HitReporterTest.php |    64 +
 .../Plugins/Reporters/HtmlReporterTest.php      |    54 +
 .../unit/Swift/Plugins/ThrottlerPluginTest.php  |   104 +
 .../tests/unit/Swift/Signers/DKIMSignerTest.php |   227 +
 .../unit/Swift/Signers/OpenDKIMSignerTest.php   |    45 +
 .../unit/Swift/Signers/SMimeSignerTest.php      |   554 +
 .../ByteArrayReplacementFilterTest.php          |   131 +
 .../StringReplacementFilterFactoryTest.php      |    38 +
 .../StringReplacementFilterTest.php             |    55 +
 .../Transport/AbstractSmtpEventSupportTest.php  |   560 +
 .../unit/Swift/Transport/AbstractSmtpTest.php   |  1249 +
 .../Esmtp/Auth/CramMd5AuthenticatorTest.php     |    66 +
 .../Esmtp/Auth/LoginAuthenticatorTest.php       |    66 +
 .../Esmtp/Auth/NTLMAuthenticatorTest.php        |   233 +
 .../Esmtp/Auth/PlainAuthenticatorTest.php       |    69 +
 .../Swift/Transport/Esmtp/AuthHandlerTest.php   |   167 +
 .../EsmtpTransport/ExtensionSupportTest.php     |   530 +
 .../unit/Swift/Transport/EsmtpTransportTest.php |   298 +
 .../Swift/Transport/FailoverTransportTest.php   |   520 +
 .../Transport/LoadBalancedTransportTest.php     |   751 +
 .../unit/Swift/Transport/MailTransportTest.php  |   311 +
 .../Swift/Transport/SendmailTransportTest.php   |   152 +
 .../unit/Swift/Transport/StreamBufferTest.php   |    45 +
 .../Symfony/Component/BrowserKit/.gitignore     |     3 +
 .../Symfony/Component/BrowserKit/CHANGELOG.md   |    18 +
 .../Symfony/Component/BrowserKit/Client.php     |   619 +
 .../Symfony/Component/BrowserKit/Cookie.php     |   332 +
 .../Symfony/Component/BrowserKit/CookieJar.php  |   265 +
 .../Symfony/Component/BrowserKit/History.php    |   102 +
 .../Symfony/Component/BrowserKit/LICENSE        |    19 +
 .../Symfony/Component/BrowserKit/README.md      |    23 +
 .../Symfony/Component/BrowserKit/Request.php    |   138 +
 .../Symfony/Component/BrowserKit/Response.php   |   138 +
 .../Component/BrowserKit/Tests/ClientTest.php   |   624 +
 .../BrowserKit/Tests/CookieJarTest.php          |   231 +
 .../Component/BrowserKit/Tests/CookieTest.php   |   179 +
 .../Component/BrowserKit/Tests/HistoryTest.php  |   101 +
 .../Component/BrowserKit/Tests/RequestTest.php  |    53 +
 .../Component/BrowserKit/Tests/ResponseTest.php |    76 +
 .../Symfony/Component/BrowserKit/composer.json  |    39 +
 .../Component/BrowserKit/phpunit.xml.dist       |    29 +
 .../Symfony/Component/Console/.gitignore        |     3 +
 .../Symfony/Component/Console/Application.php   |  1182 +
 .../Symfony/Component/Console/CHANGELOG.md      |    56 +
 .../Component/Console/Command/Command.php       |   657 +
 .../Component/Console/Command/HelpCommand.php   |    91 +
 .../Component/Console/Command/ListCommand.php   |    95 +
 .../Symfony/Component/Console/ConsoleEvents.php |    61 +
 .../Descriptor/ApplicationDescription.php       |   153 +
 .../Component/Console/Descriptor/Descriptor.php |   119 +
 .../Console/Descriptor/DescriptorInterface.php  |    31 +
 .../Console/Descriptor/JsonDescriptor.php       |   165 +
 .../Console/Descriptor/MarkdownDescriptor.php   |   139 +
 .../Console/Descriptor/TextDescriptor.php       |   229 +
 .../Console/Descriptor/XmlDescriptor.php        |   264 +
 .../Console/Event/ConsoleCommandEvent.php       |    21 +
 .../Component/Console/Event/ConsoleEvent.php    |    67 +
 .../Console/Event/ConsoleExceptionEvent.php     |    67 +
 .../Console/Event/ConsoleTerminateEvent.php     |    58 +
 .../Console/Formatter/OutputFormatter.php       |   240 +
 .../Formatter/OutputFormatterInterface.php      |    83 +
 .../Console/Formatter/OutputFormatterStyle.php  |   227 +
 .../Formatter/OutputFormatterStyleInterface.php |    72 +
 .../Formatter/OutputFormatterStyleStack.php     |   121 +
 .../Console/Helper/DescriptorHelper.php         |    96 +
 .../Component/Console/Helper/DialogHelper.php   |   476 +
 .../Console/Helper/FormatterHelper.php          |    80 +
 .../Symfony/Component/Console/Helper/Helper.php |   121 +
 .../Console/Helper/HelperInterface.php          |    49 +
 .../Component/Console/Helper/HelperSet.php      |   108 +
 .../Console/Helper/InputAwareHelper.php         |    33 +
 .../Component/Console/Helper/ProgressBar.php    |   559 +
 .../Component/Console/Helper/ProgressHelper.php |   457 +
 .../Component/Console/Helper/QuestionHelper.php |   418 +
 .../Symfony/Component/Console/Helper/Table.php  |   410 +
 .../Component/Console/Helper/TableHelper.php    |   263 +
 .../Component/Console/Helper/TableSeparator.php |    21 +
 .../Component/Console/Helper/TableStyle.php     |   251 +
 .../Component/Console/Input/ArgvInput.php       |   353 +
 .../Component/Console/Input/ArrayInput.php      |   209 +
 .../Symfony/Component/Console/Input/Input.php   |   226 +
 .../Component/Console/Input/InputArgument.php   |   132 +
 .../Console/Input/InputAwareInterface.php       |    28 +
 .../Component/Console/Input/InputDefinition.php |   453 +
 .../Component/Console/Input/InputInterface.php  |   152 +
 .../Component/Console/Input/InputOption.php     |   213 +
 .../Component/Console/Input/StringInput.php     |    83 +
 .../console/Symfony/Component/Console/LICENSE   |    19 +
 .../Component/Console/Logger/ConsoleLogger.php  |   118 +
 .../Component/Console/Output/BufferedOutput.php |    48 +
 .../Component/Console/Output/ConsoleOutput.php  |   113 +
 .../Console/Output/ConsoleOutputInterface.php   |    35 +
 .../Component/Console/Output/NullOutput.php     |   113 +
 .../Symfony/Component/Console/Output/Output.php |   165 +
 .../Console/Output/OutputInterface.php          |   113 +
 .../Component/Console/Output/StreamOutput.php   |   103 +
 .../Console/Question/ChoiceQuestion.php         |   150 +
 .../Console/Question/ConfirmationQuestion.php   |    55 +
 .../Component/Console/Question/Question.php     |   238 +
 .../console/Symfony/Component/Console/README.md |    67 +
 .../Console/Resources/bin/hiddeninput.exe       |   Bin 0 -> 9216 bytes
 .../console/Symfony/Component/Console/Shell.php |   228 +
 .../Console/Tester/ApplicationTester.php        |   128 +
 .../Component/Console/Tester/CommandTester.php  |   132 +
 .../Component/Console/Tests/ApplicationTest.php |  1032 +
 .../Console/Tests/Command/CommandTest.php       |   342 +
 .../Console/Tests/Command/HelpCommandTest.php   |    64 +
 .../Console/Tests/Command/ListCommandTest.php   |    64 +
 .../Tests/Descriptor/AbstractDescriptorTest.php |   105 +
 .../Tests/Descriptor/JsonDescriptorTest.php     |    27 +
 .../Tests/Descriptor/MarkdownDescriptorTest.php |    27 +
 .../Tests/Descriptor/ObjectsProvider.php        |    74 +
 .../Tests/Descriptor/TextDescriptorTest.php     |    27 +
 .../Tests/Descriptor/XmlDescriptorTest.php      |    27 +
 .../Console/Tests/Fixtures/BarBucCommand.php    |    11 +
 .../Tests/Fixtures/DescriptorApplication1.php   |    18 +
 .../Tests/Fixtures/DescriptorApplication2.php   |    24 +
 .../Tests/Fixtures/DescriptorCommand1.php       |    27 +
 .../Tests/Fixtures/DescriptorCommand2.php       |    30 +
 .../Console/Tests/Fixtures/DummyOutput.php      |    36 +
 .../Console/Tests/Fixtures/Foo1Command.php      |    26 +
 .../Console/Tests/Fixtures/Foo2Command.php      |    21 +
 .../Console/Tests/Fixtures/Foo3Command.php      |    29 +
 .../Console/Tests/Fixtures/Foo4Command.php      |    11 +
 .../Console/Tests/Fixtures/Foo5Command.php      |    10 +
 .../Console/Tests/Fixtures/FooCommand.php       |    33 +
 .../Tests/Fixtures/FooSubnamespaced1Command.php |    26 +
 .../Tests/Fixtures/FooSubnamespaced2Command.php |    26 +
 .../Console/Tests/Fixtures/FoobarCommand.php    |    25 +
 .../Console/Tests/Fixtures/TestCommand.php      |    28 +
 .../Console/Tests/Fixtures/application_1.json   |     1 +
 .../Console/Tests/Fixtures/application_1.md     |   199 +
 .../Console/Tests/Fixtures/application_1.txt    |    17 +
 .../Console/Tests/Fixtures/application_1.xml    |   108 +
 .../Console/Tests/Fixtures/application_2.json   |     1 +
 .../Console/Tests/Fixtures/application_2.md     |   388 +
 .../Console/Tests/Fixtures/application_2.txt    |    22 +
 .../Console/Tests/Fixtures/application_2.xml    |   185 +
 .../Tests/Fixtures/application_astext1.txt      |    20 +
 .../Tests/Fixtures/application_astext2.txt      |    16 +
 .../Tests/Fixtures/application_asxml1.txt       |   144 +
 .../Tests/Fixtures/application_asxml2.txt       |    37 +
 .../Tests/Fixtures/application_gethelp.txt      |    13 +
 .../Fixtures/application_renderexception1.txt   |     8 +
 .../Fixtures/application_renderexception2.txt   |    11 +
 .../Fixtures/application_renderexception3.txt   |    27 +
 .../application_renderexception3decorated.txt   |    27 +
 .../Fixtures/application_renderexception4.txt   |     9 +
 ...application_renderexception_doublewidth1.txt |    11 +
 ...on_renderexception_doublewidth1decorated.txt |    11 +
 ...application_renderexception_doublewidth2.txt |    12 +
 .../Console/Tests/Fixtures/application_run1.txt |    17 +
 .../Console/Tests/Fixtures/application_run2.txt |    29 +
 .../Console/Tests/Fixtures/application_run3.txt |    27 +
 .../Console/Tests/Fixtures/application_run4.txt |     1 +
 .../Console/Tests/Fixtures/command_1.json       |     1 +
 .../Console/Tests/Fixtures/command_1.md         |     8 +
 .../Console/Tests/Fixtures/command_1.txt        |     7 +
 .../Console/Tests/Fixtures/command_1.xml        |    12 +
 .../Console/Tests/Fixtures/command_2.json       |     1 +
 .../Console/Tests/Fixtures/command_2.md         |    30 +
 .../Console/Tests/Fixtures/command_2.txt        |    11 +
 .../Console/Tests/Fixtures/command_2.xml        |    18 +
 .../Console/Tests/Fixtures/command_astext.txt   |    18 +
 .../Console/Tests/Fixtures/command_asxml.txt    |    38 +
 .../Tests/Fixtures/definition_astext.txt        |    11 +
 .../Console/Tests/Fixtures/definition_asxml.txt |    39 +
 .../Tests/Fixtures/input_argument_1.json        |     1 +
 .../Console/Tests/Fixtures/input_argument_1.md  |     7 +
 .../Console/Tests/Fixtures/input_argument_1.txt |     1 +
 .../Console/Tests/Fixtures/input_argument_1.xml |     5 +
 .../Tests/Fixtures/input_argument_2.json        |     1 +
 .../Console/Tests/Fixtures/input_argument_2.md  |     7 +
 .../Console/Tests/Fixtures/input_argument_2.txt |     1 +
 .../Console/Tests/Fixtures/input_argument_2.xml |     5 +
 .../Tests/Fixtures/input_argument_3.json        |     1 +
 .../Console/Tests/Fixtures/input_argument_3.md  |     7 +
 .../Console/Tests/Fixtures/input_argument_3.txt |     1 +
 .../Console/Tests/Fixtures/input_argument_3.xml |     7 +
 .../Tests/Fixtures/input_definition_1.json      |     1 +
 .../Tests/Fixtures/input_definition_1.md        |     0
 .../Tests/Fixtures/input_definition_1.txt       |     0
 .../Tests/Fixtures/input_definition_1.xml       |     5 +
 .../Tests/Fixtures/input_definition_2.json      |     1 +
 .../Tests/Fixtures/input_definition_2.md        |     9 +
 .../Tests/Fixtures/input_definition_2.txt       |     2 +
 .../Tests/Fixtures/input_definition_2.xml       |    10 +
 .../Tests/Fixtures/input_definition_3.json      |     1 +
 .../Tests/Fixtures/input_definition_3.md        |    11 +
 .../Tests/Fixtures/input_definition_3.txt       |     2 +
 .../Tests/Fixtures/input_definition_3.xml       |     9 +
 .../Tests/Fixtures/input_definition_4.json      |     1 +
 .../Tests/Fixtures/input_definition_4.md        |    21 +
 .../Tests/Fixtures/input_definition_4.txt       |     5 +
 .../Tests/Fixtures/input_definition_4.xml       |    14 +
 .../Console/Tests/Fixtures/input_option_1.json  |     1 +
 .../Console/Tests/Fixtures/input_option_1.md    |     9 +
 .../Console/Tests/Fixtures/input_option_1.txt   |     1 +
 .../Console/Tests/Fixtures/input_option_1.xml   |     4 +
 .../Console/Tests/Fixtures/input_option_2.json  |     1 +
 .../Console/Tests/Fixtures/input_option_2.md    |     9 +
 .../Console/Tests/Fixtures/input_option_2.txt   |     1 +
 .../Console/Tests/Fixtures/input_option_2.xml   |     7 +
 .../Console/Tests/Fixtures/input_option_3.json  |     1 +
 .../Console/Tests/Fixtures/input_option_3.md    |     9 +
 .../Console/Tests/Fixtures/input_option_3.txt   |     1 +
 .../Console/Tests/Fixtures/input_option_3.xml   |     5 +
 .../Console/Tests/Fixtures/input_option_4.json  |     1 +
 .../Console/Tests/Fixtures/input_option_4.md    |     9 +
 .../Console/Tests/Fixtures/input_option_4.txt   |     1 +
 .../Console/Tests/Fixtures/input_option_4.xml   |     5 +
 .../Formatter/OutputFormatterStyleStackTest.php |    70 +
 .../Formatter/OutputFormatterStyleTest.php      |    93 +
 .../Tests/Formatter/OutputFormatterTest.php     |   252 +
 .../Tests/Helper/FormatterHelperTest.php        |    99 +
 .../Console/Tests/Helper/HelperSetTest.php      |   153 +
 .../Tests/Helper/LegacyDialogHelperTest.php     |   197 +
 .../Tests/Helper/LegacyProgressHelperTest.php   |   229 +
 .../Tests/Helper/LegacyTableHelperTest.php      |   295 +
 .../Console/Tests/Helper/ProgressBarTest.php    |   446 +
 .../Console/Tests/Helper/QuestionHelperTest.php |   238 +
 .../Console/Tests/Helper/TableTest.php          |   357 +
 .../Console/Tests/Input/ArgvInputTest.php       |   317 +
 .../Console/Tests/Input/ArrayInputTest.php      |   129 +
 .../Console/Tests/Input/InputArgumentTest.php   |   111 +
 .../Console/Tests/Input/InputDefinitionTest.php |   424 +
 .../Console/Tests/Input/InputOptionTest.php     |   204 +
 .../Component/Console/Tests/Input/InputTest.php |   121 +
 .../Console/Tests/Input/StringInputTest.php     |    98 +
 .../Console/Tests/Logger/ConsoleLoggerTest.php  |    58 +
 .../Console/Tests/Output/ConsoleOutputTest.php  |    25 +
 .../Console/Tests/Output/NullOutputTest.php     |    39 +
 .../Console/Tests/Output/OutputTest.php         |   156 +
 .../Console/Tests/Output/StreamOutputTest.php   |    60 +
 .../Tests/Tester/ApplicationTesterTest.php      |    69 +
 .../Console/Tests/Tester/CommandTesterTest.php  |    84 +
 .../Symfony/Component/Console/composer.json     |    39 +
 .../Symfony/Component/Console/phpunit.xml.dist  |    29 +
 .../Symfony/Component/CssSelector/.gitignore    |     3 +
 .../Symfony/Component/CssSelector/CHANGELOG.md  |     7 +
 .../Component/CssSelector/CssSelector.php       |   116 +
 .../Exception/ExceptionInterface.php            |    24 +
 .../Exception/ExpressionErrorException.php      |    24 +
 .../Exception/InternalErrorException.php        |    24 +
 .../CssSelector/Exception/ParseException.php    |    24 +
 .../Exception/SyntaxErrorException.php          |    73 +
 .../Symfony/Component/CssSelector/LICENSE       |    19 +
 .../Component/CssSelector/Node/AbstractNode.php |    40 +
 .../CssSelector/Node/AttributeNode.php          |   124 +
 .../Component/CssSelector/Node/ClassNode.php    |    75 +
 .../CssSelector/Node/CombinedSelectorNode.php   |    92 +
 .../Component/CssSelector/Node/ElementNode.php  |    77 +
 .../Component/CssSelector/Node/FunctionNode.php |    96 +
 .../Component/CssSelector/Node/HashNode.php     |    75 +
 .../Component/CssSelector/Node/NegationNode.php |    75 +
 .../CssSelector/Node/NodeInterface.php          |    44 +
 .../Component/CssSelector/Node/PseudoNode.php   |    75 +
 .../Component/CssSelector/Node/SelectorNode.php |    75 +
 .../Component/CssSelector/Node/Specificity.php  |    78 +
 .../Parser/Handler/CommentHandler.php           |    46 +
 .../Parser/Handler/HandlerInterface.php         |    34 +
 .../CssSelector/Parser/Handler/HashHandler.php  |    67 +
 .../Parser/Handler/IdentifierHandler.php        |    67 +
 .../Parser/Handler/NumberHandler.php            |    58 +
 .../Parser/Handler/StringHandler.php            |    86 +
 .../Parser/Handler/WhitespaceHandler.php        |    44 +
 .../Component/CssSelector/Parser/Parser.php     |   399 +
 .../CssSelector/Parser/ParserInterface.php      |    34 +
 .../Component/CssSelector/Parser/Reader.php     |   125 +
 .../CssSelector/Parser/Shortcut/ClassParser.php |    50 +
 .../Parser/Shortcut/ElementParser.php           |    46 +
 .../Parser/Shortcut/EmptyStringParser.php       |    44 +
 .../CssSelector/Parser/Shortcut/HashParser.php  |    50 +
 .../Component/CssSelector/Parser/Token.php      |   160 +
 .../CssSelector/Parser/TokenStream.php          |   182 +
 .../CssSelector/Parser/Tokenizer/Tokenizer.php  |    78 +
 .../Parser/Tokenizer/TokenizerEscaping.php      |    82 +
 .../Parser/Tokenizer/TokenizerPatterns.php      |   160 +
 .../Symfony/Component/CssSelector/README.md     |    47 +
 .../CssSelector/Tests/CssSelectorTest.php       |    64 +
 .../CssSelector/Tests/Node/AbstractNodeTest.php |    32 +
 .../Tests/Node/AttributeNodeTest.php            |    37 +
 .../CssSelector/Tests/Node/ClassNodeTest.php    |    33 +
 .../Tests/Node/CombinedSelectorNodeTest.php     |    35 +
 .../CssSelector/Tests/Node/ElementNodeTest.php  |    35 +
 .../CssSelector/Tests/Node/FunctionNodeTest.php |    47 +
 .../CssSelector/Tests/Node/HashNodeTest.php     |    33 +
 .../CssSelector/Tests/Node/NegationNodeTest.php |    33 +
 .../CssSelector/Tests/Node/PseudoNodeTest.php   |    32 +
 .../CssSelector/Tests/Node/SelectorNodeTest.php |    34 +
 .../CssSelector/Tests/Node/SpecificityTest.php  |    40 +
 .../Parser/Handler/AbstractHandlerTest.php      |    67 +
 .../Tests/Parser/Handler/CommentHandlerTest.php |    55 +
 .../Tests/Parser/Handler/HashHandlerTest.php    |    49 +
 .../Parser/Handler/IdentifierHandlerTest.php    |    49 +
 .../Tests/Parser/Handler/NumberHandlerTest.php  |    50 +
 .../Tests/Parser/Handler/StringHandlerTest.php  |    50 +
 .../Parser/Handler/WhitespaceHandlerTest.php    |    44 +
 .../CssSelector/Tests/Parser/ParserTest.php     |   248 +
 .../CssSelector/Tests/Parser/ReaderTest.php     |   101 +
 .../Tests/Parser/Shortcut/ClassParserTest.php   |    44 +
 .../Tests/Parser/Shortcut/ElementParserTest.php |    43 +
 .../Parser/Shortcut/EmptyStringParserTest.php   |    35 +
 .../Tests/Parser/Shortcut/HashParserTest.php    |    44 +
 .../Tests/Parser/TokenStreamTest.php            |    95 +
 .../CssSelector/Tests/XPath/Fixtures/ids.html   |    48 +
 .../CssSelector/Tests/XPath/Fixtures/lang.xml   |    11 +
 .../Tests/XPath/Fixtures/shakespear.html        |   308 +
 .../CssSelector/Tests/XPath/TranslatorTest.php  |   324 +
 .../XPath/Extension/AbstractExtension.php       |    63 +
 .../Extension/AttributeMatchingExtension.php    |   173 +
 .../XPath/Extension/CombinationExtension.php    |    93 +
 .../XPath/Extension/ExtensionInterface.php      |    67 +
 .../XPath/Extension/FunctionExtension.php       |   209 +
 .../XPath/Extension/HtmlExtension.php           |   238 +
 .../XPath/Extension/NodeExtension.php           |   271 +
 .../XPath/Extension/PseudoClassExtension.php    |   162 +
 .../Component/CssSelector/XPath/Translator.php  |   299 +
 .../CssSelector/XPath/TranslatorInterface.php   |    45 +
 .../Component/CssSelector/XPath/XPathExpr.php   |   140 +
 .../Symfony/Component/CssSelector/composer.json |    35 +
 .../Component/CssSelector/phpunit.xml.dist      |    29 +
 .../debug/Symfony/Component/Debug/.gitignore    |     3 +
 .../debug/Symfony/Component/Debug/CHANGELOG.md  |    20 +
 .../debug/Symfony/Component/Debug/Debug.php     |    54 +
 .../Component/Debug/DebugClassLoader.php        |   222 +
 .../Symfony/Component/Debug/ErrorHandler.php    |   369 +
 .../Debug/Exception/ClassNotFoundException.php  |    33 +
 .../Debug/Exception/ContextErrorException.php   |    36 +
 .../Debug/Exception/DummyException.php          |    21 +
 .../Debug/Exception/FatalErrorException.php     |    86 +
 .../Debug/Exception/FlattenException.php        |   292 +
 .../Debug/Exception/OutOfMemoryException.php    |    21 +
 .../Exception/UndefinedFunctionException.php    |    33 +
 .../Exception/UndefinedMethodException.php      |    33 +
 .../Component/Debug/ExceptionHandler.php        |   411 +
 .../ClassNotFoundFatalErrorHandler.php          |   203 +
 .../FatalErrorHandlerInterface.php              |    32 +
 .../UndefinedFunctionFatalErrorHandler.php      |    91 +
 .../UndefinedMethodFatalErrorHandler.php        |    54 +
 .../debug/Symfony/Component/Debug/LICENSE       |    19 +
 .../debug/Symfony/Component/Debug/README.md     |    44 +
 .../Debug/Tests/DebugClassLoaderTest.php        |   187 +
 .../Component/Debug/Tests/ErrorHandlerTest.php  |   242 +
 .../Tests/Exception/FlattenExceptionTest.php    |   256 +
 .../Debug/Tests/ExceptionHandlerTest.php        |    62 +
 .../ClassNotFoundFatalErrorHandlerTest.php      |   159 +
 .../UndefinedFunctionFatalErrorHandlerTest.php  |    80 +
 .../UndefinedMethodFatalErrorHandlerTest.php    |    66 +
 .../Debug/Tests/Fixtures/ClassAlias.php         |     3 +
 .../Debug/Tests/Fixtures/PEARClass.php          |     5 +
 .../Debug/Tests/Fixtures/RequiredTwice.php      |     7 +
 .../Debug/Tests/Fixtures/casemismatch.php       |     7 +
 .../Debug/Tests/Fixtures/notPsr0Bis.php         |     7 +
 .../Tests/Fixtures/psr4/Psr4CaseMismatch.php    |     7 +
 .../Debug/Tests/Fixtures/reallyNotPsr0.php      |     7 +
 .../Debug/Tests/MockExceptionHandler.php        |    24 +
 .../debug/Symfony/Component/Debug/composer.json |    43 +
 .../Symfony/Component/Debug/phpunit.xml.dist    |    28 +
 .../Symfony/Component/DomCrawler/.gitignore     |     3 +
 .../Symfony/Component/DomCrawler/CHANGELOG.md   |    45 +
 .../Symfony/Component/DomCrawler/Crawler.php    |  1006 +
 .../DomCrawler/Field/ChoiceFormField.php        |   327 +
 .../DomCrawler/Field/FileFormField.php          |   112 +
 .../Component/DomCrawler/Field/FormField.php    |   116 +
 .../DomCrawler/Field/InputFormField.php         |    47 +
 .../DomCrawler/Field/TextareaFormField.php      |    39 +
 .../Symfony/Component/DomCrawler/Form.php       |   479 +
 .../Component/DomCrawler/FormFieldRegistry.php  |   220 +
 .../Symfony/Component/DomCrawler/LICENSE        |    19 +
 .../Symfony/Component/DomCrawler/Link.php       |   232 +
 .../Symfony/Component/DomCrawler/README.md      |    36 +
 .../Component/DomCrawler/Tests/CrawlerTest.php  |  1050 +
 .../Tests/Field/ChoiceFormFieldTest.php         |   388 +
 .../Tests/Field/FileFormFieldTest.php           |   114 +
 .../DomCrawler/Tests/Field/FormFieldTest.php    |    38 +
 .../Tests/Field/FormFieldTestCase.php           |    27 +
 .../Tests/Field/InputFormFieldTest.php          |    49 +
 .../Tests/Field/TextareaFormFieldTest.php       |    46 +
 .../DomCrawler/Tests/Fixtures/no-extension      |     1 +
 .../DomCrawler/Tests/Fixtures/windows-1250.html |     8 +
 .../Component/DomCrawler/Tests/FormTest.php     |   943 +
 .../Component/DomCrawler/Tests/LinkTest.php     |   148 +
 .../Symfony/Component/DomCrawler/composer.json  |    37 +
 .../Component/DomCrawler/phpunit.xml.dist       |    30 +
 .../Component/EventDispatcher/.gitignore        |     3 +
 .../Component/EventDispatcher/CHANGELOG.md      |    23 +
 .../ContainerAwareEventDispatcher.php           |   202 +
 .../Debug/TraceableEventDispatcher.php          |   320 +
 .../Debug/TraceableEventDispatcherInterface.php |    34 +
 .../EventDispatcher/Debug/WrappedListener.php   |    71 +
 .../RegisterListenersPass.php                   |   110 +
 .../Symfony/Component/EventDispatcher/Event.php |   130 +
 .../EventDispatcher/EventDispatcher.php         |   185 +
 .../EventDispatcherInterface.php                |    96 +
 .../EventSubscriberInterface.php                |    50 +
 .../Component/EventDispatcher/GenericEvent.php  |   186 +
 .../ImmutableEventDispatcher.php                |    93 +
 .../Symfony/Component/EventDispatcher/LICENSE   |    19 +
 .../Symfony/Component/EventDispatcher/README.md |    27 +
 .../Tests/AbstractEventDispatcherTest.php       |   369 +
 .../Tests/ContainerAwareEventDispatcherTest.php |   249 +
 .../Debug/TraceableEventDispatcherTest.php      |   185 +
 .../RegisterListenersPassTest.php               |   200 +
 .../Tests/EventDispatcherTest.php               |    22 +
 .../EventDispatcher/Tests/EventTest.php         |   100 +
 .../EventDispatcher/Tests/GenericEventTest.php  |   139 +
 .../Tests/ImmutableEventDispatcherTest.php      |   105 +
 .../Component/EventDispatcher/composer.json     |    43 +
 .../Component/EventDispatcher/phpunit.xml.dist  |    28 +
 .../Symfony/Component/Filesystem/.gitignore     |     3 +
 .../Symfony/Component/Filesystem/CHANGELOG.md   |    28 +
 .../Filesystem/Exception/ExceptionInterface.php |    23 +
 .../Exception/FileNotFoundException.php         |    34 +
 .../Filesystem/Exception/IOException.php        |    41 +
 .../Exception/IOExceptionInterface.php          |    27 +
 .../Symfony/Component/Filesystem/Filesystem.php |   497 +
 .../Symfony/Component/Filesystem/LICENSE        |    19 +
 .../Component/Filesystem/LockHandler.php        |   111 +
 .../Symfony/Component/Filesystem/README.md      |    47 +
 .../Filesystem/Tests/ExceptionTest.php          |    46 +
 .../Filesystem/Tests/FilesystemTest.php         |   998 +
 .../Filesystem/Tests/FilesystemTestCase.php     |   131 +
 .../Filesystem/Tests/LockHandlerTest.php        |    85 +
 .../Symfony/Component/Filesystem/composer.json  |    34 +
 .../Component/Filesystem/phpunit.xml.dist       |    26 +
 .../finder/Symfony/Component/Finder/.gitignore  |     3 +
 .../Finder/Adapter/AbstractAdapter.php          |   236 +
 .../Finder/Adapter/AbstractFindAdapter.php      |   327 +
 .../Finder/Adapter/AdapterInterface.php         |   144 +
 .../Component/Finder/Adapter/BsdFindAdapter.php |   103 +
 .../Component/Finder/Adapter/GnuFindAdapter.php |   104 +
 .../Component/Finder/Adapter/PhpAdapter.php     |    98 +
 .../Symfony/Component/Finder/CHANGELOG.md       |    34 +
 .../Component/Finder/Comparator/Comparator.php  |    98 +
 .../Finder/Comparator/DateComparator.php        |    53 +
 .../Finder/Comparator/NumberComparator.php      |    81 +
 .../Finder/Exception/AccessDeniedException.php  |    19 +
 .../Exception/AdapterFailureException.php       |    46 +
 .../Finder/Exception/ExceptionInterface.php     |    23 +
 .../Exception/OperationNotPermitedException.php |    19 +
 .../Exception/ShellCommandFailureException.php  |    45 +
 .../Component/Finder/Expression/Expression.php  |   146 +
 .../Component/Finder/Expression/Glob.php        |   157 +
 .../Component/Finder/Expression/Regex.php       |   321 +
 .../Finder/Expression/ValueInterface.php        |    60 +
 .../finder/Symfony/Component/Finder/Finder.php  |   840 +
 .../finder/Symfony/Component/Finder/Glob.php    |   103 +
 .../Finder/Iterator/CustomFilterIterator.php    |    63 +
 .../Finder/Iterator/DateRangeFilterIterator.php |    60 +
 .../Iterator/DepthRangeFilterIterator.php       |    47 +
 .../Iterator/ExcludeDirectoryFilterIterator.php |    55 +
 .../Finder/Iterator/FilePathsIterator.php       |   131 +
 .../Finder/Iterator/FileTypeFilterIterator.php  |    55 +
 .../Iterator/FilecontentFilterIterator.php      |    76 +
 .../Finder/Iterator/FilenameFilterIterator.php  |    67 +
 .../Finder/Iterator/FilterIterator.php          |    49 +
 .../Iterator/MultiplePcreFilterIterator.php     |    66 +
 .../Finder/Iterator/PathFilterIterator.php      |    74 +
 .../Iterator/RecursiveDirectoryIterator.php     |   126 +
 .../Finder/Iterator/SizeRangeFilterIterator.php |    59 +
 .../Finder/Iterator/SortableIterator.php        |    82 +
 .../finder/Symfony/Component/Finder/LICENSE     |    19 +
 .../finder/Symfony/Component/Finder/README.md   |    53 +
 .../Symfony/Component/Finder/Shell/Command.php  |   294 +
 .../Symfony/Component/Finder/Shell/Shell.php    |    97 +
 .../Symfony/Component/Finder/SplFileInfo.php    |    77 +
 .../Finder/Tests/Comparator/ComparatorTest.php  |    64 +
 .../Tests/Comparator/DateComparatorTest.php     |    63 +
 .../Tests/Comparator/NumberComparatorTest.php   |   107 +
 .../Finder/Tests/Expression/ExpressionTest.php  |    68 +
 .../Finder/Tests/Expression/GlobTest.php        |    47 +
 .../Finder/Tests/Expression/RegexTest.php       |   143 +
 .../Finder/Tests/FakeAdapter/DummyAdapter.php   |    57 +
 .../Finder/Tests/FakeAdapter/FailingAdapter.php |    45 +
 .../Finder/Tests/FakeAdapter/NamedAdapter.php   |    57 +
 .../Tests/FakeAdapter/UnsupportedAdapter.php    |    44 +
 .../Component/Finder/Tests/FinderTest.php       |   869 +
 .../Finder/Tests/Fixtures/A/B/C/abc.dat         |     0
 .../Component/Finder/Tests/Fixtures/A/B/ab.dat  |     0
 .../Component/Finder/Tests/Fixtures/A/a.dat     |     0
 .../Tests/Fixtures/copy/A/B/C/abc.dat.copy      |     0
 .../Finder/Tests/Fixtures/copy/A/B/ab.dat.copy  |     0
 .../Finder/Tests/Fixtures/copy/A/a.dat.copy     |     0
 .../Component/Finder/Tests/Fixtures/dolor.txt   |     2 +
 .../Component/Finder/Tests/Fixtures/ipsum.txt   |     2 +
 .../Component/Finder/Tests/Fixtures/lorem.txt   |     2 +
 .../Component/Finder/Tests/Fixtures/one/a       |     0
 .../Finder/Tests/Fixtures/one/b/c.neon          |     0
 .../Finder/Tests/Fixtures/one/b/d.neon          |     0
 .../Tests/Fixtures/r+e.gex[c]a(r)s/dir/bar.dat  |     0
 .../Finder/Tests/Fixtures/with space/foo.txt    |     0
 .../Tests/Iterator/CustomFilterIteratorTest.php |    46 +
 .../Iterator/DateRangeFilterIteratorTest.php    |    72 +
 .../Iterator/DepthRangeFilterIteratorTest.php   |    80 +
 .../ExcludeDirectoryFilterIteratorTest.php      |    64 +
 .../Tests/Iterator/FilePathsIteratorTest.php    |    66 +
 .../Iterator/FileTypeFilterIteratorTest.php     |    72 +
 .../Iterator/FilecontentFilterIteratorTest.php  |    86 +
 .../Iterator/FilenameFilterIteratorTest.php     |    54 +
 .../Tests/Iterator/FilterIteratorTest.php       |    50 +
 .../Finder/Tests/Iterator/Iterator.php          |    55 +
 .../Finder/Tests/Iterator/IteratorTestCase.php  |    98 +
 .../Tests/Iterator/MockFileListIterator.php     |    21 +
 .../Finder/Tests/Iterator/MockSplFileInfo.php   |   134 +
 .../Iterator/MultiplePcreFilterIteratorTest.php |    67 +
 .../Tests/Iterator/PathFilterIteratorTest.php   |    83 +
 .../Tests/Iterator/RealIteratorTestCase.php     |   109 +
 .../Iterator/RecursiveDirectoryIteratorTest.php |    83 +
 .../Iterator/SizeRangeFilterIteratorTest.php    |    68 +
 .../Tests/Iterator/SortableIteratorTest.php     |   169 +
 .../Symfony/Component/Finder/composer.json      |    31 +
 .../Symfony/Component/Finder/phpunit.xml.dist   |    28 +
 .../Symfony/Component/HttpFoundation/.gitignore |     3 +
 .../Component/HttpFoundation/AcceptHeader.php   |   172 +
 .../HttpFoundation/AcceptHeaderItem.php         |   226 +
 .../Component/HttpFoundation/ApacheRequest.php  |    43 +
 .../HttpFoundation/BinaryFileResponse.php       |   301 +
 .../Component/HttpFoundation/CHANGELOG.md       |   111 +
 .../Symfony/Component/HttpFoundation/Cookie.php |   210 +
 .../HttpFoundation/ExpressionRequestMatcher.php |    47 +
 .../File/Exception/AccessDeniedException.php    |    30 +
 .../File/Exception/FileException.php            |    21 +
 .../File/Exception/FileNotFoundException.php    |    30 +
 .../File/Exception/UnexpectedTypeException.php  |    20 +
 .../File/Exception/UploadException.php          |    21 +
 .../Component/HttpFoundation/File/File.php      |   160 +
 .../File/MimeType/ExtensionGuesser.php          |    96 +
 .../File/MimeType/ExtensionGuesserInterface.php |    27 +
 .../File/MimeType/FileBinaryMimeTypeGuesser.php |    87 +
 .../File/MimeType/FileinfoMimeTypeGuesser.php   |    71 +
 .../File/MimeType/MimeTypeExtensionGuesser.php  |   807 +
 .../File/MimeType/MimeTypeGuesser.php           |   136 +
 .../File/MimeType/MimeTypeGuesserInterface.php  |    35 +
 .../HttpFoundation/File/UploadedFile.php        |   309 +
 .../Component/HttpFoundation/FileBag.php        |   155 +
 .../Component/HttpFoundation/HeaderBag.php      |   348 +
 .../Component/HttpFoundation/IpUtils.php        |   124 +
 .../Component/HttpFoundation/JsonResponse.php   |   202 +
 .../Symfony/Component/HttpFoundation/LICENSE    |    19 +
 .../Component/HttpFoundation/ParameterBag.php   |   305 +
 .../Symfony/Component/HttpFoundation/README.md  |    56 +
 .../HttpFoundation/RedirectResponse.php         |   106 +
 .../Component/HttpFoundation/Request.php        |  1913 +
 .../Component/HttpFoundation/RequestMatcher.php |   160 +
 .../HttpFoundation/RequestMatcherInterface.php  |    33 +
 .../Component/HttpFoundation/RequestStack.php   |   103 +
 .../Resources/stubs/SessionHandlerInterface.php |    90 +
 .../Component/HttpFoundation/Response.php       |  1275 +
 .../HttpFoundation/ResponseHeaderBag.php        |   320 +
 .../Component/HttpFoundation/ServerBag.php      |    91 +
 .../Session/Attribute/AttributeBag.php          |   157 +
 .../Session/Attribute/AttributeBagInterface.php |    72 +
 .../Attribute/NamespacedAttributeBag.php        |   158 +
 .../Session/Flash/AutoExpireFlashBag.php        |   175 +
 .../HttpFoundation/Session/Flash/FlashBag.php   |   180 +
 .../Session/Flash/FlashBagInterface.php         |    93 +
 .../HttpFoundation/Session/Session.php          |   251 +
 .../Session/SessionBagInterface.php             |    48 +
 .../HttpFoundation/Session/SessionInterface.php |   208 +
 .../Storage/Handler/MemcacheSessionHandler.php  |   119 +
 .../Storage/Handler/MemcachedSessionHandler.php |   125 +
 .../Storage/Handler/MongoDbSessionHandler.php   |   173 +
 .../Handler/NativeFileSessionHandler.php        |    58 +
 .../Storage/Handler/NativeSessionHandler.php    |    24 +
 .../Storage/Handler/NullSessionHandler.php      |    72 +
 .../Storage/Handler/PdoSessionHandler.php       |   265 +
 .../Handler/WriteCheckSessionHandler.php        |    91 +
 .../Session/Storage/MetadataBag.php             |   170 +
 .../Session/Storage/MockArraySessionStorage.php |   268 +
 .../Session/Storage/MockFileSessionStorage.php  |   138 +
 .../Session/Storage/NativeSessionStorage.php    |   414 +
 .../Session/Storage/PhpBridgeSessionStorage.php |    68 +
 .../Session/Storage/Proxy/AbstractProxy.php     |   154 +
 .../Session/Storage/Proxy/NativeProxy.php       |    41 +
 .../Storage/Proxy/SessionHandlerProxy.php       |    95 +
 .../Session/Storage/SessionStorageInterface.php |   153 +
 .../HttpFoundation/StreamedResponse.php         |   133 +
 .../Tests/AcceptHeaderItemTest.php              |   112 +
 .../HttpFoundation/Tests/AcceptHeaderTest.php   |   102 +
 .../HttpFoundation/Tests/ApacheRequestTest.php  |    92 +
 .../Tests/BinaryFileResponseTest.php            |   234 +
 .../HttpFoundation/Tests/CookieTest.php         |   145 +
 .../Tests/ExpressionRequestMatcherTest.php      |    68 +
 .../HttpFoundation/Tests/File/FakeFile.php      |    45 +
 .../HttpFoundation/Tests/File/FileTest.php      |   169 +
 .../Tests/File/Fixtures/.unknownextension       |     1 +
 .../Tests/File/Fixtures/directory/.empty        |     0
 .../HttpFoundation/Tests/File/Fixtures/test     |   Bin 0 -> 35 bytes
 .../HttpFoundation/Tests/File/Fixtures/test.gif |   Bin 0 -> 35 bytes
 .../Tests/File/MimeType/MimeTypeTest.php        |   102 +
 .../Tests/File/UploadedFileTest.php             |   272 +
 .../HttpFoundation/Tests/FileBagTest.php        |   148 +
 .../HttpFoundation/Tests/HeaderBagTest.php      |   216 +
 .../HttpFoundation/Tests/IpUtilsTest.php        |    81 +
 .../HttpFoundation/Tests/JsonResponseTest.php   |   232 +
 .../HttpFoundation/Tests/ParameterBagTest.php   |   253 +
 .../Tests/RedirectResponseTest.php              |    83 +
 .../HttpFoundation/Tests/RequestMatcherTest.php |   130 +
 .../HttpFoundation/Tests/RequestStackTest.php   |    69 +
 .../HttpFoundation/Tests/RequestTest.php        |  1759 +
 .../Tests/ResponseHeaderBagTest.php             |   286 +
 .../HttpFoundation/Tests/ResponseTest.php       |   874 +
 .../HttpFoundation/Tests/ResponseTestCase.php   |    88 +
 .../HttpFoundation/Tests/ServerBagTest.php      |   144 +
 .../Session/Attribute/AttributeBagTest.php      |   193 +
 .../Attribute/NamespacedAttributeBagTest.php    |   183 +
 .../Session/Flash/AutoExpireFlashBagTest.php    |   155 +
 .../Tests/Session/Flash/FlashBagTest.php        |   154 +
 .../Tests/Session/SessionTest.php               |   227 +
 .../Handler/MemcacheSessionHandlerTest.php      |   132 +
 .../Handler/MemcachedSessionHandlerTest.php     |   131 +
 .../Handler/MongoDbSessionHandlerTest.php       |   186 +
 .../Handler/NativeFileSessionHandlerTest.php    |    81 +
 .../Handler/NativeSessionHandlerTest.php        |    40 +
 .../Storage/Handler/NullSessionHandlerTest.php  |    58 +
 .../Storage/Handler/PdoSessionHandlerTest.php   |   111 +
 .../Handler/WriteCheckSessionHandlerTest.php    |    94 +
 .../Tests/Session/Storage/MetadataBagTest.php   |   134 +
 .../Storage/MockArraySessionStorageTest.php     |   106 +
 .../Storage/MockFileSessionStorageTest.php      |   126 +
 .../Storage/NativeSessionStorageTest.php        |   248 +
 .../Storage/PhpBridgeSessionStorageTest.php     |   124 +
 .../Session/Storage/Proxy/AbstractProxyTest.php |   217 +
 .../Session/Storage/Proxy/NativeProxyTest.php   |    35 +
 .../Storage/Proxy/SessionHandlerProxyTest.php   |   127 +
 .../Tests/StreamedResponseTest.php              |   114 +
 .../Component/HttpFoundation/composer.json      |    35 +
 .../Component/HttpFoundation/phpunit.xml.dist   |    29 +
 .../Symfony/Component/HttpKernel/.gitignore     |     5 +
 .../Component/HttpKernel/Bundle/Bundle.php      |   202 +
 .../HttpKernel/Bundle/BundleInterface.php       |   102 +
 .../Symfony/Component/HttpKernel/CHANGELOG.md   |    62 +
 .../CacheClearer/CacheClearerInterface.php      |    27 +
 .../CacheClearer/ChainCacheClearer.php          |    55 +
 .../HttpKernel/CacheWarmer/CacheWarmer.php      |    32 +
 .../CacheWarmer/CacheWarmerAggregate.php        |    74 +
 .../CacheWarmer/CacheWarmerInterface.php        |    32 +
 .../CacheWarmer/WarmableInterface.php           |    27 +
 .../Symfony/Component/HttpKernel/Client.php     |   228 +
 .../HttpKernel/Config/EnvParametersResource.php |    95 +
 .../Component/HttpKernel/Config/FileLocator.php |    56 +
 .../Controller/ControllerReference.php          |    46 +
 .../Controller/ControllerResolver.php           |   158 +
 .../Controller/ControllerResolverInterface.php  |    63 +
 .../Controller/TraceableControllerResolver.php  |    66 +
 .../DataCollector/ConfigDataCollector.php       |   245 +
 .../HttpKernel/DataCollector/DataCollector.php  |    58 +
 .../DataCollector/DataCollectorInterface.php    |    45 +
 .../DataCollector/EventDataCollector.php        |   107 +
 .../DataCollector/ExceptionDataCollector.php    |   104 +
 .../LateDataCollectorInterface.php              |    25 +
 .../DataCollector/LoggerDataCollector.php       |   161 +
 .../DataCollector/MemoryDataCollector.php       |   109 +
 .../DataCollector/RequestDataCollector.php      |   338 +
 .../DataCollector/RouterDataCollector.php       |   102 +
 .../DataCollector/TimeDataCollector.php         |   136 +
 .../DataCollector/Util/ValueExporter.php        |    74 +
 .../Component/HttpKernel/Debug/ErrorHandler.php |    25 +
 .../HttpKernel/Debug/ExceptionHandler.php       |    25 +
 .../Debug/TraceableEventDispatcher.php          |    98 +
 .../AddClassesToCachePass.php                   |    46 +
 .../ConfigurableExtension.php                   |    45 +
 .../ContainerAwareHttpKernel.php                |    77 +
 .../DependencyInjection/Extension.php           |    44 +
 .../MergeExtensionConfigurationPass.php         |    41 +
 .../RegisterListenersPass.php                   |    23 +
 .../HttpKernel/Event/FilterControllerEvent.php  |   110 +
 .../HttpKernel/Event/FilterResponseEvent.php    |    68 +
 .../HttpKernel/Event/FinishRequestEvent.php     |    21 +
 .../HttpKernel/Event/GetResponseEvent.php       |    73 +
 .../GetResponseForControllerResultEvent.php     |    67 +
 .../Event/GetResponseForExceptionEvent.php      |    73 +
 .../Component/HttpKernel/Event/KernelEvent.php  |   104 +
 .../HttpKernel/Event/PostResponseEvent.php      |    73 +
 .../EventListener/AddRequestFormatsListener.php |    57 +
 .../EventListener/DebugHandlersListener.php     |    51 +
 .../EventListener/ErrorsLoggerListener.php      |    49 +
 .../HttpKernel/EventListener/EsiListener.php    |    58 +
 .../EventListener/ExceptionListener.php         |   127 +
 .../EventListener/FragmentListener.php          |   106 +
 .../HttpKernel/EventListener/LocaleListener.php |   111 +
 .../EventListener/ProfilerListener.php          |   158 +
 .../EventListener/ResponseListener.php          |    58 +
 .../HttpKernel/EventListener/RouterListener.php |   170 +
 .../EventListener/SaveSessionListener.php       |    66 +
 .../EventListener/SessionListener.php           |    53 +
 .../EventListener/StreamedResponseListener.php  |    51 +
 .../EventListener/TestSessionListener.php       |    83 +
 .../Exception/AccessDeniedHttpException.php     |    33 +
 .../Exception/BadRequestHttpException.php       |    32 +
 .../Exception/ConflictHttpException.php         |    32 +
 .../Exception/FatalErrorException.php           |    21 +
 .../HttpKernel/Exception/FlattenException.php   |    23 +
 .../HttpKernel/Exception/GoneHttpException.php  |    32 +
 .../HttpKernel/Exception/HttpException.php      |    41 +
 .../Exception/HttpExceptionInterface.php        |    34 +
 .../Exception/LengthRequiredHttpException.php   |    32 +
 .../Exception/MethodNotAllowedHttpException.php |    35 +
 .../Exception/NotAcceptableHttpException.php    |    32 +
 .../Exception/NotFoundHttpException.php         |    32 +
 .../PreconditionFailedHttpException.php         |    32 +
 .../PreconditionRequiredHttpException.php       |    34 +
 .../ServiceUnavailableHttpException.php         |    38 +
 .../Exception/TooManyRequestsHttpException.php  |    40 +
 .../Exception/UnauthorizedHttpException.php     |    35 +
 .../UnprocessableEntityHttpException.php        |    32 +
 .../UnsupportedMediaTypeHttpException.php       |    32 +
 .../HttpKernel/Fragment/EsiFragmentRenderer.php |   100 +
 .../HttpKernel/Fragment/FragmentHandler.php     |   148 +
 .../Fragment/FragmentRendererInterface.php      |    42 +
 .../Fragment/HIncludeFragmentRenderer.php       |   164 +
 .../Fragment/InlineFragmentRenderer.php         |   152 +
 .../Fragment/RoutableFragmentRenderer.php       |    90 +
 .../Component/HttpKernel/HttpCache/Esi.php      |   245 +
 .../HttpCache/EsiResponseCacheStrategy.php      |    85 +
 .../EsiResponseCacheStrategyInterface.php       |    41 +
 .../HttpKernel/HttpCache/HttpCache.php          |   690 +
 .../Component/HttpKernel/HttpCache/Store.php    |   449 +
 .../HttpKernel/HttpCache/StoreInterface.php     |    96 +
 .../Symfony/Component/HttpKernel/HttpKernel.php |   291 +
 .../HttpKernel/HttpKernelInterface.php          |    47 +
 .../Symfony/Component/HttpKernel/Kernel.php     |   783 +
 .../Component/HttpKernel/KernelEvents.php       |   127 +
 .../Component/HttpKernel/KernelInterface.php    |   209 +
 .../Symfony/Component/HttpKernel/LICENSE        |    19 +
 .../HttpKernel/Log/DebugLoggerInterface.php     |    38 +
 .../HttpKernel/Log/LoggerInterface.php          |    54 +
 .../Component/HttpKernel/Log/NullLogger.php     |    60 +
 .../Profiler/BaseMemcacheProfilerStorage.php    |   306 +
 .../HttpKernel/Profiler/FileProfilerStorage.php |   277 +
 .../Profiler/MemcacheProfilerStorage.php        |   107 +
 .../Profiler/MemcachedProfilerStorage.php       |   103 +
 .../Profiler/MongoDbProfilerStorage.php         |   257 +
 .../Profiler/MysqlProfilerStorage.php           |    79 +
 .../HttpKernel/Profiler/PdoProfilerStorage.php  |   262 +
 .../Component/HttpKernel/Profiler/Profile.php   |   275 +
 .../Component/HttpKernel/Profiler/Profiler.php  |   295 +
 .../Profiler/ProfilerStorageInterface.php       |    59 +
 .../Profiler/RedisProfilerStorage.php           |   390 +
 .../Profiler/SqliteProfilerStorage.php          |   139 +
 .../Symfony/Component/HttpKernel/README.md      |    99 +
 .../HttpKernel/TerminableInterface.php          |    39 +
 .../HttpKernel/Tests/Bundle/BundleTest.php      |    33 +
 .../CacheClearer/ChainCacheClearerTest.php      |    57 +
 .../CacheWarmer/CacheWarmerAggregateTest.php    |   100 +
 .../Tests/CacheWarmer/CacheWarmerTest.php       |    67 +
 .../Component/HttpKernel/Tests/ClientTest.php   |   179 +
 .../Tests/Config/EnvParametersResourceTest.php  |   106 +
 .../HttpKernel/Tests/Config/FileLocatorTest.php |    47 +
 .../Tests/Controller/ControllerResolverTest.php |   236 +
 .../DataCollector/ConfigDataCollectorTest.php   |    80 +
 .../ExceptionDataCollectorTest.php              |    39 +
 .../DataCollector/LoggerDataCollectorTest.php   |    80 +
 .../DataCollector/MemoryDataCollectorTest.php   |    58 +
 .../DataCollector/RequestDataCollectorTest.php  |   222 +
 .../DataCollector/TimeDataCollectorTest.php     |    51 +
 .../Debug/TraceableEventDispatcherTest.php      |   104 +
 .../ContainerAwareHttpKernelTest.php            |   165 +
 .../MergeExtensionConfigurationPassTest.php     |    57 +
 .../AddRequestFormatsListenerTest.php           |    83 +
 .../Tests/EventListener/EsiListenerTest.php     |    66 +
 .../EventListener/ExceptionListenerTest.php     |   142 +
 .../EventListener/FragmentListenerTest.php      |    81 +
 .../Tests/EventListener/LocaleListenerTest.php  |   103 +
 .../EventListener/ProfilerListenerTest.php      |   105 +
 .../EventListener/ResponseListenerTest.php      |    94 +
 .../Tests/EventListener/RouterListenerTest.php  |   131 +
 .../EventListener/TestSessionListenerTest.php   |   132 +
 .../Tests/Fixtures/BaseBundle/Resources/foo.txt |     0
 .../Fixtures/BaseBundle/Resources/hide.txt      |     0
 .../Fixtures/Bundle1Bundle/Resources/foo.txt    |     0
 .../Tests/Fixtures/Bundle1Bundle/bar.txt        |     0
 .../Tests/Fixtures/Bundle1Bundle/foo.txt        |     0
 .../Tests/Fixtures/Bundle2Bundle/foo.txt        |     0
 .../Fixtures/ChildBundle/Resources/foo.txt      |     0
 .../Fixtures/ChildBundle/Resources/hide.txt     |     0
 .../ExtensionAbsentBundle.php                   |    18 +
 .../ExtensionLoadedExtension.php                |    22 +
 .../ExtensionLoadedBundle.php                   |    18 +
 .../Command/BarCommand.php                      |    18 +
 .../Command/FooCommand.php                      |    22 +
 .../ExtensionPresentExtension.php               |    22 +
 .../ExtensionPresentBundle.php                  |    18 +
 .../HttpKernel/Tests/Fixtures/FooBarBundle.php  |    19 +
 .../Tests/Fixtures/KernelForOverrideName.php    |    28 +
 .../HttpKernel/Tests/Fixtures/KernelForTest.php |    37 +
 .../Fixtures/Resources/BaseBundle/hide.txt      |     0
 .../Fixtures/Resources/Bundle1Bundle/foo.txt    |     0
 .../Fixtures/Resources/ChildBundle/foo.txt      |     0
 .../Tests/Fixtures/Resources/FooBundle/foo.txt  |     0
 .../HttpKernel/Tests/Fixtures/TestClient.php    |    31 +
 .../Tests/Fixtures/TestEventDispatcher.php      |    28 +
 .../Tests/Fragment/EsiFragmentRendererTest.php  |   103 +
 .../Tests/Fragment/FragmentHandlerTest.php      |    95 +
 .../Fragment/HIncludeFragmentRendererTest.php   |    88 +
 .../Fragment/InlineFragmentRendererTest.php     |   210 +
 .../Fragment/RoutableFragmentRendererTest.php   |    93 +
 .../HttpKernel/Tests/HttpCache/EsiTest.php      |   225 +
 .../Tests/HttpCache/HttpCacheTest.php           |  1225 +
 .../Tests/HttpCache/HttpCacheTestCase.php       |   176 +
 .../HttpKernel/Tests/HttpCache/StoreTest.php    |   259 +
 .../Tests/HttpCache/TestHttpKernel.php          |    91 +
 .../Tests/HttpCache/TestMultipleHttpKernel.php  |    80 +
 .../HttpKernel/Tests/HttpKernelTest.php         |   300 +
 .../Component/HttpKernel/Tests/KernelTest.php   |   839 +
 .../Component/HttpKernel/Tests/Logger.php       |   128 +
 .../Profiler/AbstractProfilerStorageTest.php    |   253 +
 .../Tests/Profiler/FileProfilerStorageTest.php  |   100 +
 .../Profiler/MemcacheProfilerStorageTest.php    |    49 +
 .../Profiler/MemcachedProfilerStorageTest.php   |    49 +
 .../Tests/Profiler/Mock/MemcacheMock.php        |   254 +
 .../Tests/Profiler/Mock/MemcachedMock.php       |   219 +
 .../Tests/Profiler/Mock/RedisMock.php           |   247 +
 .../Profiler/MongoDbProfilerStorageTest.php     |   165 +
 .../HttpKernel/Tests/Profiler/ProfilerTest.php  |    85 +
 .../Tests/Profiler/RedisProfilerStorageTest.php |    49 +
 .../Profiler/SqliteProfilerStorageTest.php      |    50 +
 .../HttpKernel/Tests/TestHttpKernel.php         |    41 +
 .../HttpKernel/Tests/UriSignerTest.php          |    39 +
 .../Symfony/Component/HttpKernel/UriSigner.php  |   109 +
 .../Symfony/Component/HttpKernel/composer.json  |    58 +
 .../Component/HttpKernel/phpunit.xml.dist       |    28 +
 .../Symfony/Component/Process/.gitignore        |     3 +
 .../Symfony/Component/Process/CHANGELOG.md      |    40 +
 .../Process/Exception/ExceptionInterface.php    |    21 +
 .../Exception/InvalidArgumentException.php      |    21 +
 .../Process/Exception/LogicException.php        |    21 +
 .../Exception/ProcessFailedException.php        |    53 +
 .../Exception/ProcessTimedOutException.php      |    69 +
 .../Process/Exception/RuntimeException.php      |    21 +
 .../Component/Process/ExecutableFinder.php      |    89 +
 .../process/Symfony/Component/Process/LICENSE   |    19 +
 .../Component/Process/PhpExecutableFinder.php   |    86 +
 .../Symfony/Component/Process/PhpProcess.php    |    73 +
 .../Symfony/Component/Process/Process.php       |  1519 +
 .../Component/Process/ProcessBuilder.php        |   287 +
 .../Symfony/Component/Process/ProcessPipes.php  |   382 +
 .../Symfony/Component/Process/ProcessUtils.php  |   108 +
 .../process/Symfony/Component/Process/README.md |    51 +
 .../Process/Tests/AbstractProcessTest.php       |  1165 +
 .../Process/Tests/ExecutableFinderTest.php      |   149 +
 .../Process/Tests/NonStopableProcess.php        |    36 +
 .../Process/Tests/PhpExecutableFinderTest.php   |    97 +
 .../Component/Process/Tests/PhpProcessTest.php  |    29 +
 .../PipeStdinInStdoutStdErrStreamSelect.php     |    63 +
 .../Process/Tests/ProcessBuilderTest.php        |   225 +
 .../Tests/ProcessFailedExceptionTest.php        |   136 +
 .../Tests/ProcessInSigchildEnvironment.php      |    22 +
 .../Process/Tests/ProcessUtilsTest.php          |    48 +
 .../Tests/SigchildDisabledProcessTest.php       |   263 +
 .../Tests/SigchildEnabledProcessTest.php        |   148 +
 .../Component/Process/Tests/SignalListener.php  |    16 +
 .../Process/Tests/SimpleProcessTest.php         |   222 +
 .../Symfony/Component/Process/composer.json     |    31 +
 .../Symfony/Component/Process/phpunit.xml.dist  |    27 +
 .../Symfony/Component/Routing/.gitignore        |     3 +
 .../Component/Routing/Annotation/Route.php      |   162 +
 .../Symfony/Component/Routing/CHANGELOG.md      |   177 +
 .../Symfony/Component/Routing/CompiledRoute.php |   166 +
 .../Routing/Exception/ExceptionInterface.php    |    23 +
 .../Exception/InvalidParameterException.php     |    23 +
 .../Exception/MethodNotAllowedException.php     |    46 +
 .../MissingMandatoryParametersException.php     |    24 +
 .../Exception/ResourceNotFoundException.php     |    25 +
 .../Exception/RouteNotFoundException.php        |    23 +
 .../ConfigurableRequirementsInterface.php       |    55 +
 .../Generator/Dumper/GeneratorDumper.php        |    45 +
 .../Dumper/GeneratorDumperInterface.php         |    41 +
 .../Generator/Dumper/PhpGeneratorDumper.php     |   124 +
 .../Routing/Generator/UrlGenerator.php          |   338 +
 .../Routing/Generator/UrlGeneratorInterface.php |    88 +
 .../routing/Symfony/Component/Routing/LICENSE   |    19 +
 .../Routing/Loader/AnnotationClassLoader.php    |   268 +
 .../Loader/AnnotationDirectoryLoader.php        |    77 +
 .../Routing/Loader/AnnotationFileLoader.php     |   121 +
 .../Component/Routing/Loader/ClosureLoader.php  |    52 +
 .../Component/Routing/Loader/PhpFileLoader.php  |    62 +
 .../Component/Routing/Loader/XmlFileLoader.php  |   256 +
 .../Component/Routing/Loader/YamlFileLoader.php |   217 +
 .../Loader/schema/routing/routing-1.0.xsd       |    65 +
 .../Routing/Matcher/ApacheUrlMatcher.php        |   122 +
 .../Matcher/Dumper/ApacheMatcherDumper.php      |   281 +
 .../Routing/Matcher/Dumper/DumperCollection.php |   159 +
 .../Matcher/Dumper/DumperPrefixCollection.php   |   105 +
 .../Routing/Matcher/Dumper/DumperRoute.php      |    64 +
 .../Routing/Matcher/Dumper/MatcherDumper.php    |    45 +
 .../Matcher/Dumper/MatcherDumperInterface.php   |    39 +
 .../Routing/Matcher/Dumper/PhpMatcherDumper.php |   401 +
 .../Routing/Matcher/RedirectableUrlMatcher.php  |    67 +
 .../Matcher/RedirectableUrlMatcherInterface.php |    35 +
 .../Routing/Matcher/RequestMatcherInterface.php |    39 +
 .../Routing/Matcher/TraceableUrlMatcher.php     |   131 +
 .../Component/Routing/Matcher/UrlMatcher.php    |   244 +
 .../Routing/Matcher/UrlMatcherInterface.php     |    43 +
 .../routing/Symfony/Component/Routing/README.md |    36 +
 .../Component/Routing/RequestContext.php        |   322 +
 .../Routing/RequestContextAwareInterface.php    |    36 +
 .../routing/Symfony/Component/Routing/Route.php |   655 +
 .../Component/Routing/RouteCollection.php       |   285 +
 .../Symfony/Component/Routing/RouteCompiler.php |   229 +
 .../Routing/RouteCompilerInterface.php          |    32 +
 .../Symfony/Component/Routing/Router.php        |   323 +
 .../Component/Routing/RouterInterface.php       |    32 +
 .../Routing/Tests/Annotation/RouteTest.php      |    57 +
 .../Routing/Tests/CompiledRouteTest.php         |    26 +
 .../Fixtures/AnnotatedClasses/AbstractClass.php |    16 +
 .../Fixtures/AnnotatedClasses/BarClass.php      |    19 +
 .../Fixtures/AnnotatedClasses/FooClass.php      |    16 +
 .../Tests/Fixtures/CustomXmlFileLoader.php      |    26 +
 .../Tests/Fixtures/RedirectableUrlMatcher.php   |    30 +
 .../Routing/Tests/Fixtures/annotated.php        |     0
 .../Tests/Fixtures/dumper/url_matcher1.apache   |   163 +
 .../Tests/Fixtures/dumper/url_matcher1.php      |   312 +
 .../Tests/Fixtures/dumper/url_matcher2.apache   |     7 +
 .../Tests/Fixtures/dumper/url_matcher2.php      |   344 +
 .../Tests/Fixtures/dumper/url_matcher3.php      |    50 +
 .../Component/Routing/Tests/Fixtures/empty.yml  |     0
 .../Component/Routing/Tests/Fixtures/foo.xml    |     0
 .../Component/Routing/Tests/Fixtures/foo1.xml   |     0
 .../Routing/Tests/Fixtures/incomplete.yml       |     2 +
 .../Routing/Tests/Fixtures/missing_id.xml       |     8 +
 .../Routing/Tests/Fixtures/missing_path.xml     |     8 +
 .../Routing/Tests/Fixtures/namespaceprefix.xml  |    13 +
 .../Fixtures/nonesense_resource_plus_path.yml   |     3 +
 .../nonesense_type_without_resource.yml         |     3 +
 .../Routing/Tests/Fixtures/nonvalid.xml         |    11 +
 .../Routing/Tests/Fixtures/nonvalid.yml         |     1 +
 .../Routing/Tests/Fixtures/nonvalid2.yml        |     1 +
 .../Routing/Tests/Fixtures/nonvalidkeys.yml     |     3 +
 .../Routing/Tests/Fixtures/nonvalidnode.xml     |     8 +
 .../Routing/Tests/Fixtures/nonvalidroute.xml    |    13 +
 .../Routing/Tests/Fixtures/null_values.xml      |    12 +
 .../Tests/Fixtures/special_route_name.yml       |     2 +
 .../Routing/Tests/Fixtures/validpattern.php     |    27 +
 .../Routing/Tests/Fixtures/validpattern.xml     |    25 +
 .../Routing/Tests/Fixtures/validpattern.yml     |    22 +
 .../Routing/Tests/Fixtures/validresource.xml    |    13 +
 .../Routing/Tests/Fixtures/validresource.yml    |     8 +
 .../Routing/Tests/Fixtures/withdoctype.xml      |     3 +
 .../Generator/Dumper/PhpGeneratorDumperTest.php |   150 +
 .../Tests/Generator/UrlGeneratorTest.php        |   671 +
 .../Loader/AbstractAnnotationLoaderTest.php     |    31 +
 .../Tests/Loader/AnnotationClassLoaderTest.php  |   158 +
 .../Loader/AnnotationDirectoryLoaderTest.php    |    53 +
 .../Tests/Loader/AnnotationFileLoaderTest.php   |    47 +
 .../Routing/Tests/Loader/ClosureLoaderTest.php  |    48 +
 .../Routing/Tests/Loader/PhpFileLoaderTest.php  |    48 +
 .../Routing/Tests/Loader/XmlFileLoaderTest.php  |   138 +
 .../Routing/Tests/Loader/YamlFileLoaderTest.php |   106 +
 .../Matcher/Dumper/DumperCollectionTest.php     |    33 +
 .../Dumper/DumperPrefixCollectionTest.php       |   123 +
 .../Dumper/LegacyApacheMatcherDumperTest.php    |   201 +
 .../Matcher/Dumper/PhpMatcherDumperTest.php     |   264 +
 .../Matcher/LegacyApacheUrlMatcherTest.php      |   153 +
 .../Matcher/RedirectableUrlMatcherTest.php      |    86 +
 .../Tests/Matcher/TraceableUrlMatcherTest.php   |   101 +
 .../Routing/Tests/Matcher/UrlMatcherTest.php    |   408 +
 .../Routing/Tests/RequestContextTest.php        |   143 +
 .../Routing/Tests/RouteCollectionTest.php       |   304 +
 .../Routing/Tests/RouteCompilerTest.php         |   253 +
 .../Component/Routing/Tests/RouteTest.php       |   277 +
 .../Component/Routing/Tests/RouterTest.php      |   161 +
 .../Symfony/Component/Routing/composer.json     |    46 +
 .../Symfony/Component/Routing/phpunit.xml.dist  |    28 +
 .../Symfony/Component/Security/Core/.gitignore  |     3 +
 .../AuthenticationManagerInterface.php          |    35 +
 .../AuthenticationProviderManager.php           |   112 +
 .../AuthenticationTrustResolver.php             |    73 +
 .../AuthenticationTrustResolverInterface.php    |    53 +
 .../AnonymousAuthenticationProvider.php         |    60 +
 .../AuthenticationProviderInterface.php         |    35 +
 .../Provider/DaoAuthenticationProvider.php      |    99 +
 .../PreAuthenticatedAuthenticationProvider.php  |    80 +
 .../RememberMeAuthenticationProvider.php        |    68 +
 .../Provider/SimpleAuthenticationProvider.php   |    50 +
 .../Provider/UserAuthenticationProvider.php     |   155 +
 .../RememberMe/InMemoryTokenProvider.php        |    71 +
 .../RememberMe/PersistentToken.php              |    99 +
 .../RememberMe/PersistentTokenInterface.php     |    56 +
 .../RememberMe/TokenProviderInterface.php       |    58 +
 .../SimpleAuthenticatorInterface.php            |    25 +
 .../SimpleFormAuthenticatorInterface.php        |    22 +
 .../SimplePreAuthenticatorInterface.php         |    22 +
 .../Core/Authentication/Token/AbstractToken.php |   288 +
 .../Authentication/Token/AnonymousToken.php     |    75 +
 .../Token/PreAuthenticatedToken.php             |    88 +
 .../Authentication/Token/RememberMeToken.php    |   114 +
 .../Authentication/Token/TokenInterface.php     |   131 +
 .../Token/UsernamePasswordToken.php             |   107 +
 .../Security/Core/AuthenticationEvents.php      |    38 +
 .../Authorization/AccessDecisionManager.php     |   219 +
 .../AccessDecisionManagerInterface.php          |    51 +
 .../Core/Authorization/ExpressionLanguage.php   |    57 +
 .../Authorization/Voter/AuthenticatedVoter.php  |    94 +
 .../Authorization/Voter/ExpressionVoter.php     |   112 +
 .../Authorization/Voter/RoleHierarchyVoter.php  |    41 +
 .../Core/Authorization/Voter/RoleVoter.php      |    79 +
 .../Core/Authorization/Voter/VoterInterface.php |    58 +
 .../Core/Encoder/BCryptPasswordEncoder.php      |    91 +
 .../Core/Encoder/BasePasswordEncoder.php        |   100 +
 .../Core/Encoder/EncoderAwareInterface.php      |    28 +
 .../Security/Core/Encoder/EncoderFactory.php    |    83 +
 .../Core/Encoder/EncoderFactoryInterface.php    |    33 +
 .../Encoder/MessageDigestPasswordEncoder.php    |    72 +
 .../Core/Encoder/PasswordEncoderInterface.php   |    41 +
 .../Core/Encoder/Pbkdf2PasswordEncoder.php      |   103 +
 .../Core/Encoder/PlaintextPasswordEncoder.php   |    64 +
 .../Security/Core/Event/AuthenticationEvent.php |    35 +
 .../Core/Event/AuthenticationFailureEvent.php   |    37 +
 .../Core/Exception/AccessDeniedException.php    |    25 +
 .../Core/Exception/AccountExpiredException.php  |    29 +
 .../Core/Exception/AccountStatusException.php   |    67 +
 ...thenticationCredentialsNotFoundException.php |    30 +
 .../Core/Exception/AuthenticationException.php  |    87 +
 .../AuthenticationServiceException.php          |    29 +
 .../Core/Exception/BadCredentialsException.php  |    29 +
 .../Core/Exception/CookieTheftException.php     |    30 +
 .../Exception/CredentialsExpiredException.php   |    29 +
 .../Core/Exception/DisabledException.php        |    29 +
 .../Core/Exception/ExceptionInterface.php       |    21 +
 .../InsufficientAuthenticationException.php     |    31 +
 .../Core/Exception/InvalidArgumentException.php |    21 +
 .../Exception/InvalidCsrfTokenException.php     |    29 +
 .../Security/Core/Exception/LockedException.php |    29 +
 .../Security/Core/Exception/LogoutException.php |    25 +
 .../Core/Exception/NonceExpiredException.php    |    30 +
 .../Exception/ProviderNotFoundException.php     |    30 +
 .../Core/Exception/RuntimeException.php         |    21 +
 .../Exception/SessionUnavailableException.php   |    35 +
 .../Core/Exception/TokenNotFoundException.php   |    29 +
 .../Core/Exception/UnsupportedUserException.php |    22 +
 .../Exception/UsernameNotFoundException.php     |    72 +
 .../Symfony/Component/Security/Core/LICENSE     |    19 +
 .../Symfony/Component/Security/Core/README.md   |    23 +
 .../Core/Resources/translations/security.ar.xlf |    71 +
 .../Core/Resources/translations/security.az.xlf |    71 +
 .../Core/Resources/translations/security.ca.xlf |    71 +
 .../Core/Resources/translations/security.cs.xlf |    71 +
 .../Core/Resources/translations/security.da.xlf |    71 +
 .../Core/Resources/translations/security.de.xlf |    71 +
 .../Core/Resources/translations/security.el.xlf |    71 +
 .../Core/Resources/translations/security.en.xlf |    71 +
 .../Core/Resources/translations/security.es.xlf |    71 +
 .../Core/Resources/translations/security.fa.xlf |    71 +
 .../Core/Resources/translations/security.fr.xlf |    71 +
 .../Core/Resources/translations/security.gl.xlf |    71 +
 .../Core/Resources/translations/security.he.xlf |    71 +
 .../Core/Resources/translations/security.hu.xlf |    71 +
 .../Core/Resources/translations/security.it.xlf |    71 +
 .../Core/Resources/translations/security.lb.xlf |    71 +
 .../Core/Resources/translations/security.nl.xlf |    71 +
 .../Core/Resources/translations/security.no.xlf |    71 +
 .../Core/Resources/translations/security.pl.xlf |    71 +
 .../Resources/translations/security.pt_BR.xlf   |    71 +
 .../Resources/translations/security.pt_PT.xlf   |    71 +
 .../Core/Resources/translations/security.ro.xlf |    71 +
 .../Core/Resources/translations/security.ru.xlf |    71 +
 .../Core/Resources/translations/security.sk.xlf |    71 +
 .../Core/Resources/translations/security.sl.xlf |    71 +
 .../Resources/translations/security.sr_Cyrl.xlf |    71 +
 .../Resources/translations/security.sr_Latn.xlf |    71 +
 .../Core/Resources/translations/security.sv.xlf |    71 +
 .../Core/Resources/translations/security.tr.xlf |    71 +
 .../Core/Resources/translations/security.ua.xlf |    71 +
 .../Component/Security/Core/Role/Role.php       |    41 +
 .../Security/Core/Role/RoleHierarchy.php        |    73 +
 .../Core/Role/RoleHierarchyInterface.php        |    32 +
 .../Security/Core/Role/RoleInterface.php        |    35 +
 .../Security/Core/Role/SwitchUserRole.php       |    48 +
 .../Component/Security/Core/SecurityContext.php |    85 +
 .../Security/Core/SecurityContextInterface.php  |    50 +
 .../AuthenticationProviderManagerTest.php       |   138 +
 .../AuthenticationTrustResolverTest.php         |    70 +
 .../AnonymousAuthenticationProviderTest.php     |    66 +
 .../Provider/DaoAuthenticationProviderTest.php  |   300 +
 ...eAuthenticatedAuthenticationProviderTest.php |   134 +
 .../RememberMeAuthenticationProviderTest.php    |   107 +
 .../Provider/UserAuthenticationProviderTest.php |   250 +
 .../RememberMe/InMemoryTokenProviderTest.php    |    63 +
 .../RememberMe/PersistentTokenTest.php          |    29 +
 .../Authentication/Token/AbstractTokenTest.php  |   287 +
 .../Authentication/Token/AnonymousTokenTest.php |    45 +
 .../Token/PreAuthenticatedTokenTest.php         |    48 +
 .../Token/RememberMeTokenTest.php               |    83 +
 .../Token/UsernamePasswordTokenTest.php         |    58 +
 .../Authorization/AccessDecisionManagerTest.php |   198 +
 .../Authorization/ExpressionLanguageTest.php    |    79 +
 .../Voter/AuthenticatedVoterTest.php            |    78 +
 .../Authorization/Voter/ExpressionVoterTest.php |    97 +
 .../Voter/RoleHierarchyVoterTest.php            |    36 +
 .../Tests/Authorization/Voter/RoleVoterTest.php |    61 +
 .../Tests/Encoder/BCryptPasswordEncoderTest.php |    90 +
 .../Tests/Encoder/BasePasswordEncoderTest.php   |   101 +
 .../Core/Tests/Encoder/EncoderFactoryTest.php   |   168 +
 .../MessageDigestPasswordEncoderTest.php        |    62 +
 .../Tests/Encoder/Pbkdf2PasswordEncoderTest.php |    62 +
 .../Encoder/PlaintextPasswordEncoderTest.php    |    56 +
 .../Core/Tests/Role/RoleHierarchyTest.php       |    32 +
 .../Security/Core/Tests/Role/RoleTest.php       |    24 +
 .../Core/Tests/Role/SwitchUserRoleTest.php      |    31 +
 .../Security/Core/Tests/SecurityContextTest.php |    92 +
 .../Core/Tests/User/ChainUserProviderTest.php   |   183 +
 .../Tests/User/InMemoryUserProviderTest.php     |    62 +
 .../Core/Tests/User/UserCheckerTest.php         |   108 +
 .../Security/Core/Tests/User/UserTest.php       |   126 +
 .../Security/Core/Tests/Util/ClassUtilsTest.php |    50 +
 .../Core/Tests/Util/SecureRandomTest.php        |   201 +
 .../Core/Tests/Util/StringUtilsTest.php         |    61 +
 .../LegacyUserPasswordValidator2Dot4ApiTest.php |    26 +
 .../LegacyUserPasswordValidatorTest.php         |    26 +
 .../Constraints/UserPasswordValidatorTest.php   |   169 +
 .../Core/User/AdvancedUserInterface.php         |    87 +
 .../Security/Core/User/ChainUserProvider.php    |   100 +
 .../Security/Core/User/EquatableInterface.php   |    37 +
 .../Security/Core/User/InMemoryUserProvider.php |   102 +
 .../Component/Security/Core/User/User.php       |   115 +
 .../Security/Core/User/UserChecker.php          |    69 +
 .../Security/Core/User/UserCheckerInterface.php |    36 +
 .../Security/Core/User/UserInterface.php        |    87 +
 .../Core/User/UserProviderInterface.php         |    76 +
 .../Component/Security/Core/Util/ClassUtils.php |    65 +
 .../Security/Core/Util/SecureRandom.php         |   114 +
 .../Core/Util/SecureRandomInterface.php         |    29 +
 .../Security/Core/Util/StringUtils.php          |    66 +
 .../Core/Validator/Constraints/UserPassword.php |    32 +
 .../Constraints/UserPasswordValidator.php       |    54 +
 .../Component/Security/Core/composer.json       |    47 +
 .../Component/Security/Core/phpunit.xml.dist    |    33 +
 .../Symfony/Component/Translation/.gitignore    |     3 +
 .../Symfony/Component/Translation/CHANGELOG.md  |    34 +
 .../Translation/Catalogue/AbstractOperation.php |   146 +
 .../Translation/Catalogue/DiffOperation.php     |    49 +
 .../Translation/Catalogue/MergeOperation.php    |    45 +
 .../Catalogue/OperationInterface.php            |    63 +
 .../Translation/Dumper/CsvFileDumper.php        |    63 +
 .../Translation/Dumper/DumperInterface.php      |    31 +
 .../Component/Translation/Dumper/FileDumper.php |   122 +
 .../Translation/Dumper/IcuResFileDumper.php     |   112 +
 .../Translation/Dumper/IniFileDumper.php        |    45 +
 .../Translation/Dumper/JsonFileDumper.php       |    42 +
 .../Translation/Dumper/MoFileDumper.php         |    82 +
 .../Translation/Dumper/PhpFileDumper.php        |    40 +
 .../Translation/Dumper/PoFileDumper.php         |    61 +
 .../Translation/Dumper/QtFileDumper.php         |    50 +
 .../Translation/Dumper/XliffFileDumper.php      |    69 +
 .../Translation/Dumper/YamlFileDumper.php       |    39 +
 .../Exception/ExceptionInterface.php            |    23 +
 .../Exception/InvalidResourceException.php      |    23 +
 .../Exception/NotFoundResourceException.php     |    23 +
 .../Translation/Extractor/ChainExtractor.php    |    60 +
 .../Extractor/ExtractorInterface.php            |    38 +
 .../Translation/IdentityTranslator.php          |    77 +
 .../Symfony/Component/Translation/Interval.php  |   107 +
 .../Symfony/Component/Translation/LICENSE       |    19 +
 .../Translation/Loader/ArrayLoader.php          |    70 +
 .../Translation/Loader/CsvFileLoader.php        |    92 +
 .../Translation/Loader/IcuDatFileLoader.php     |    59 +
 .../Translation/Loader/IcuResFileLoader.php     |    89 +
 .../Translation/Loader/IniFileLoader.php        |    45 +
 .../Translation/Loader/JsonFileLoader.php       |    78 +
 .../Translation/Loader/LoaderInterface.php      |    42 +
 .../Translation/Loader/MoFileLoader.php         |   184 +
 .../Translation/Loader/PhpFileLoader.php        |    49 +
 .../Translation/Loader/PoFileLoader.php         |   177 +
 .../Translation/Loader/QtFileLoader.php         |    78 +
 .../Translation/Loader/XliffFileLoader.php      |   151 +
 .../Translation/Loader/YamlFileLoader.php       |    71 +
 .../dic/xliff-core/xliff-core-1.2-strict.xsd    |  2223 ++
 .../Loader/schema/dic/xliff-core/xml.xsd        |   309 +
 .../Component/Translation/MessageCatalogue.php  |   293 +
 .../Translation/MessageCatalogueInterface.php   |   172 +
 .../Component/Translation/MessageSelector.php   |    90 +
 .../Translation/MetadataAwareInterface.php      |    54 +
 .../Translation/PluralizationRules.php          |   214 +
 .../Symfony/Component/Translation/README.md     |    37 +
 .../Tests/Catalogue/AbstractOperationTest.php   |    73 +
 .../Tests/Catalogue/DiffOperationTest.php       |    60 +
 .../Tests/Catalogue/MergeOperationTest.php      |    60 +
 .../Tests/Dumper/CsvFileDumperTest.php          |    33 +
 .../Translation/Tests/Dumper/FileDumperTest.php |    70 +
 .../Tests/Dumper/IcuResFileDumperTest.php       |    38 +
 .../Tests/Dumper/IniFileDumperTest.php          |    32 +
 .../Tests/Dumper/JsonFileDumperTest.php         |    36 +
 .../Tests/Dumper/MoFileDumperTest.php           |    31 +
 .../Tests/Dumper/PhpFileDumperTest.php          |    32 +
 .../Tests/Dumper/PoFileDumperTest.php           |    31 +
 .../Tests/Dumper/QtFileDumperTest.php           |    32 +
 .../Tests/Dumper/XliffFileDumperTest.php        |    39 +
 .../Tests/Dumper/YamlFileDumperTest.php         |    32 +
 .../Tests/IdentityTranslatorTest.php            |    95 +
 .../Translation/Tests/IntervalTest.php          |    48 +
 .../Tests/Loader/CsvFileLoaderTest.php          |    60 +
 .../Tests/Loader/IcuDatFileLoaderTest.php       |    68 +
 .../Tests/Loader/IcuResFileLoaderTest.php       |    55 +
 .../Tests/Loader/IniFileLoaderTest.php          |    50 +
 .../Tests/Loader/JsonFileLoaderTest.php         |    68 +
 .../Tests/Loader/LocalizedTestCase.php          |    22 +
 .../Tests/Loader/MoFileLoaderTest.php           |    60 +
 .../Tests/Loader/PhpFileLoaderTest.php          |    49 +
 .../Tests/Loader/PoFileLoaderTest.php           |    96 +
 .../Tests/Loader/QtFileLoaderTest.php           |    67 +
 .../Tests/Loader/XliffFileLoaderTest.php        |   130 +
 .../Tests/Loader/YamlFileLoaderTest.php         |    70 +
 .../Translation/Tests/MessageCatalogueTest.php  |   200 +
 .../Translation/Tests/MessageSelectorTest.php   |    98 +
 .../Tests/PluralizationRulesTest.php            |   123 +
 .../Translation/Tests/TranslatorTest.php        |   479 +
 .../Tests/fixtures/empty-translation.po         |     3 +
 .../Translation/Tests/fixtures/empty.csv        |     0
 .../Translation/Tests/fixtures/empty.ini        |     0
 .../Translation/Tests/fixtures/empty.json       |     0
 .../Translation/Tests/fixtures/empty.mo         |     0
 .../Translation/Tests/fixtures/empty.po         |     0
 .../Translation/Tests/fixtures/empty.xlf        |     0
 .../Translation/Tests/fixtures/empty.yml        |     0
 .../Translation/Tests/fixtures/encoding.xlf     |    15 +
 .../Tests/fixtures/escaped-id-plurals.po        |    10 +
 .../Translation/Tests/fixtures/escaped-id.po    |     8 +
 .../Tests/fixtures/invalid-xml-resources.xlf    |    23 +
 .../Translation/Tests/fixtures/malformed.json   |     3 +
 .../Translation/Tests/fixtures/non-valid.xlf    |    11 +
 .../Translation/Tests/fixtures/non-valid.yml    |     1 +
 .../Translation/Tests/fixtures/plurals.mo       |   Bin 0 -> 74 bytes
 .../Translation/Tests/fixtures/plurals.po       |     5 +
 .../Translation/Tests/fixtures/resname.xlf      |    19 +
 .../resourcebundle/corrupted/resources.dat      |     1 +
 .../Tests/fixtures/resourcebundle/dat/en.res    |   Bin 0 -> 120 bytes
 .../Tests/fixtures/resourcebundle/dat/en.txt    |     3 +
 .../Tests/fixtures/resourcebundle/dat/fr.res    |   Bin 0 -> 124 bytes
 .../Tests/fixtures/resourcebundle/dat/fr.txt    |     3 +
 .../fixtures/resourcebundle/dat/packagelist.txt |     2 +
 .../fixtures/resourcebundle/dat/resources.dat   |   Bin 0 -> 352 bytes
 .../Tests/fixtures/resourcebundle/res/en.res    |   Bin 0 -> 84 bytes
 .../Tests/fixtures/resources-clean.xlf          |    19 +
 .../Translation/Tests/fixtures/resources.csv    |     4 +
 .../Translation/Tests/fixtures/resources.ini    |     1 +
 .../Translation/Tests/fixtures/resources.json   |     3 +
 .../Translation/Tests/fixtures/resources.mo     |   Bin 0 -> 52 bytes
 .../Translation/Tests/fixtures/resources.php    |     5 +
 .../Translation/Tests/fixtures/resources.po     |     8 +
 .../Translation/Tests/fixtures/resources.ts     |    10 +
 .../Translation/Tests/fixtures/resources.xlf    |    23 +
 .../Translation/Tests/fixtures/resources.yml    |     1 +
 .../Translation/Tests/fixtures/valid.csv        |     4 +
 .../Translation/Tests/fixtures/withdoctype.xlf  |    12 +
 .../Component/Translation/Translator.php        |   325 +
 .../Translation/TranslatorInterface.php         |    75 +
 .../Translation/Writer/TranslationWriter.php    |    87 +
 .../Symfony/Component/Translation/composer.json |    40 +
 .../Component/Translation/phpunit.xml.dist      |    28 +
 3518 files changed, 476051 insertions(+)
----------------------------------------------------------------------



[53/57] airavata-php-gateway git commit: AIRAVATA-1695 Queues are now selected dynamically

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a88b5d69/app/libraries/Utilities.php
----------------------------------------------------------------------
diff --git a/app/libraries/Utilities.php b/app/libraries/Utilities.php
new file mode 100644
index 0000000..d9ac4a3
--- /dev/null
+++ b/app/libraries/Utilities.php
@@ -0,0 +1,2098 @@
+<?php
+
+//Thrift classes - loaded from Vendor/Thrift
+use Thrift\Transport\TTransport;
+use Thrift\Exception\TException;
+use Thrift\Exception\TTransportException;
+use Thrift\Factory\TStringFuncFactory;
+use Thrift\Protocol\TBinaryProtocol;
+use Thrift\Transport\TSocket;
+
+//Airavata classes - loaded from app/libraries/Airavata
+use Airavata\API\AiravataClient;
+use Airavata\API\Error\InvalidRequestException;
+use Airavata\API\Error\AiravataClientException;
+use Airavata\API\Error\AiravataSystemException;
+use Airavata\API\Error\ExperimentNotFoundException;
+use Airavata\Model\Workspace\Experiment\ComputationalResourceScheduling;
+use Airavata\Model\AppCatalog\AppInterface\InputDataObjectType;
+use Airavata\Model\Workspace\Experiment\UserConfigurationData;
+use Airavata\Model\Workspace\Experiment\AdvancedOutputDataHandling;
+use Airavata\Model\Workspace\Experiment\Experiment;
+use Airavata\Model\Workspace\Experiment\ExperimentState;
+use Airavata\Model\AppCatalog\AppInterface\DataType;
+use Airavata\Model\Workspace\Project;
+use Airavata\Model\Workspace\Experiment\JobState;
+use Airavata\Model\AppCatalog\ComputeResource\JobSubmissionInterface;
+use Airavata\Model\AppCatalog\ComputeResource\JobSubmissionProtocol;
+
+
+
+class Utilities{
+/**
+ * Basic utility functions
+ */
+
+/*
+
+************* IMPORTANT ************
+
+READ :: ALL CONSTANTS ARE NOW BEING CALLED FROM app/models/Constant.php. 
+
+************* IMPORTANT ************
+*/
+private $tokenFilePath = 'tokens.xml';
+private $tokenFile = null;
+
+private $sshUser;
+private $hostName;
+private static $pathConstant;
+private static $experimentPath;
+private static $experimentDataPathAbsolute;
+
+function __construct(){
+	$this->sshUser = "root";
+	$this->hostName = $_SERVER['SERVER_NAME'];
+
+    self::$experimentDataPathAbsolute = base_path() . Constant::EXPERIMENT_DATA_ROOT;
+	self::$pathConstant = 'file://'.$this->sshUser.'@'.$this->hostName.':' . self::$experimentDataPathAbsolute;
+	self::$experimentPath = null;
+}
+
+/**
+ * Print success message
+ * @param $message
+ */
+public static function print_success_message($message)
+{
+    echo '<div class="alert alert-success">' . $message . '</div>';
+}
+
+/**
+ * Print warning message
+ * @param $message
+ */
+public static function print_warning_message($message)
+{
+    echo '<div class="alert alert-warning">' . $message . '</div>';
+}
+
+/**
+ * Print error message
+ * @param $message
+ */
+public static function print_error_message($message)
+{
+    echo '<div class="alert alert-danger">' . $message . '</div>';
+}
+
+/**
+ * Print info message
+ * @param $message
+ */
+public static function print_info_message($message)
+{
+    echo '<div class="alert alert-info">' . $message . '</div>';
+}
+
+/**
+ * Redirect to the given url
+ * @param $url
+ */
+public static function redirect($url)
+{
+    echo '<meta http-equiv="Refresh" content="0; URL=' . $url . '">';
+}
+
+/**
+ * Return true if the form has been submitted
+ * @return bool
+ */
+public static function form_submitted()
+{
+    return isset($_POST['Submit']);
+}
+
+/**
+ * Compare the submitted credentials with those stored in the database
+ * @param $username
+ * @param $password
+ * @return bool
+ */
+public static function id_matches_db($username, $password)
+{
+    $idStore = new WSISUtilities();
+
+    try
+    {
+        $idStore->connect();
+    }
+    catch (Exception $e)
+    {
+        Utilities::print_error_message('<p>Error connecting to ID store.
+            Please try again later or report a bug using the link in the Help menu</p>' .
+            '<p>' . $e->getMessage() . '</p>');
+    }
+    //checking user roles.
+    //var_dump( $idStore->updateRoleListOfUser( $username, array( "new"=>array("admin"), "deleted"=>array() ) ) );
+    //var_dump($idStore->getRoleListOfUser( $username) ); exit;
+    //var_dump( $idStore->authenticate($username, $password)); exit;
+    if($idStore->authenticate($username, $password))
+    {
+        //checking if user is an Admin and saving in Session.
+       $app_config = Utilities::read_config();
+
+        if( in_array( $app_config["admin-role"], (array)$idStore->getRoleListOfUser( $username)))
+        {
+            Session::put("admin", true);
+        }
+        return true;
+    }else{
+        return false;
+    }
+}
+
+
+/**
+ * Store username in session variables
+ * @param $username
+ */
+public static function store_id_in_session($username)
+{
+    Session::put('username', $username );
+    Session::put('loggedin', true);
+}
+
+/**
+ * Return true if the username stored in the session
+ * @return bool
+ */
+public static function id_in_session()
+{
+    if( Session::has("username") && Session::has('loggedin') )
+        return true;
+    else
+        return false;
+}
+
+/**
+ * Verify if the user is already logged in. If not, redirect to the home page.
+ */
+public static function verify_login()
+{
+    if (Utilities::id_in_session())
+    {
+        return true;
+    }
+    else
+    {
+        Utilities::print_error_message('User is not logged in!');
+        return false;
+    }
+}
+
+/**
+ * Connect to the ID store
+ */
+public static function connect_to_id_store()
+{
+    global $idStore;
+    $app_config = Utilities::read_config();
+
+    switch ($app_config["user-store"])
+    {
+        case 'WSO2':
+            $idStore = new WSISUtilities(); // WS02 Identity Server
+            break;
+        case 'XML':
+            $idStore = new XmlIdUtilities(); // XML user database
+            break;
+        case 'USER_API':
+            $idStore = new UserAPIUtilities(); // Airavata UserAPI
+            break;
+    }
+
+    try
+    {
+        $idStore->connect();
+    }
+    catch (Exception $e)
+    {
+        Utilities::print_error_message('<p>Error connecting to ID store.
+            Please try again later or report a bug using the link in the Help menu</p>' .
+            '<p>' . $e->getMessage() . '</p>');
+    }
+}
+
+/**
+ * Return an Airavata client
+ * @return AiravataClient
+ */
+public static function get_airavata_client()
+{
+    try
+    {
+        $app_config = Utilities::read_config();
+        $transport = new TSocket( $app_config["airavata-server"], $app_config["airavata-port"]);
+        $transport->setRecvTimeout( $app_config["airavata-timeout"]);
+        $transport->setSendTimeout( $app_config["airavata-timeout"]);
+
+        $protocol = new TBinaryProtocol($transport);
+        $transport->open();
+
+        $client = new AiravataClient($protocol);
+
+        if( is_object( $client))
+            return $client;
+        else
+            return Redirect::to("airavata/down");
+    }
+    catch (Exception $e)
+    {
+        /*Utilities::print_error_message('<p>There was a problem connecting to Airavata.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>' . $e->getMessage() . '</p>');
+        */
+        
+    }
+}
+
+
+
+/**
+ * Launch the experiment with the given ID
+ * @param $expId
+ */
+public static function launch_experiment($expId)
+{
+    $airavataclient = Session::get("airavataClient");
+    //global $tokenFilePath;
+    try
+    {
+        /* temporarily using hard-coded token
+        open_tokens_file($tokenFilePath);
+
+        $communityToken = $tokenFile->tokenId;
+
+
+        $token = isset($_SESSION['tokenId'])? $_SESSION['tokenId'] : $communityToken;
+
+        $airavataclient->launchExperiment($expId, $token);
+
+        $tokenString = isset($_SESSION['tokenId'])? 'personal' : 'community';
+
+        Utilities::print_success_message('Experiment launched using ' . $tokenString . ' allocation!');
+        */
+
+        $app_config = Utilities::read_config();
+        $hardCodedToken = $app_config['credential-store-token'];
+        $airavataclient->launchExperiment($expId, $hardCodedToken);
+
+        /*
+        Utilities::print_success_message('Experiment launched!');
+        Utilities::print_success_message("<p>Experiment launched!</p>" .
+            '<p>You will be redirected to the summary page shortly, or you can
+            <a href="experiment_summary.php?expId=' . $expId . '">go directly</a> to the experiment summary page.</p>');
+        redirect('experiment_summary.php?expId=' . $expId);
+        */
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem launching the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (ExperimentNotFoundException $enf)
+    {
+        Utilities::print_error_message('<p>There was a problem launching the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem launching the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem launching the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
+    }
+    catch (Exception $e)
+    {
+        Utilities::print_error_message('<p>There was a problem launching the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Exception: ' . $e->getMessage() . '</p>');
+    }
+}
+
+/**
+ * Get all projects owned by the given user
+ * @param $username
+ * @return null
+ */
+public static function get_all_user_projects($gatewayId, $username)
+{
+    $airavataclient = Session::get("airavataClient");
+    $userProjects = null;
+
+    try
+    {
+        $userProjects = $airavataclient->getAllUserProjects($gatewayId, $username);
+        //var_dump( $userProjects); exit;
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the user\'s projects.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage(). '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the user\'s projects.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata Client Exception: ' . $ace->getMessage(). '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        if ($ase->airavataErrorType == 2) // 2 = INTERNAL_ERROR
+        {
+            Utilities::print_warning_message('<p>You must create a project before you can create an experiment.
+                Click <a href="' . URL::to('/') . '/project/create">here</a> to create a project.</p>');
+        }
+        else
+        {
+            Utilities::print_error_message('<p>There was a problem getting the user\'s projects.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
+        }
+    }
+
+    return $userProjects;
+}
+
+
+/**
+ * Get all available applications
+ * @return null
+ */
+public static function get_all_applications()
+{
+    $airavataclient = Session::get("airavataClient");
+    $applications = null;
+
+    try
+    {
+        $applications = $airavataclient->getAllApplicationInterfaceNames( Session::get("gateway_id"));
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting all applications.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting all applications.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_warning_message('<p>You must create an application module, interface and deployment space before you can create an experiment.
+                Click <a href="' . URL::to('/') . '/app/module">here</a> to create an application.</p>');
+        /*
+        Utilities::print_error_message('<p>There was a problem getting all applications.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
+            */
+    }
+
+    if( count( $applications) == 0)
+        Utilities::print_warning_message('<p>You must create an application module, interface and deployment space before you can create an experiment.
+                Click <a href="' . URL::to('/') . '/app/module">here</a> to create an application.</p>');
+        
+
+    return $applications;
+}
+
+
+/**
+ * Get the interface for the application with the given ID
+ * @param $id
+ * @return null
+ */
+public static function get_application_interface($id)
+{
+    $airavataclient = Session::get("airavataClient");
+    $applicationInterface = null;
+
+    try
+    {
+        $applicationInterface = $airavataclient->getApplicationInterface($id);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the application interface.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage(). '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the application interface.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the application interface.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
+    }
+
+    return $applicationInterface;
+}
+
+
+/**
+ * Get a list of compute resources available for the given application ID
+ * @param $id
+ * @return null
+ */
+public static function get_available_app_interface_compute_resources($id)
+{
+    $airavataclient = Session::get("airavataClient");
+    $computeResources = null;
+
+    try
+    {
+        $computeResources = $airavataclient->getAvailableAppInterfaceComputeResources($id);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting compute resources.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting compute resources.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem getting compute resources.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
+    }
+
+    return $computeResources;
+}
+
+
+/**
+ * Get the ComputeResourceDescription with the given ID
+ * @param $id
+ * @return null
+ */
+public static function get_compute_resource($id)
+{
+    $airavataclient = Session::get("airavataClient");
+    $computeResource = null;
+
+    try
+    {
+        $computeResource = $airavataclient->getComputeResource($id);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the compute resource.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the compute resource.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the compute resource.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
+    }
+
+    return $computeResource;
+}
+
+
+/**
+ * List the experiment's input files
+ * @param $experiment
+ */
+public static function list_input_files($experiment)
+{
+    $applicationInputs = Utilities::get_application_inputs($experiment->applicationId);
+
+    $experimentInputs = $experiment->experimentInputs;
+
+
+    //showing experiment inputs in the order defined by the admins.
+    $order = array();
+    foreach ($experimentInputs as $index => $input)
+    {
+        $order[$index] = $input->inputOrder;
+    }
+    array_multisort($order, SORT_ASC, $experimentInputs);
+    
+    foreach ($experimentInputs as $input)
+    {
+        $matchingAppInput = null;
+
+        foreach($applicationInputs as $applicationInput)
+        {
+            if ($input->name == $applicationInput->name)
+            {
+                $matchingAppInput = $applicationInput;
+            }
+        }
+        //var_dump($matchingAppInput);
+
+        if ($matchingAppInput->type == DataType::URI)
+        {
+            $explode = explode('/', $input->value);
+            echo '<p><a target="_blank"
+                        href="' . URL::to("/") . "/../../" . Constant::EXPERIMENT_DATA_ROOT . $explode[sizeof($explode)-2] . '/' . $explode[sizeof($explode)-1] . '">' .
+                $explode[sizeof($explode)-1] . '
+                <span class="glyphicon glyphicon-new-window"></span></a></p>';
+        }
+        elseif ($matchingAppInput->type == DataType::STRING)
+        {
+            echo '<p>' . $input->name . ': ' . $input->value . '</p>';
+        }
+    }
+}
+
+
+/**
+ * Get a list of the inputs for the application with the given ID
+ * @param $id
+ * @return null
+ */
+public static function get_application_inputs($id)
+{
+    $airavataclient = Session::get("airavataClient");
+    $inputs = null;
+
+    try
+    {
+        $inputs = $airavataclient->getApplicationInputs($id);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting application inputs.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting application inputs.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem getting application inputs.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
+    }
+
+    return $inputs;
+}
+
+
+/**
+ * Get a list of the outputs for the application with the given ID
+ * @param $id
+ * @return null
+ */
+public static function get_application_outputs($id)
+{
+    $airavataclient = Session::get("airavataClient");
+    $outputs = null;
+
+    try
+    {
+        $outputs = $airavataclient->getApplicationOutputs($id);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting application outputs.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting application outputs.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem getting application outputs.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
+    }
+
+    return $outputs;
+}
+
+
+/**
+ * Get the experiment with the given ID
+ * @param $expId
+ * @return null
+ */
+public static function get_experiment($expId)
+{
+    $airavataclient = Session::get("airavataClient");
+
+    try
+    {
+        return $airavataclient->getExperiment($expId);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (ExperimentNotFoundException $enf)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
+    }
+    catch (TTransportException $tte)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>TTransportException: ' . $tte->getMessage() . '</p>');
+    }
+    catch (Exception $e)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Exception: ' . $e->getMessage() . '</p>');
+    }
+
+}
+
+/**
+ * Get the project with the given ID
+ * @param $projectId
+ * @return null
+ */
+public static function get_project($projectId)
+{
+    $airavataclient = Session::get("airavataClient");
+
+    try
+    {
+        return $airavataclient->getProject($projectId);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the project.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the project.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the project.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException!<br><br>' . $ase->getMessage() . '</p>');
+    }
+
+}
+
+
+/**
+ * Create and configure a new Experiment
+ * @return Experiment
+ */
+public static function assemble_experiment()
+{
+    $utility = new Utilities();
+    $experimentInputs = array();
+    $app_config = Utilities::read_config();
+
+    $scheduling = new ComputationalResourceScheduling();
+    $scheduling->totalCPUCount = $_POST['cpu-count'];
+    $scheduling->nodeCount = $_POST['node-count'];
+    $scheduling->queueName = $_POST['queue-name'];
+    $scheduling->wallTimeLimit = $_POST['wall-time'];    
+    $scheduling->totalPhysicalMemory = $_POST['total-physical-memory'];
+    $scheduling->resourceHostId = $_POST['compute-resource'];
+
+    $userConfigData = new UserConfigurationData();
+    $userConfigData->computationalResourceScheduling = $scheduling;
+    if( isset( $_POST["userDN"]) )
+        $userConfigData->userDN = $_POST["userDN"];
+
+    $applicationInputs = Utilities::get_application_inputs($_POST['application']);
+    $experimentInputs = Utilities::process_inputs($applicationInputs, $experimentInputs);
+
+    if( Utilities::$experimentPath == null){
+        Utilities::create_experiment_folder_path();
+    }
+
+    $advHandling = new AdvancedOutputDataHandling();
+
+    $advHandling->outputDataDir = str_replace( base_path() . Constant::EXPERIMENT_DATA_ROOT, Utilities::$pathConstant , Utilities::$experimentPath);
+    $userConfigData->advanceOutputDataHandling = $advHandling;
+
+    //TODO: replace constructor with a call to airvata to get a prepopulated experiment template
+    $experiment = new Experiment();
+
+    // required
+    $experiment->projectID = $_POST['project'];
+    $experiment->userName = Session::get( 'username');
+    $experiment->name = $_POST['experiment-name'];
+
+    // optional
+    $experiment->description = $_POST['experiment-description'];
+    $experiment->applicationId = $_POST['application'];
+    $experiment->userConfigurationData = $userConfigData;
+    $experiment->experimentInputs = $experimentInputs;
+    if( isset( $_POST["enableEmailNotification"]))
+    {
+        $experiment->enableEmailNotification = intval( $_POST["enableEmailNotification"] );
+        $experiment->emailAddresses = array_unique( array_filter( $_POST["emailAddresses"], "trim") );
+    }
+
+    // adding default experiment outputs for now till prepoulated experiment template is not implemented.
+    $experiment->experimentOutputs = Utilities::get_application_outputs( $_POST["application"]);
+
+    if ($experimentInputs)
+    {
+        return $experiment;
+    }
+}
+
+/**
+ * @param $applicationInputs
+ * @param $experimentInputs
+ * @internal param $environmentPath
+ * @return array
+ */
+public static function process_inputs($applicationInputs, $experimentInputs)
+{
+    $utility = new Utilities();
+    $experimentAssemblySuccessful = true;
+    $newExperimentInputs = array();
+
+    //var_dump($_FILES);
+
+    if (sizeof($_FILES) > 0)
+    {
+        if (Utilities::file_upload_successful())
+        {
+            // construct unique path
+            Utilities::create_experiment_folder_path();
+        }
+        else
+        {
+            $experimentAssemblySuccessful = false;
+        }
+    }
+
+    //sending application inputs in the order defined by the admins.
+    $order = array();
+    foreach ($applicationInputs as $index => $input)
+    {
+        $order[$index] = $input->inputOrder;
+    }
+    array_multisort($order, SORT_ASC, $applicationInputs);
+    
+    foreach ($applicationInputs as $applicationInput)
+    {
+        $experimentInput = new InputDataObjectType();
+        $experimentInput = $applicationInput;
+        //$experimentInput->name = $applicationInput->name;
+        //$experimentInput->metaData = $applicationInput->metaData;
+
+
+        //$experimentInput->type = $applicationInput->type;
+        //$experimentInput->type = DataType::STRING;
+
+
+        if(($applicationInput->type == DataType::STRING) ||
+            ($applicationInput->type == DataType::INTEGER) ||
+            ($applicationInput->type == DataType::FLOAT))
+        {
+            if (isset($_POST[$applicationInput->name]) && (trim($_POST[$applicationInput->name]) != ''))
+            {
+                $experimentInput->value = $_POST[$applicationInput->name];
+                $experimentInput->type = $applicationInput->type;
+
+            }
+            else // use previous value
+            {
+                $index = -1;
+                for ($i = 0; $i < sizeof($experimentInputs); $i++)
+                {
+                    if ($experimentInputs[$i]->name == $applicationInput->name)
+                    {
+                        $index = $i;
+                    }
+                }
+
+                if ($index >= 0)
+                {
+                    $experimentInput->value = $experimentInputs[$index]->value;
+                    $experimentInput->type = $applicationInput->type;
+                }
+            }
+        }
+        elseif ($applicationInput->type == DataType::URI)
+        {
+            //var_dump($_FILES[$applicationInput->name]->name);
+            if ($_FILES[$applicationInput->name]['name'])
+            {
+                $file = $_FILES[$applicationInput->name];
+
+
+                //
+                // move file to experiment data directory
+                //
+                $filePath = Utilities::$experimentPath . $file['name'];
+
+                // check if file already exists
+                if (is_file($filePath))
+                {
+                    unlink($filePath);
+
+                    Utilities::print_warning_message('Uploaded file already exists! Overwriting...');
+                }
+
+                $moveFile = move_uploaded_file($file['tmp_name'], $filePath);
+
+                if ($moveFile)
+                {
+                    Utilities::print_success_message('Upload: ' . $file['name'] . '<br>' .
+                        'Type: ' . $file['type'] . '<br>' .
+                        'Size: ' . ($file['size']/1024) . ' kB');//<br>' .
+                        //'Stored in: ' . $experimentPath . $file['name']);
+                }
+                else
+                {
+                    Utilities::print_error_message('<p>Error moving uploaded file ' . $file['name'] . '!
+                    Please try again later or report a bug using the link in the Help menu.</p>');
+                    $experimentAssemblySuccessful = false;
+                }
+
+                $experimentInput->value = str_replace(base_path() . Constant::EXPERIMENT_DATA_ROOT, Utilities::$pathConstant , $filePath);
+                $experimentInput->type = $applicationInput->type;
+                
+            }
+            else
+            {
+                $index = -1;
+                for ($i = 0; $i < sizeof($experimentInputs); $i++)
+                {
+                    if ($experimentInputs[$i]->name == $applicationInput->name)
+                    {
+                        $index = $i;
+                    }
+                }
+
+                if ($index >= 0)
+                {
+                    $experimentInput->value = $experimentInputs[$index]->value;
+                    $experimentInput->type = $applicationInput->type;
+                }
+            }
+
+        }
+        else
+        {
+            Utilities::print_error_message('I cannot accept this input type yet!');
+        }
+
+
+
+
+
+
+
+        //$experimentInputs[] = $experimentInput;
+        /*
+        $index = -1;
+        for ($i = 0; $i < sizeof($experimentInputs); $i++)
+        {
+            if ($experimentInputs[$i]->key == $experimentInput->key)
+            {
+                $index = $i;
+            }
+        }
+
+        if ($index >= 0)
+        {
+            unset($experimentInputs[$index]);
+        }
+        */
+        //$experimentInputs[] = $experimentInput;
+
+
+
+
+
+        $newExperimentInputs[] = $experimentInput;
+
+
+    }
+
+    if ($experimentAssemblySuccessful)
+    {
+        return $newExperimentInputs;
+    }
+    else
+    {
+        return false;
+    }
+
+}
+
+
+public static function create_experiment_folder_path()
+{
+    do
+    {
+        Utilities::$experimentPath = base_path() . Constant::EXPERIMENT_DATA_ROOT . str_replace(' ', '', Session::get('username') ) . md5(rand() * time()) . '/';
+    }
+    while (is_dir( Utilities::$experimentPath)); // if dir already exists, try again
+    // create upload directory
+    if (!mkdir( Utilities::$experimentPath))
+    {
+        Utilities::print_error_message('<p>Error creating upload directory!
+            Please try again later or report a bug using the link in the Help menu.</p>');
+        $experimentAssemblySuccessful = false;
+    }
+}
+
+/**
+ * Check the uploaded files for errors
+ */
+public static function file_upload_successful()
+{
+    $uploadSuccessful = true;
+
+    foreach ($_FILES as $file)
+    {
+        //var_dump($file);
+        if($file['name'])
+        {
+            if ($file['error'] > 0)
+            {
+                $uploadSuccessful = false;
+                Utilities::print_error_message('<p>Error uploading file ' . $file['name'] . ' !
+                    Please try again later or report a bug using the link in the Help menu.');
+            }/*
+            elseif ($file['type'] != 'text/plain')
+            {
+                $uploadSuccessful = false;
+                Utilities::print_error_message('Uploaded file ' . $file['name'] . ' type not supported!');
+            }
+            elseif (($file['size'] / 1024) > 20)
+            {
+                $uploadSuccessful = false;
+                Utilities::print_error_message('Uploaded file ' . $file['name'] . ' must be smaller than 10 MB!');
+            }*/
+        }
+
+
+    }
+
+    return $uploadSuccessful;
+}
+
+
+/**
+ * Update the experiment with the given ID
+ * @param $expId
+ * @param $updatedExperiment
+ */
+public static function update_experiment($expId, $updatedExperiment)
+{
+    $airavataclient = Session::get("airavataClient");
+
+    try
+    {
+        $airavataclient->updateExperiment($expId, $updatedExperiment);
+
+        /*
+        Utilities::print_success_message("<p>Experiment updated!</p>" .
+            '<p>Click
+            <a href="' . URL::to('/') . '/experiment/summary?expId=' . $expId . '">here</a> to visit the experiment summary page.</p>');
+        */
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem updating the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (ExperimentNotFoundException $enf)
+    {
+        Utilities::print_error_message('<p>There was a problem updating the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem updating the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem updating the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
+    }
+
+}
+
+
+/**
+ * Clone the experiment with the given ID
+ * @param $expId
+ */
+public static function clone_experiment($expId)
+{
+    $airavataclient = Session::get("airavataClient");
+
+    try
+    {
+        //create new experiment to receive the clone
+        $experiment = $airavataclient->getExperiment($expId);
+
+        $cloneId = $airavataclient->cloneExperiment($expId, 'Clone of ' . $experiment->name);
+
+        Utilities::print_success_message("<p>Experiment cloned!</p>" .
+            '<p>You will be redirected to the edit page shortly, or you can
+            <a href="edit_experiment.php?expId=' . $cloneId . '">go directly</a> to the edit experiment page.</p>');
+        //redirect('edit_experiment.php?expId=' . $cloneId);
+        return $cloneId;
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem cloning the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (ExperimentNotFoundException $enf)
+    {
+        Utilities::print_error_message('<p>There was a problem cloning the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem cloning the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem cloning the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
+    }
+    catch (TTransportException $tte)
+    {
+        Utilities::print_error_message('<p>There was a problem cloning the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>TTransportException: ' . $tte->getMessage() . '</p>');
+    }
+}
+
+/**
+ * Cancel the experiment with the given ID
+ * @param $expId
+ */
+public static function cancel_experiment($expId)
+{
+    $airavataclient = Session::get("airavataClient");
+    $app_config = Utilities::read_config();
+
+
+
+    try
+    {
+        $airavataclient->terminateExperiment($expId, $app_config["credential-store-token"]);
+
+        Utilities::print_success_message("Experiment canceled!");
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem canceling the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (ExperimentNotFoundException $enf)
+    {
+        Utilities::print_error_message('<p>There was a problem canceling the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem canceling the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem canceling the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
+    }
+    catch (TTransportException $tte)
+    {
+        Utilities::print_error_message('<p>There was a problem canceling the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>TTransportException: ' . $tte->getMessage() . '</p>');
+    }
+    catch (Exception $e)
+    {
+        Utilities::print_error_message('<p>There was a problem canceling the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Exception: ' . $e->getMessage() . '</p>');
+    }
+}
+
+
+/**
+ * Create a select input and populate it with project options from the database
+ */
+public static function create_project_select($projectId = null, $editable = true)
+{
+    $editable? $disabled = '' : $disabled = 'disabled';
+    $userProjects = Utilities::get_all_user_projects( Session::get("gateway_id"), Session::get('username') );
+
+    echo '<select class="form-control" name="project" id="project" required ' . $disabled . '>';
+    if (sizeof($userProjects) > 0)
+    {
+        foreach ($userProjects as $project)
+        {
+            if ($project->projectID == $projectId)
+            {
+                $selected = 'selected';
+            }
+            else
+            {
+                $selected = '';
+            }
+
+            echo '<option value="' . $project->projectID . '" ' . $selected . '>' . $project->name . '</option>';
+        }
+    }
+    echo '</select>';
+    if( sizeof($userProjects) == 0 )
+    {
+        Utilities::print_warning_message('<p>You must create a project before you can create an experiment.
+                Click <a href="' . URL::to('/') . '/project/create">here</a> to create a project.</p>');
+    }
+}
+
+
+/**
+ * Create a select input and populate it with applications options
+ * @param null $id
+ * @param bool $editable
+ */
+public static function create_application_select($id = null, $editable = true)
+{
+    $disabled = $editable? '' : 'disabled';
+
+    $applicationIds = Utilities::get_all_applications();
+
+    echo '<select class="form-control" name="application" id="application" required ' . $disabled . '>';
+
+    if( count( $applicationIds))
+    {
+        foreach ( (array) $applicationIds as $applicationId => $applicationName)
+        {
+            $selected = ($applicationId == $id) ? 'selected' : '';
+    
+            echo '<option value="' . $applicationId . '" ' . $selected . '>' . $applicationName . '</option>';
+        }
+    }
+
+    echo '</select>';
+}
+
+
+/**
+ * Create a select input and populate it with compute resources
+ * available for the given application ID
+ * @param $applicationId
+ * @param $resourceHostId
+ */
+public static function create_compute_resources_select($applicationId, $resourceHostId)
+{
+    return Utilities::get_available_app_interface_compute_resources($applicationId);
+}
+
+
+/**
+ * Create form inputs to accept the inputs to the given application
+ * @param $id
+ * @param $isRequired
+ * @internal param $required
+ */
+public static function create_inputs($id, $isRequired)
+{
+    $inputs = Utilities::get_application_inputs($id);
+
+    $required = $isRequired? ' required' : '';
+
+    //var_dump( $inputs);  echo "<br/>after sort<br/>";
+    //arranging inputs in ascending order.
+    foreach ($inputs as $index => $input)
+    {
+        $order[$index] = $input->inputOrder;
+    }
+    array_multisort($order, SORT_ASC, $inputs);
+    //var_dump( $inputs); exit;
+    foreach ($inputs as $input)
+    {
+        switch ($input->type)
+        {
+            case DataType::STRING:
+                echo '<div class="form-group">
+                    <label for="experiment-input">' . $input->name . '</label>
+                    <input value="' . $input->value . '" type="text" class="form-control" name="' . $input->name .
+                    '" id="' . $input->name .
+                    '" placeholder="' . $input->userFriendlyDescription . '"' . $required . '>
+                    </div>';
+                break;
+            case DataType::INTEGER:
+            echo '<div class="form-group">
+                    <label for="experiment-input">' . $input->name . '</label>
+                    <input value="' . $input->value . '" type="number" class="form-control" name="' . $input->name .
+                    '" id="' . $input->name .
+                    '" placeholder="' . $input->userFriendlyDescription . '"' . $required . '>
+                    </div>';
+                break;
+            case DataType::FLOAT:
+                echo '<div class="form-group">
+                    <label for="experiment-input">' . $input->name . '</label>
+                    <input value="' . $input->value . '" type="number" step="0.01" class="form-control" name="' . $input->name .
+                    '" id="' . $input->name .
+                    '" placeholder="' . $input->userFriendlyDescription . '"' . $required . '>
+                    </div>';
+                break;
+            case DataType::URI:
+                echo '<div class="form-group">
+                    <label for="experiment-input">' . $input->name . '</label>
+                    <input class="file-input" type="file" name="' . $input->name .
+                    '" id="' . $input->name . '" ' . $required . '>
+                    <p class="help-block">' . $input->userFriendlyDescription . '</p>
+                    </div>';
+                break;
+            default:
+                Utilities::print_error_message('Input data type not supported!
+                    Please file a bug report using the link in the Help menu.');
+                break;
+        }
+    }
+}
+
+
+/**
+ * Create navigation bar
+ * Used for all pages
+ */
+public static function create_nav_bar()
+{
+	$menus = array();
+/*
+	if( Session::has('loggedin'))
+	{
+	    $menus = array
+	    (
+	        'Project' => array
+	        (
+	            array('label' => 'Create Project', 'url' => URL::to('/') . '/project/create'),
+	            array('label' => 'Search Projects', 'url' => URL::to('/') . '/project/search')
+	        ),
+	        'Experiment' => array
+	        (
+	            array('label' => 'Create Experiment', 'url' => URL::to('/') . '/experiment/create'),
+	            array('label' => 'Search Experiments', 'url' => URL::to('/') . '/experiment/search')
+	        ),
+	        'Compute Resource' => array
+	        (
+	            array('label' => 'Register', 'url' => URL::to('/') . '/cr/create'),
+	            array('label' => 'Browse', 'url' => URL::to('/') . '/cr/browse')
+	        ),
+	        'App Catalog' => array
+	        (
+	            array('label' => 'Module', 'url' => URL::to('/') . '/app/module'),
+	            array('label' => 'Interface', 'url' => URL::to('/') . '/app/interface'),
+	            array('label' => 'Deployment', 'url' => URL::to('/') . '/app/deployment')
+	        ),
+	        'Help' => array
+	        (
+	            array('label' => 'Report Issue', 'url' => '#'),
+	            array('label' => 'Request Feature', 'url' => '#')
+	        )
+	    );
+	}
+*/
+	if( Session::has('loggedin'))
+	{
+	    $menus = array
+	    (
+	        'Project' => array
+	        (
+	            array('label' => 'Create', 'url' => URL::to('/') . '/project/create', "nav-active" => "project"),
+	            array('label' => 'Search', 'url' => URL::to('/') . '/project/search', "nav-active"=> "project")
+	        ),
+	        'Experiment' => array
+	        (
+	            array('label' => 'Create', 'url' => URL::to('/') . '/experiment/create', "nav-active" => "experiment"),
+	            array('label' => 'Search', 'url' => URL::to('/') . '/experiment/search', "nav-active" => "experiment")
+	        )
+	    );
+
+	    if( Session::has("admin"))
+	    {
+	    	$menus['Compute Resource'] = array
+	        (
+	            array('label' => 'Register', 'url' => URL::to('/') . '/cr/create', "nav-active" => "compute-resource"),
+	            array('label' => 'Browse', 'url' => URL::to('/') . '/cr/browse', "nav-active" => "compute-resource")
+	        );
+	        $menus['App Catalog'] = array
+	        (
+	            array('label' => 'Module', 'url' => URL::to('/') . '/app/module', "nav-active" => "app-catalog"),
+	            array('label' => 'Interface', 'url' => URL::to('/') . '/app/interface', "nav-active" => "app-catalog"),
+	            array('label' => 'Deployment', 'url' => URL::to('/') . '/app/deployment', "nav-active" => "app-catalog")
+	        );
+            /*
+            $menus['Gateway Profile'] = array
+            (
+
+                array('label' => 'Register', 'url' => URL::to('/') . '/gp/create', "nav-active" => "gateway-profile"),
+                array('label' => 'Browse', 'url' => URL::to('/') . '/gp/browse', "nav-active" => "gateway-profile")
+            );
+            */
+               
+	    }
+        
+        $menus['Help'] = array
+        (
+            array('label' => 'Report Issue', 'url' => '#', "nav-active", ""),
+            array('label' => 'Request Feature', 'url' => '#', "nav-active", "")
+        );
+	}
+
+    $selfExplode = explode('/', $_SERVER['PHP_SELF']);
+
+
+
+    // nav bar and left-aligned content
+
+    echo '<nav class="navbar navbar-inverse navbar-static-top" role="navigation">
+            <div class="container-fluid">
+                <!-- Brand and toggle get grouped for better mobile display -->
+                <div class="navbar-header">
+                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+                       <span class="sr-only">Toggle navigation</span>
+                       <span class="icon-bar"></span>
+                       <span class="icon-bar"></span>
+                       <span class="icon-bar"></span>
+                    </button>
+                    <a class="navbar-brand" href="' . URL::to('home') . '" title="PHP Gateway with Airavata">PGA</a>
+                </div>
+
+                <!-- Collect the nav links, forms, and other content for toggling -->
+                <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
+                    <ul class="nav navbar-nav">';
+
+
+    foreach ($menus as $label => $options)
+    {
+        Session::has('loggedin') ? $disabled = '' : $disabled = ' class="disabled"';
+
+        $active = "";
+        if( Session::has("nav-active") && isset( $options[0]['nav-active'] ) )
+        {
+	        if( $options[0]['nav-active'] == Session::get("nav-active"))
+	        	$active = " active ";
+        }
+        echo '<li class="dropdown ' . $active . '">
+                <a href="#" class="dropdown-toggle" data-toggle="dropdown">' . $label . '<span class="caret"></span></a>
+                <ul class="dropdown-menu" role="menu">';
+
+        if( Session::has('loggedin'))
+        {
+	        foreach ($options as $option)
+	        {
+	            $id = strtolower(str_replace(' ', '-', $option['label']));
+
+	            echo '<li' . $disabled . '><a href="' . $option['url'] . '" id=' . $id . '>' . $option['label'] . '</a></li>';
+	        }
+	    }
+
+        echo '</ul>
+        </li>';
+    }
+
+
+    echo '</ul>
+
+        <ul class="nav navbar-nav navbar-right">';
+
+    // right-aligned content
+
+    if ( Session::has('loggedin') )
+    {
+        $active = "";
+        if( Session::has("nav-active") )
+        {
+            if( "user-console" == Session::get("nav-active"))
+                $active = " active ";
+        }
+        if( Session::has("admin"))
+            echo '<li><a href="' . URL::to("/") . '/admin/dashboard"><span class="glyphicon glyphicon-user"></span> Dashboard</a></li>';
+        else
+            echo '<li><a href="' . URL::to("/") . '/user/profile"><span class="glyphicon glyphicon-user"></span> Profile</a></li>';
+
+        echo '<li class="dropdown ' . $active . '">
+
+                <a href="#" class="dropdown-toggle" data-toggle="dropdown">' . Session::get("username") . ' <span class="caret"></span></a>';
+        echo '<ul class="dropdown-menu" role="menu">';
+
+        echo '<li><a href="' . URL::to('/') . '/logout"><span class="glyphicon glyphicon-log-out"></span> Log out</a></li>';
+        echo    '</ul></li></ul>';
+    }
+    else
+    {
+        echo '<li><a href="' . URL::to('/') . '/create"><span class="glyphicon glyphicon-user"></span> Create account</a></li>';
+        echo '<li><a href="' . URL::to('/') . '/login"><span class="glyphicon glyphicon-log-in"></span> Log in</a></li>';
+        echo '</ul>';
+
+    }
+
+    echo '</div><!-- /.navbar-collapse -->
+    </div><!-- /.container-fluid -->
+    </nav>';
+}
+
+/**
+* Add attributes to the HTTP header.
+*/
+public static function create_http_header()
+{
+   header( 'Cache-Control: no-store, no-cache, must-revalidate' );
+   header( 'Cache-Control: post-check=0, pre-check=0', false );
+   header( 'Pragma: no-cache' );
+}
+
+/**
+ * Open the XML file containing the community token
+ * @param $tokenFilePath
+ * @throws Exception
+ */
+public static function open_tokens_file($tokenFilePath)
+{
+    if (file_exists( $tokenFilePath ))
+    {
+        $tokenFile = simplexml_load_file( $tokenFilePath );
+    }
+    else
+    {
+        throw new Exception('Error: Cannot connect to tokens database!');
+    }
+
+
+    if (!$tokenFile)
+    {
+        throw new Exception('Error: Cannot open tokens database!');
+    }
+}
+
+
+/**
+ * Write the new token to the XML file
+ * @param $tokenId
+ */
+public static function write_new_token($tokenId)
+{    // write new tokenId to tokens file
+    $tokenFile->tokenId = $tokenId;
+
+    //Format XML to save indented tree rather than one line
+    $dom = new DOMDocument('1.0');
+    $dom->preserveWhiteSpace = false;
+    $dom->formatOutput = true;
+    $dom->loadXML( $tokenFile->asXML());
+    $dom->save( $tokenFilePath );
+}
+
+
+//moved from create project view.
+
+public static function create_project()
+{
+    
+    $airavataclient = Session::get("airavataClient");
+    
+    $project = new Project();
+    $project->owner = Session::get('username');
+    $project->name = $_POST['project-name'];
+    $project->description = $_POST['project-description'];
+
+
+    $projectId = null;
+
+    try
+    {
+        $projectId = $airavataclient->createProject( Session::get("gateway_id"), $project);
+
+        if ($projectId)
+        {
+            Utilities::print_success_message("<p>Project {$_POST['project-name']} created!</p>" .
+                '<p>You will be redirected to the summary page shortly, or you can
+                <a href="project/summary?projId=' . $projectId . '">go directly</a> to the project summary page.</p>');
+        }
+        else
+        {
+            Utilities::print_error_message("Error creating project {$_POST['project-name']}!");
+        }
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('AiravataSystemException!<br><br>' . $ase->getMessage());
+    }
+
+    return $projectId;
+}
+
+/**
+ * Get experiments in project
+ * @param $projectId
+ * @return array|null
+ */
+public static function get_experiments_in_project($projectId)
+{
+    $airavataclient = Session::get("airavataClient");
+
+    $experiments = array();
+
+    try
+    {
+        $experiments = $airavataclient->getAllExperimentsInProject($projectId);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('AiravataSystemException!<br><br>' . $ase->getMessage());
+    }
+    catch (TTransportException $tte)
+    {
+        Utilities::print_error_message('TTransportException!<br><br>' . $tte->getMessage());
+    }
+
+    return $experiments;
+}
+
+public static function update_project($projectId, $projectDetails)
+{
+    $airavataclient = Session::get("airavataClient");
+
+    $updatedProject = new Project();
+    $updatedProject->owner = $projectDetails["owner"];
+    $updatedProject->name = $projectDetails["name"];
+    $updatedProject->description = $projectDetails["description"];
+
+    try
+    {
+        $airavataclient->updateProject($projectId, $updatedProject);
+
+        //Utilities::print_success_message('Project updated! Click <a href="project_summary.php?projId=' . $projectId . '">here</a> to view the project summary.');
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
+    }
+    catch (ProjectNotFoundException $pnfe)
+    {
+        Utilities::print_error_message('ProjectNotFoundException!<br><br>' . $pnfe->getMessage());
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('AiravataSystemException!<br><br>' . $ase->getMessage());
+    }
+}
+
+
+/**
+ * Create a new experiment from the values submitted in the form
+ * @return null
+ */
+public static function create_experiment()
+{
+    $airavataclient = Session::get("airavataClient");
+
+    $experiment = Utilities::assemble_experiment();
+    $expId = null;
+
+    try
+    {
+        if($experiment)
+        {
+            $expId = $airavataclient->createExperiment( Session::get("gateway_id"), $experiment);
+        }
+
+        if ($expId)
+        {
+            /*
+            Utilities::print_success_message("Experiment {$_POST['experiment-name']} created!" .
+                ' <a href="experiment_summary.php?expId=' . $expId . '">Go to experiment summary page</a>');
+            */
+        }
+        else
+        {
+            Utilities::print_error_message("Error creating experiment {$_POST['experiment-name']}!");
+        }
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('AiravataSystemException!<br><br>' . $ase->getMessage());
+    }
+
+    return $expId;
+}
+
+/*
+ * Required in Experiment Sumamry page.
+ *
+*/
+
+public static function list_output_files($experiment, $expStatus)
+{   
+
+    $expStatusVal = array_search($expStatus, ExperimentState::$__names);
+
+    if($expStatusVal == ExperimentState::COMPLETED )
+    {
+        $utility = new Utilities();
+        $experimentOutputs = $experiment->experimentOutputs;
+
+        foreach ((array)$experimentOutputs as $output)
+        {   
+            if ($output->type == DataType::URI || $output->type == DataType::STDOUT || $output->type == DataType::STDERR )
+            {
+                $explode = explode('/', $output->value);
+                //echo '<p>' . $output->key .  ': <a href="' . $output->value . '">' . $output->value . '</a></p>';
+                $outputPath = str_replace(Utilities::$experimentDataPathAbsolute, Constant::EXPERIMENT_DATA_ROOT, $output->value);
+                $outputPathArray = explode("/", $outputPath);
+
+                echo '<p>' . $output->name  . ' : ' . '<a target="_blank"
+                            href="' . URL::to("/") . "/.." . str_replace(Utilities::$experimentDataPathAbsolute, Constant::EXPERIMENT_DATA_ROOT, $output->value) . '">' . 
+                        $outputPathArray[ sizeof( $outputPathArray) - 1] . ' <span class="glyphicon glyphicon-new-window"></span></a></p>';
+            }
+            elseif ($output->type == DataType::STRING)
+            {
+                echo '<p>' . $output->value . '</p>';
+            }
+        }
+    }
+    else
+        echo "Experiment hasn't completed. Experiment Status is : " . $expStatus;
+}
+
+public static function get_experiment_values( $experiment, $project, $forSearch = false)
+{
+    $airavataclient = Session::get("airavataClient");
+    //var_dump( $experiment); exit;
+    $expVal = array();
+    $expVal["experimentStatusString"] = "";
+    $expVal["experimentTimeOfStateChange"] = "";
+    $expVal["experimentCreationTime"] = "";
+
+    if( $experiment->experimentStatus != null)
+    {
+        $experimentStatus = $experiment->experimentStatus;
+        $experimentState = $experimentStatus->experimentState;
+        $experimentStatusString = ExperimentState::$__names[$experimentState];
+        $expVal["experimentStatusString"] = $experimentStatusString;
+        $expVal["experimentTimeOfStateChange"] = date('Y-m-d H:i:s', $experimentStatus->timeOfStateChange/1000); // divide by 1000 since timeOfStateChange is in ms
+        $expVal["experimentCreationTime"] = date('Y-m-d H:i:s', $experiment->creationTime/1000); // divide by 1000 since creationTime is in ms
+    }
+    $jobStatus = $airavataclient->getJobStatuses($experiment->experimentID);
+
+    if ($jobStatus)
+    {
+        $jobName = array_keys($jobStatus);
+        $jobState = JobState::$__names[$jobStatus[$jobName[0]]->jobState];
+    }
+    else
+    {
+        $jobState = null;
+    }
+
+    $expVal["jobState"] = $jobState;
+    
+    if(! $forSearch)
+    {
+        $userConfigData = $experiment->userConfigurationData;
+        $scheduling = $userConfigData->computationalResourceScheduling;
+        $expVal['scheduling'] = $scheduling;
+        $expVal["computeResource"] = Utilities::get_compute_resource($scheduling->resourceHostId);
+    }
+    $expVal["applicationInterface"] = Utilities::get_application_interface($experiment->applicationId);
+
+
+    switch ($experimentStatusString)
+    {
+        case 'CREATED':
+        case 'VALIDATED':
+        case 'SCHEDULED':
+        case 'CANCELED':
+        case 'FAILED':
+            $expVal["editable"] = true;
+            break;
+        default:
+            $expVal["editable"] = false;
+            break;
+    }
+
+    switch ($experimentStatusString)
+    {
+        case 'CREATED':
+        case 'VALIDATED':
+        case 'SCHEDULED':
+        case 'LAUNCHED':
+        case 'EXECUTING':
+            $expVal["cancelable"] = true;
+            break;
+        default:
+            $expVal["cancelable"] = false;
+            break;
+    }
+
+    return $expVal;
+
+}
+
+public static function get_projsearch_results( $searchKey, $searchValue)
+{
+    $airavataclient = Session::get("airavataClient");;
+
+    $projects = array();
+
+    try
+    {
+        switch ( $searchKey)
+        {
+            case 'project-name':
+                $projects = $airavataclient->searchProjectsByProjectName( Session::get("gateway_id"), Session::get("username"), $searchValue);
+                break;
+            case 'project-description':
+                $projects = $airavataclient->searchProjectsByProjectDesc( Session::get("gateway_id"), Session::get("username"), $searchValue);
+                break;
+        }
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
+    }
+    catch (AiravataSystemException $ase)
+    {
+        if ($ase->airavataErrorType == 2) // 2 = INTERNAL_ERROR
+        {
+            Utilities::print_info_message('<p>You have not created any projects yet, so no results will be returned!</p>
+                                <p>Click <a href="create_project.php">here</a> to create a new project.</p>');
+        }
+        else
+        {
+            Utilities::print_error_message('There was a problem with Airavata. Please try again later, or report a bug using the link in the Help menu.');
+            //print_error_message('AiravataSystemException!<br><br>' . $ase->airavataErrorType . ': ' . $ase->getMessage());
+        }
+    }
+    catch (TTransportException $tte)
+    {
+        Utilities::print_error_message('TTransportException!<br><br>' . $tte->getMessage());
+    }
+
+    return $projects;
+}
+
+
+/**
+ * Create options for the search key select input
+ * @param $values
+ * @param $labels
+ * @param $disabled
+ */
+public static function create_options($values, $labels, $disabled)
+{
+    for ($i = 0; $i < sizeof($values); $i++)
+    {
+        $selected = '';
+
+        // if option was previously selected, mark it as selected
+        if (isset($_POST['search-key']))
+        {
+            if ($values[$i] == $_POST['search-key'])
+            {
+                $selected = 'selected';
+            }
+        }
+
+        echo '<option value="' . $values[$i] . '" ' . $disabled[$i] . ' ' . $selected . '>' . $labels[$i] . '</option>';
+    }
+}
+
+/**
+ * Get results of the user's search of experiments
+ * @return array|null
+ */
+public static function get_expsearch_results( $inputs)
+{
+    $airavataclient = Session::get("airavataClient");
+    $experiments = array();
+
+    try
+    {
+        switch ( $inputs["search-key"])
+        {
+            case 'experiment-name':
+                $experiments = $airavataclient->searchExperimentsByName(Session::get('gateway_id'), Session::get('username'), $inputs["search-value"]);
+                break;
+            case 'experiment-description':
+                $experiments = $airavataclient->searchExperimentsByDesc(Session::get('gateway_id'), Session::get('username'), $inputs["search-value"]);
+                break;
+            case 'application':
+                $experiments = $airavataclient->searchExperimentsByApplication(Session::get('gateway_id'), Session::get('username'), $inputs["search-value"]);
+                break;
+            case 'creation-time':
+                $experiments = $airavataclient->searchExperimentsByCreationTime(Session::get('gateway_id'), Session::get('username'), strtotime( $inputs["from-date"])*1000, strtotime( $inputs["to-date"])*1000 );
+                break;
+            case '':
+        }
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
+    }
+    catch (AiravataSystemException $ase)
+    {
+        if ($ase->airavataErrorType == 2) // 2 = INTERNAL_ERROR
+        {
+            Utilities::print_info_message('<p>You have not created any experiments yet, so no results will be returned!</p>
+                                <p>Click <a href="create_experiment.php">here</a> to create an experiment, or
+                                <a href="create_project.php">here</a> to create a new project.</p>');
+        }
+        else
+        {
+            Utilities::print_error_message('There was a problem with Airavata. Please try again later or report a bug using the link in the Help menu.');
+            //print_error_message('AiravataSystemException!<br><br>' . $ase->airavataErrorType . ': ' . $ase->getMessage());
+        }
+    }
+    catch (TTransportException $tte)
+    {
+        Utilities::print_error_message('TTransportException!<br><br>' . $tte->getMessage());
+    }
+
+    //get values of all experiments
+    $expContainer = array();
+    $expNum = 0;
+    foreach( $experiments as $experiment)
+    {
+        $expValue = Utilities::get_experiment_values( $experiment, Utilities::get_project($experiment->projectID), true );
+        $expContainer[$expNum]['experiment'] = $experiment;
+        if( $expValue["experimentStatusString"] == "FAILED")
+            $expValue["editable"] = false;
+        $expContainer[$expNum]['expValue'] = $expValue;
+        $expNum++;
+    }
+
+    return $expContainer;
+}
+
+public static function getExpStates(){
+    return ExperimentState::$__names;
+}
+
+
+public static function apply_changes_to_experiment($experiment, $input)
+{
+    $experiment->name = $input['experiment-name'];
+    $experiment->description = rtrim($input['experiment-description']);
+    $experiment->projectID = $input['project'];
+    //$experiment->applicationId = $_POST['application'];
+
+    $userConfigDataUpdated = $experiment->userConfigurationData;
+    $schedulingUpdated = $userConfigDataUpdated->computationalResourceScheduling;
+
+    $schedulingUpdated->resourceHostId = $input['compute-resource'];
+    $schedulingUpdated->nodeCount = $input['node-count'];
+    $schedulingUpdated->queueName = $_POST['queue-name'];
+    $schedulingUpdated->totalCPUCount = $input['cpu-count'];
+    //$schedulingUpdated->numberOfThreads = $input['threads'];
+    $schedulingUpdated->wallTimeLimit = $input['wall-time'];
+    //$schedulingUpdated->totalPhysicalMemory = $input['memory'];
+
+    /*
+    switch ($_POST['compute-resource'])
+    {
+        case 'trestles.sdsc.edu':
+            $schedulingUpdated->ComputationalProjectAccount = 'sds128';
+            break;
+        case 'stampede.tacc.xsede.org':
+        case 'lonestar.tacc.utexas.edu':
+            $schedulingUpdated->ComputationalProjectAccount = 'TG-STA110014S';
+            break;
+        default:
+            $schedulingUpdated->ComputationalProjectAccount = 'admin';
+    }
+    */
+
+    $userConfigDataUpdated->computationalResourceScheduling = $schedulingUpdated;
+    if( isset( $input["userDN"]) )
+        $userConfigDataUpdated->userDN = $input["userDN"];
+
+    $experiment->userConfigurationData = $userConfigDataUpdated;
+
+    $applicationInputs = Utilities::get_application_inputs($experiment->applicationId);
+
+    $experimentInputs = $experiment->experimentInputs; // get current inputs
+    //var_dump($experimentInputs);
+    $experimentInputs = Utilities::process_inputs($applicationInputs, $experimentInputs); // get new inputs
+    //var_dump($experimentInputs);
+
+    if ($experimentInputs)
+    {
+        $experiment->experimentInputs = $experimentInputs;
+        //var_dump($experiment);
+        return $experiment;
+    }
+}
+
+public static function read_config( $fileName = null){
+    $wsis_config = null;
+
+    if( $fileName == null)
+        $fileName = "app_config.ini";
+    try {
+        if (file_exists( app_path() . "/config/" . $fileName ) ) {
+
+            try
+            {
+                $wsis_config = parse_ini_file( app_path() . "/config/" . $fileName );
+            }
+
+            catch( \Exception $e)
+            {
+                print_r( $e); exit;
+            }
+        } 
+        else 
+        {
+            throw new Exception("Error: Cannot open file!");
+        }
+
+        if (!$wsis_config) 
+        {
+            throw new Exception('Error: Unable to read the file!');
+        }
+    }catch (Exception $e) {
+        throw new Exception('Unable to instantiate the client. Try editing the file.', 0, NULL);
+    }
+    return $wsis_config;
+
+}
+
+public static function get_job_details( $experimentId){
+    $airavataclient = Session::get("airavataClient");
+    return $airavataclient->getJobDetails( $experimentId);
+}
+
+public static function get_transfer_details( $experimentId){
+    $airavataclient = Session::get("airavataClient");
+    return $airavataclient->getDataTransferDetails( $experimentId);
+}
+
+public static function getQueueDatafromResourceId( $crId){
+    $airavataclient = Session::get("airavataClient");
+    $resourceObject = $airavataclient->getComputeResource( $crId);
+
+    return $resourceObject->batchQueues;
+}
+
+}
+
+?>


[07/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/ControllerInspector.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/ControllerInspector.php b/vendor/laravel/framework/src/Illuminate/Routing/ControllerInspector.php
new file mode 100644
index 0000000..d10d476
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/ControllerInspector.php
@@ -0,0 +1,131 @@
+<?php namespace Illuminate\Routing;
+
+use ReflectionClass, ReflectionMethod;
+
+class ControllerInspector {
+
+	/**
+	 * An array of HTTP verbs.
+	 *
+	 * @var array
+	 */
+	protected $verbs = array(
+		'any', 'get', 'post', 'put', 'patch',
+		'delete', 'head', 'options'
+	);
+
+	/**
+	 * Get the routable methods for a controller.
+	 *
+	 * @param  string  $controller
+	 * @param  string  $prefix
+	 * @return array
+	 */
+	public function getRoutable($controller, $prefix)
+	{
+		$routable = array();
+
+		$reflection = new ReflectionClass($controller);
+
+		$methods = $reflection->getMethods(ReflectionMethod::IS_PUBLIC);
+
+		// To get the routable methods, we will simply spin through all methods on the
+		// controller instance checking to see if it belongs to the given class and
+		// is a publicly routable method. If so, we will add it to this listings.
+		foreach ($methods as $method)
+		{
+			if ($this->isRoutable($method))
+			{
+				$data = $this->getMethodData($method, $prefix);
+
+				$routable[$method->name][] = $data;
+
+				// If the routable method is an index method, we will create a special index
+				// route which is simply the prefix and the verb and does not contain any
+				// the wildcard place-holders that each "typical" routes would contain.
+				if ($data['plain'] == $prefix.'/index')
+				{
+					$routable[$method->name][] = $this->getIndexData($data, $prefix);
+				}
+			}
+		}
+
+		return $routable;
+	}
+
+	/**
+	 * Determine if the given controller method is routable.
+	 *
+	 * @param  \ReflectionMethod  $method
+	 * @return bool
+	 */
+	public function isRoutable(ReflectionMethod $method)
+	{
+		if ($method->class == 'Illuminate\Routing\Controller') return false;
+
+		return starts_with($method->name, $this->verbs);
+	}
+
+	/**
+	 * Get the method data for a given method.
+	 *
+	 * @param  \ReflectionMethod  $method
+	 * @param  string  $prefix
+	 * @return array
+	 */
+	public function getMethodData(ReflectionMethod $method, $prefix)
+	{
+		$verb = $this->getVerb($name = $method->name);
+
+		$uri = $this->addUriWildcards($plain = $this->getPlainUri($name, $prefix));
+
+		return compact('verb', 'plain', 'uri');
+	}
+
+	/**
+	 * Get the routable data for an index method.
+	 *
+	 * @param  array   $data
+	 * @param  string  $prefix
+	 * @return array
+	 */
+	protected function getIndexData($data, $prefix)
+	{
+		return array('verb' => $data['verb'], 'plain' => $prefix, 'uri' => $prefix);
+	}
+
+	/**
+	 * Extract the verb from a controller action.
+	 *
+	 * @param  string  $name
+	 * @return string
+	 */
+	public function getVerb($name)
+	{
+		return head(explode('_', snake_case($name)));
+	}
+
+	/**
+	 * Determine the URI from the given method name.
+	 *
+	 * @param  string  $name
+	 * @param  string  $prefix
+	 * @return string
+	 */
+	public function getPlainUri($name, $prefix)
+	{
+		return $prefix.'/'.implode('-', array_slice(explode('_', snake_case($name)), 1));
+	}
+
+	/**
+	 * Add wildcards to the given URI.
+	 *
+	 * @param  string  $uri
+	 * @return string
+	 */
+	public function addUriWildcards($uri)
+	{
+		return $uri.'/{one?}/{two?}/{three?}/{four?}/{five?}';
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/ControllerServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/ControllerServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Routing/ControllerServiceProvider.php
new file mode 100644
index 0000000..764808b
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/ControllerServiceProvider.php
@@ -0,0 +1,60 @@
+<?php namespace Illuminate\Routing;
+
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Routing\Console\MakeControllerCommand;
+use Illuminate\Routing\Generators\ControllerGenerator;
+
+class ControllerServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->registerGenerator();
+
+		$this->commands('command.controller.make');
+	}
+
+	/**
+	 * Register the controller generator command.
+	 *
+	 * @return void
+	 */
+	protected function registerGenerator()
+	{
+		$this->app->bindShared('command.controller.make', function($app)
+		{
+			// The controller generator is responsible for building resourceful controllers
+			// quickly and easily for the developers via the Artisan CLI. We'll go ahead
+			// and register this command instances in this container for registration.
+			$path = $app['path'].'/controllers';
+
+			$generator = new ControllerGenerator($app['files']);
+
+			return new MakeControllerCommand($generator, $path);
+		});
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array(
+			'command.controller.make'
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Generators/ControllerGenerator.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Generators/ControllerGenerator.php b/vendor/laravel/framework/src/Illuminate/Routing/Generators/ControllerGenerator.php
new file mode 100755
index 0000000..e7c8396
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Generators/ControllerGenerator.php
@@ -0,0 +1,207 @@
+<?php namespace Illuminate\Routing\Generators;
+
+use Illuminate\Filesystem\Filesystem;
+
+class ControllerGenerator {
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * The default resource controller methods.
+	 *
+	 * @var array
+	 */
+	protected $defaults = array(
+		'index',
+		'create',
+		'store',
+		'show',
+		'edit',
+		'update',
+		'destroy'
+	);
+
+	/**
+	 * Create a new controller generator instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @return void
+	 */
+	public function __construct(Filesystem $files)
+	{
+		$this->files = $files;
+	}
+
+	/**
+	 * Create a new resourceful controller file.
+	 *
+	 * @param  string  $controller
+	 * @param  string  $path
+	 * @param  array   $options
+	 * @return void
+	 */
+	public function make($controller, $path, array $options = array())
+	{
+		$stub = $this->addMethods($this->getController($controller), $options);
+
+		$this->writeFile($stub, $controller, $path);
+
+		return false;
+	}
+
+	/**
+	 * Write the completed stub to disk.
+	 *
+	 * @param  string  $stub
+	 * @param  string  $controller
+	 * @param  string  $path
+	 * @return void
+	 */
+	protected function writeFile($stub, $controller, $path)
+	{
+		if (str_contains($controller, '\\'))
+		{
+			$this->makeDirectory($controller, $path);
+		}
+
+		$controller = str_replace('\\', DIRECTORY_SEPARATOR, $controller);
+
+		if ( ! $this->files->exists($fullPath = $path."/{$controller}.php"))
+		{
+			return $this->files->put($fullPath, $stub);
+		}
+	}
+
+	/**
+	 * Create the directory for the controller.
+	 *
+	 * @param  string  $controller
+	 * @param  string  $path
+	 * @return void
+	 */
+	protected function makeDirectory($controller, $path)
+	{
+		$directory = $this->getDirectory($controller);
+
+		if ( ! $this->files->isDirectory($full = $path.'/'.$directory))
+		{
+			$this->files->makeDirectory($full, 0777, true);
+		}
+	}
+
+	/**
+	 * Get the directory the controller should live in.
+	 *
+	 * @param  string  $controller
+	 * @return string
+	 */
+	protected function getDirectory($controller)
+	{
+		return implode('/', array_slice(explode('\\', $controller), 0, -1));
+	}
+
+	/**
+	 * Get the controller class stub.
+	 *
+	 * @param  string  $controller
+	 * @return string
+	 */
+	protected function getController($controller)
+	{
+		$stub = $this->files->get(__DIR__.'/stubs/controller.stub');
+
+		// We will explode out the controller name on the namespace delimiter so we
+		// are able to replace a namespace in this stub file. If no namespace is
+		// provided we'll just clear out the namespace place-holder locations.
+		$segments = explode('\\', $controller);
+
+		$stub = $this->replaceNamespace($segments, $stub);
+
+		return str_replace('{{class}}', last($segments), $stub);
+	}
+
+	/**
+	 * Replace the namespace on the controller.
+	 *
+	 * @param  array   $segments
+	 * @param  string  $stub
+	 * @return string
+	 */
+	protected function replaceNamespace(array $segments, $stub)
+	{
+		if (count($segments) > 1)
+		{
+			$namespace = implode('\\', array_slice($segments, 0, -1));
+
+			return str_replace('{{namespace}}', ' namespace '.$namespace.';', $stub);
+		}
+
+		return str_replace('{{namespace}}', '', $stub);
+	}
+
+	/**
+	 * Add the method stubs to the controller.
+	 *
+	 * @param  string  $stub
+	 * @param  array   $options
+	 * @return string
+	 */
+	protected function addMethods($stub, array $options)
+	{
+		// Once we have the applicable methods, we can just spin through those methods
+		// and add each one to our array of method stubs. Then we will implode them
+		// them all with end-of-line characters and return the final joined list.
+		$stubs = $this->getMethodStubs($options);
+
+		$methods = implode(PHP_EOL.PHP_EOL, $stubs);
+
+		return str_replace('{{methods}}', $methods, $stub);
+	}
+
+	/**
+	 * Get all of the method stubs for the given options.
+	 *
+	 * @param  array  $options
+	 * @return array
+	 */
+	protected function getMethodStubs($options)
+	{
+		$stubs = array();
+
+		// Each stub is conveniently kept in its own file so we can just grab the ones
+		// we need from disk to build the controller file. Once we have them all in
+		// an array we will return this list of methods so they can be joined up.
+		foreach ($this->getMethods($options) as $method)
+		{
+			$stubs[] = $this->files->get(__DIR__."/stubs/{$method}.stub");
+		}
+
+		return $stubs;
+	}
+
+	/**
+	 * Get the applicable methods based on the options.
+	 *
+	 * @param  array  $options
+	 * @return array
+	 */
+	protected function getMethods($options)
+	{
+		if (isset($options['only']) && count($options['only']) > 0)
+		{
+			return $options['only'];
+		}
+		elseif (isset($options['except']) && count($options['except']) > 0)
+		{
+			return array_diff($this->defaults, $options['except']);
+		}
+
+		return $this->defaults;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/controller.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/controller.stub b/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/controller.stub
new file mode 100755
index 0000000..b6d02dd
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/controller.stub
@@ -0,0 +1,7 @@
+<?php{{namespace}}
+
+class {{class}} extends \BaseController {
+
+{{methods}}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/create.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/create.stub b/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/create.stub
new file mode 100755
index 0000000..aa59afd
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/create.stub
@@ -0,0 +1,9 @@
+	/**
+	 * Show the form for creating a new resource.
+	 *
+	 * @return Response
+	 */
+	public function create()
+	{
+		//
+	}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/destroy.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/destroy.stub b/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/destroy.stub
new file mode 100755
index 0000000..24abe54
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/destroy.stub
@@ -0,0 +1,10 @@
+	/**
+	 * Remove the specified resource from storage.
+	 *
+	 * @param  int  $id
+	 * @return Response
+	 */
+	public function destroy($id)
+	{
+		//
+	}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/edit.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/edit.stub b/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/edit.stub
new file mode 100755
index 0000000..ed60754
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/edit.stub
@@ -0,0 +1,10 @@
+	/**
+	 * Show the form for editing the specified resource.
+	 *
+	 * @param  int  $id
+	 * @return Response
+	 */
+	public function edit($id)
+	{
+		//
+	}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/index.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/index.stub b/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/index.stub
new file mode 100755
index 0000000..8238ea1
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/index.stub
@@ -0,0 +1,9 @@
+	/**
+	 * Display a listing of the resource.
+	 *
+	 * @return Response
+	 */
+	public function index()
+	{
+		//
+	}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/show.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/show.stub b/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/show.stub
new file mode 100755
index 0000000..f2001e4
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/show.stub
@@ -0,0 +1,10 @@
+	/**
+	 * Display the specified resource.
+	 *
+	 * @param  int  $id
+	 * @return Response
+	 */
+	public function show($id)
+	{
+		//
+	}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/store.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/store.stub b/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/store.stub
new file mode 100755
index 0000000..a4d28d6
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/store.stub
@@ -0,0 +1,9 @@
+	/**
+	 * Store a newly created resource in storage.
+	 *
+	 * @return Response
+	 */
+	public function store()
+	{
+		//
+	}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/update.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/update.stub b/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/update.stub
new file mode 100755
index 0000000..e8e6c06
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Generators/stubs/update.stub
@@ -0,0 +1,10 @@
+	/**
+	 * Update the specified resource in storage.
+	 *
+	 * @param  int  $id
+	 * @return Response
+	 */
+	public function update($id)
+	{
+		//
+	}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Matching/HostValidator.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Matching/HostValidator.php b/vendor/laravel/framework/src/Illuminate/Routing/Matching/HostValidator.php
new file mode 100644
index 0000000..be14f00
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Matching/HostValidator.php
@@ -0,0 +1,22 @@
+<?php namespace Illuminate\Routing\Matching;
+
+use Illuminate\Http\Request;
+use Illuminate\Routing\Route;
+
+class HostValidator implements ValidatorInterface {
+
+	/**
+	 * Validate a given rule against a route and request.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return bool
+	 */
+	public function matches(Route $route, Request $request)
+	{
+		if (is_null($route->getCompiled()->getHostRegex())) return true;
+
+		return preg_match($route->getCompiled()->getHostRegex(), $request->getHost());
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Matching/MethodValidator.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Matching/MethodValidator.php b/vendor/laravel/framework/src/Illuminate/Routing/Matching/MethodValidator.php
new file mode 100644
index 0000000..211bc30
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Matching/MethodValidator.php
@@ -0,0 +1,20 @@
+<?php namespace Illuminate\Routing\Matching;
+
+use Illuminate\Http\Request;
+use Illuminate\Routing\Route;
+
+class MethodValidator implements ValidatorInterface {
+
+	/**
+	 * Validate a given rule against a route and request.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return bool
+	 */
+	public function matches(Route $route, Request $request)
+	{
+		return in_array($request->getMethod(), $route->methods());
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Matching/SchemeValidator.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Matching/SchemeValidator.php b/vendor/laravel/framework/src/Illuminate/Routing/Matching/SchemeValidator.php
new file mode 100644
index 0000000..009bb94
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Matching/SchemeValidator.php
@@ -0,0 +1,29 @@
+<?php namespace Illuminate\Routing\Matching;
+
+use Illuminate\Http\Request;
+use Illuminate\Routing\Route;
+
+class SchemeValidator implements ValidatorInterface {
+
+	/**
+	 * Validate a given rule against a route and request.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return bool
+	 */
+	public function matches(Route $route, Request $request)
+	{
+		if ($route->httpOnly())
+		{
+			return ! $request->secure();
+		}
+		elseif ($route->secure())
+		{
+			return $request->secure();
+		}
+
+		return true;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Matching/UriValidator.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Matching/UriValidator.php b/vendor/laravel/framework/src/Illuminate/Routing/Matching/UriValidator.php
new file mode 100644
index 0000000..b0b4302
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Matching/UriValidator.php
@@ -0,0 +1,22 @@
+<?php namespace Illuminate\Routing\Matching;
+
+use Illuminate\Http\Request;
+use Illuminate\Routing\Route;
+
+class UriValidator implements ValidatorInterface {
+
+	/**
+	 * Validate a given rule against a route and request.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return bool
+	 */
+	public function matches(Route $route, Request $request)
+	{
+		$path = $request->path() == '/' ? '/' : '/'.$request->path();
+
+		return preg_match($route->getCompiled()->getRegex(), rawurldecode($path));
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Matching/ValidatorInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Matching/ValidatorInterface.php b/vendor/laravel/framework/src/Illuminate/Routing/Matching/ValidatorInterface.php
new file mode 100644
index 0000000..65e5638
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Matching/ValidatorInterface.php
@@ -0,0 +1,17 @@
+<?php namespace Illuminate\Routing\Matching;
+
+use Illuminate\Http\Request;
+use Illuminate\Routing\Route;
+
+interface ValidatorInterface {
+
+	/**
+	 * Validate a given rule against a route and request.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return bool
+	 */
+	public function matches(Route $route, Request $request);
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Redirector.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Redirector.php b/vendor/laravel/framework/src/Illuminate/Routing/Redirector.php
new file mode 100755
index 0000000..2c4b7a8
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Redirector.php
@@ -0,0 +1,219 @@
+<?php namespace Illuminate\Routing;
+
+use Illuminate\Http\RedirectResponse;
+use Illuminate\Session\Store as SessionStore;
+
+class Redirector {
+
+	/**
+	 * The URL generator instance.
+	 *
+	 * @var \Illuminate\Routing\UrlGenerator
+	 */
+	protected $generator;
+
+	/**
+	 * The session store instance.
+	 *
+	 * @var \Illuminate\Session\Store
+	 */
+	protected $session;
+
+	/**
+	 * Create a new Redirector instance.
+	 *
+	 * @param  \Illuminate\Routing\UrlGenerator  $generator
+	 * @return void
+	 */
+	public function __construct(UrlGenerator $generator)
+	{
+		$this->generator = $generator;
+	}
+
+	/**
+	 * Create a new redirect response to the "home" route.
+	 *
+	 * @param  int  $status
+	 * @return \Illuminate\Http\RedirectResponse
+	 */
+	public function home($status = 302)
+	{
+		return $this->to($this->generator->route('home'), $status);
+	}
+
+	/**
+	 * Create a new redirect response to the previous location.
+	 *
+	 * @param  int    $status
+	 * @param  array  $headers
+	 * @return \Illuminate\Http\RedirectResponse
+	 */
+	public function back($status = 302, $headers = array())
+	{
+		$back = $this->generator->getRequest()->headers->get('referer');
+
+		return $this->createRedirect($back, $status, $headers);
+	}
+
+	/**
+	 * Create a new redirect response to the current URI.
+	 *
+	 * @param  int    $status
+	 * @param  array  $headers
+	 * @return \Illuminate\Http\RedirectResponse
+	 */
+	public function refresh($status = 302, $headers = array())
+	{
+		return $this->to($this->generator->getRequest()->path(), $status, $headers);
+	}
+
+	/**
+	 * Create a new redirect response, while putting the current URL in the session.
+	 *
+	 * @param  string  $path
+	 * @param  int     $status
+	 * @param  array   $headers
+	 * @param  bool    $secure
+	 * @return \Illuminate\Http\RedirectResponse
+	 */
+	public function guest($path, $status = 302, $headers = array(), $secure = null)
+	{
+		$this->session->put('url.intended', $this->generator->full());
+
+		return $this->to($path, $status, $headers, $secure);
+	}
+
+	/**
+	 * Create a new redirect response to the previously intended location.
+	 *
+	 * @param  string  $default
+	 * @param  int     $status
+	 * @param  array   $headers
+	 * @param  bool    $secure
+	 * @return \Illuminate\Http\RedirectResponse
+	 */
+	public function intended($default = '/', $status = 302, $headers = array(), $secure = null)
+	{
+		$path = $this->session->pull('url.intended', $default);
+
+		return $this->to($path, $status, $headers, $secure);
+	}
+
+	/**
+	 * Create a new redirect response to the given path.
+	 *
+	 * @param  string  $path
+	 * @param  int     $status
+	 * @param  array   $headers
+	 * @param  bool    $secure
+	 * @return \Illuminate\Http\RedirectResponse
+	 */
+	public function to($path, $status = 302, $headers = array(), $secure = null)
+	{
+		$path = $this->generator->to($path, array(), $secure);
+
+		return $this->createRedirect($path, $status, $headers);
+	}
+
+	/**
+	 * Create a new redirect response to an external URL (no validation).
+	 *
+	 * @param  string  $path
+	 * @param  int     $status
+	 * @param  array   $headers
+	 * @return \Illuminate\Http\RedirectResponse
+	 */
+	public function away($path, $status = 302, $headers = array())
+	{
+		return $this->createRedirect($path, $status, $headers);
+	}
+
+	/**
+	 * Create a new redirect response to the given HTTPS path.
+	 *
+	 * @param  string  $path
+	 * @param  int     $status
+	 * @param  array   $headers
+	 * @return \Illuminate\Http\RedirectResponse
+	 */
+	public function secure($path, $status = 302, $headers = array())
+	{
+		return $this->to($path, $status, $headers, true);
+	}
+
+	/**
+	 * Create a new redirect response to a named route.
+	 *
+	 * @param  string  $route
+	 * @param  array   $parameters
+	 * @param  int     $status
+	 * @param  array   $headers
+	 * @return \Illuminate\Http\RedirectResponse
+	 */
+	public function route($route, $parameters = array(), $status = 302, $headers = array())
+	{
+		$path = $this->generator->route($route, $parameters);
+
+		return $this->to($path, $status, $headers);
+	}
+
+	/**
+	 * Create a new redirect response to a controller action.
+	 *
+	 * @param  string  $action
+	 * @param  array   $parameters
+	 * @param  int     $status
+	 * @param  array   $headers
+	 * @return \Illuminate\Http\RedirectResponse
+	 */
+	public function action($action, $parameters = array(), $status = 302, $headers = array())
+	{
+		$path = $this->generator->action($action, $parameters);
+
+		return $this->to($path, $status, $headers);
+	}
+
+	/**
+	 * Create a new redirect response.
+	 *
+	 * @param  string  $path
+	 * @param  int     $status
+	 * @param  array   $headers
+	 * @return \Illuminate\Http\RedirectResponse
+	 */
+	protected function createRedirect($path, $status, $headers)
+	{
+		$redirect = new RedirectResponse($path, $status, $headers);
+
+		if (isset($this->session))
+		{
+			$redirect->setSession($this->session);
+		}
+
+		$redirect->setRequest($this->generator->getRequest());
+
+		return $redirect;
+	}
+
+	/**
+	 * Get the URL generator instance.
+	 *
+	 * @return  \Illuminate\Routing\UrlGenerator
+	 */
+	public function getUrlGenerator()
+	{
+		return $this->generator;
+	}
+
+	/**
+	 * Set the active session store.
+	 *
+	 * @param  \Illuminate\Session\Store  $session
+	 * @return void
+	 */
+	public function setSession(SessionStore $session)
+	{
+		$this->session = $session;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Route.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Route.php b/vendor/laravel/framework/src/Illuminate/Routing/Route.php
new file mode 100755
index 0000000..093014f
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Route.php
@@ -0,0 +1,814 @@
+<?php namespace Illuminate\Routing;
+
+use Illuminate\Http\Request;
+use Illuminate\Routing\Matching\UriValidator;
+use Illuminate\Routing\Matching\HostValidator;
+use Illuminate\Routing\Matching\MethodValidator;
+use Illuminate\Routing\Matching\SchemeValidator;
+use Symfony\Component\Routing\Route as SymfonyRoute;
+
+class Route {
+
+	/**
+	 * The URI pattern the route responds to.
+	 *
+	 * @var string
+	 */
+	protected $uri;
+
+	/**
+	 * The HTTP methods the route responds to.
+	 *
+	 * @var array
+	 */
+	protected $methods;
+
+	/**
+	 * The route action array.
+	 *
+	 * @var array
+	 */
+	protected $action;
+
+	/**
+	 * The default values for the route.
+	 *
+	 * @var array
+	 */
+	protected $defaults = array();
+
+	/**
+	 * The regular expression requirements.
+	 *
+	 * @var array
+	 */
+	protected $wheres = array();
+
+	/**
+	 * The array of matched parameters.
+	 *
+	 * @var array
+	 */
+	protected $parameters;
+
+	/**
+	 * The parameter names for the route.
+	 *
+	 * @var array|null
+	 */
+	protected $parameterNames;
+
+	/**
+	 * The compiled version of the route.
+	 *
+	 * @var \Symfony\Component\Routing\CompiledRoute
+	 */
+	protected $compiled;
+
+	/**
+	 * The validators used by the routes.
+	 *
+	 * @var array
+	 */
+	protected static $validators;
+
+	/**
+	 * Create a new Route instance.
+	 *
+	 * @param  array   $methods
+	 * @param  string  $uri
+	 * @param  \Closure|array  $action
+	 * @return void
+	 */
+	public function __construct($methods, $uri, $action)
+	{
+		$this->uri = $uri;
+		$this->methods = (array) $methods;
+		$this->action = $this->parseAction($action);
+
+		if (in_array('GET', $this->methods) && ! in_array('HEAD', $this->methods))
+		{
+			$this->methods[] = 'HEAD';
+		}
+
+		if (isset($this->action['prefix']))
+		{
+			$this->prefix($this->action['prefix']);
+		}
+	}
+
+	/**
+	 * Run the route action and return the response.
+	 *
+	 * @return mixed
+	 */
+	public function run()
+	{
+		$parameters = array_filter($this->parameters(), function($p) { return isset($p); });
+
+		return call_user_func_array($this->action['uses'], $parameters);
+	}
+
+	/**
+	 * Determine if the route matches given request.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @param  bool  $includingMethod
+	 * @return bool
+	 */
+	public function matches(Request $request, $includingMethod = true)
+	{
+		$this->compileRoute();
+
+		foreach ($this->getValidators() as $validator)
+		{
+			if ( ! $includingMethod && $validator instanceof MethodValidator) continue;
+
+			if ( ! $validator->matches($this, $request)) return false;
+		}
+
+		return true;
+	}
+
+	/**
+	 * Compile the route into a Symfony CompiledRoute instance.
+	 *
+	 * @return void
+	 */
+	protected function compileRoute()
+	{
+		$optionals = $this->extractOptionalParameters();
+
+		$uri = preg_replace('/\{(\w+?)\?\}/', '{$1}', $this->uri);
+
+		$this->compiled = with(
+
+			new SymfonyRoute($uri, $optionals, $this->wheres, array(), $this->domain() ?: '')
+
+		)->compile();
+	}
+
+	/**
+	 * Get the optional parameters for the route.
+	 *
+	 * @return array
+	 */
+	protected function extractOptionalParameters()
+	{
+		preg_match_all('/\{(\w+?)\?\}/', $this->uri, $matches);
+
+		return isset($matches[1]) ? array_fill_keys($matches[1], null) : [];
+	}
+
+	/**
+	 * Get the "before" filters for the route.
+	 *
+	 * @return array
+	 */
+	public function beforeFilters()
+	{
+		if ( ! isset($this->action['before'])) return array();
+
+		return $this->parseFilters($this->action['before']);
+	}
+
+	/**
+	 * Get the "after" filters for the route.
+	 *
+	 * @return array
+	 */
+	public function afterFilters()
+	{
+		if ( ! isset($this->action['after'])) return array();
+
+		return $this->parseFilters($this->action['after']);
+	}
+
+	/**
+	 * Parse the given filter string.
+	 *
+	 * @param  string  $filters
+	 * @return array
+	 */
+	public static function parseFilters($filters)
+	{
+		return array_build(static::explodeFilters($filters), function($key, $value)
+		{
+			return Route::parseFilter($value);
+		});
+	}
+
+	/**
+	 * Turn the filters into an array if they aren't already.
+	 *
+	 * @param  array|string  $filters
+	 * @return array
+	 */
+	protected static function explodeFilters($filters)
+	{
+		if (is_array($filters)) return static::explodeArrayFilters($filters);
+
+		return array_map('trim', explode('|', $filters));
+	}
+
+	/**
+	 * Flatten out an array of filter declarations.
+	 *
+	 * @param  array  $filters
+	 * @return array
+	 */
+	protected static function explodeArrayFilters(array $filters)
+	{
+		$results = array();
+
+		foreach ($filters as $filter)
+		{
+			$results = array_merge($results, array_map('trim', explode('|', $filter)));
+		}
+
+		return $results;
+	}
+
+	/**
+	 * Parse the given filter into name and parameters.
+	 *
+	 * @param  string  $filter
+	 * @return array
+	 */
+	public static function parseFilter($filter)
+	{
+		if ( ! str_contains($filter, ':')) return array($filter, array());
+
+		return static::parseParameterFilter($filter);
+	}
+
+	/**
+	 * Parse a filter with parameters.
+	 *
+	 * @param  string  $filter
+	 * @return array
+	 */
+	protected static function parseParameterFilter($filter)
+	{
+		list($name, $parameters) = explode(':', $filter, 2);
+
+		return array($name, explode(',', $parameters));
+	}
+
+	/**
+	 * Get a given parameter from the route.
+	 *
+	 * @param  string  $name
+	 * @param  mixed   $default
+	 * @return string
+	 */
+	public function getParameter($name, $default = null)
+	{
+		return $this->parameter($name, $default);
+	}
+
+	/**
+	 * Get a given parameter from the route.
+	 *
+	 * @param  string  $name
+	 * @param  mixed   $default
+	 * @return string
+	 */
+	public function parameter($name, $default = null)
+	{
+		return array_get($this->parameters(), $name, $default);
+	}
+
+	/**
+	 * Set a parameter to the given value.
+	 *
+	 * @param  string  $name
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function setParameter($name, $value)
+	{
+		$this->parameters();
+
+		$this->parameters[$name] = $value;
+	}
+
+	/**
+	 * Unset a parameter on the route if it is set.
+	 *
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function forgetParameter($name)
+	{
+		$this->parameters();
+
+		unset($this->parameters[$name]);
+	}
+
+	/**
+	 * Get the key / value list of parameters for the route.
+	 *
+	 * @return array
+	 *
+	 * @throws \LogicException
+	 */
+	public function parameters()
+	{
+		if (isset($this->parameters))
+		{
+			return array_map(function($value)
+			{
+				return is_string($value) ? rawurldecode($value) : $value;
+
+			}, $this->parameters);
+		}
+
+		throw new \LogicException("Route is not bound.");
+	}
+
+	/**
+	 * Get the key / value list of parameters without null values.
+	 *
+	 * @return array
+	 */
+	public function parametersWithoutNulls()
+	{
+		return array_filter($this->parameters(), function($p) { return ! is_null($p); });
+	}
+
+	/**
+	 * Get all of the parameter names for the route.
+	 *
+	 * @return array
+	 */
+	public function parameterNames()
+	{
+		if (isset($this->parameterNames)) return $this->parameterNames;
+
+		return $this->parameterNames = $this->compileParameterNames();
+	}
+
+	/**
+	 * Get the parameter names for the route.
+	 *
+	 * @return array
+	 */
+	protected function compileParameterNames()
+	{
+		preg_match_all('/\{(.*?)\}/', $this->domain().$this->uri, $matches);
+
+		return array_map(function($m) { return trim($m, '?'); }, $matches[1]);
+	}
+
+	/**
+	 * Bind the route to a given request for execution.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return $this
+	 */
+	public function bind(Request $request)
+	{
+		$this->compileRoute();
+
+		$this->bindParameters($request);
+
+		return $this;
+	}
+
+	/**
+	 * Extract the parameter list from the request.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return array
+	 */
+	public function bindParameters(Request $request)
+	{
+		// If the route has a regular expression for the host part of the URI, we will
+		// compile that and get the parameter matches for this domain. We will then
+		// merge them into this parameters array so that this array is completed.
+		$params = $this->matchToKeys(
+
+			array_slice($this->bindPathParameters($request), 1)
+
+		);
+
+		// If the route has a regular expression for the host part of the URI, we will
+		// compile that and get the parameter matches for this domain. We will then
+		// merge them into this parameters array so that this array is completed.
+		if ( ! is_null($this->compiled->getHostRegex()))
+		{
+			$params = $this->bindHostParameters(
+				$request, $params
+			);
+		}
+
+		return $this->parameters = $this->replaceDefaults($params);
+	}
+
+	/**
+	 * Get the parameter matches for the path portion of the URI.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return array
+	 */
+	protected function bindPathParameters(Request $request)
+	{
+		preg_match($this->compiled->getRegex(), '/'.$request->decodedPath(), $matches);
+
+		return $matches;
+	}
+
+	/**
+	 * Extract the parameter list from the host part of the request.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @param  array  $parameters
+	 * @return array
+	 */
+	protected function bindHostParameters(Request $request, $parameters)
+	{
+		preg_match($this->compiled->getHostRegex(), $request->getHost(), $matches);
+
+		return array_merge($this->matchToKeys(array_slice($matches, 1)), $parameters);
+	}
+
+	/**
+	 * Combine a set of parameter matches with the route's keys.
+	 *
+	 * @param  array  $matches
+	 * @return array
+	 */
+	protected function matchToKeys(array $matches)
+	{
+		if (count($this->parameterNames()) == 0) return array();
+
+		$parameters = array_intersect_key($matches, array_flip($this->parameterNames()));
+
+		return array_filter($parameters, function($value)
+		{
+			return is_string($value) && strlen($value) > 0;
+		});
+	}
+
+	/**
+	 * Replace null parameters with their defaults.
+	 *
+	 * @param  array  $parameters
+	 * @return array
+	 */
+	protected function replaceDefaults(array $parameters)
+	{
+		foreach ($parameters as $key => &$value)
+		{
+			$value = isset($value) ? $value : array_get($this->defaults, $key);
+		}
+
+		return $parameters;
+	}
+
+	/**
+	 * Parse the route action into a standard array.
+	 *
+	 * @param  callable|array  $action
+	 * @return array
+	 */
+	protected function parseAction($action)
+	{
+		// If the action is already a Closure instance, we will just set that instance
+		// as the "uses" property, because there is nothing else we need to do when
+		// it is available. Otherwise we will need to find it in the action list.
+		if (is_callable($action))
+		{
+			return array('uses' => $action);
+		}
+
+		// If no "uses" property has been set, we will dig through the array to find a
+		// Closure instance within this list. We will set the first Closure we come
+		// across into the "uses" property that will get fired off by this route.
+		elseif ( ! isset($action['uses']))
+		{
+			$action['uses'] = $this->findClosure($action);
+		}
+
+		return $action;
+	}
+
+	/**
+	 * Find the Closure in an action array.
+	 *
+	 * @param  array  $action
+	 * @return \Closure
+	 */
+	protected function findClosure(array $action)
+	{
+		return array_first($action, function($key, $value)
+		{
+			return is_callable($value);
+		});
+	}
+
+	/**
+	 * Get the route validators for the instance.
+	 *
+	 * @return array
+	 */
+	public static function getValidators()
+	{
+		if (isset(static::$validators)) return static::$validators;
+
+		// To match the route, we will use a chain of responsibility pattern with the
+		// validator implementations. We will spin through each one making sure it
+		// passes and then we will know if the route as a whole matches request.
+		return static::$validators = array(
+			new MethodValidator, new SchemeValidator,
+			new HostValidator, new UriValidator,
+		);
+	}
+
+	/**
+	 * Add before filters to the route.
+	 *
+	 * @param  string  $filters
+	 * @return $this
+	 */
+	public function before($filters)
+	{
+		return $this->addFilters('before', $filters);
+	}
+
+	/**
+	 * Add after filters to the route.
+	 *
+	 * @param  string  $filters
+	 * @return $this
+	 */
+	public function after($filters)
+	{
+		return $this->addFilters('after', $filters);
+	}
+
+	/**
+	 * Add the given filters to the route by type.
+	 *
+	 * @param  string  $type
+	 * @param  string  $filters
+	 * @return $this
+	 */
+	protected function addFilters($type, $filters)
+	{
+		$filters = static::explodeFilters($filters);
+
+		if (isset($this->action[$type]))
+		{
+			$existing = static::explodeFilters($this->action[$type]);
+
+			$this->action[$type] = array_merge($existing, $filters);
+		}
+		else
+		{
+			$this->action[$type] = $filters;
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Set a default value for the route.
+	 *
+	 * @param  string  $key
+	 * @param  mixed  $value
+	 * @return $this
+	 */
+	public function defaults($key, $value)
+	{
+		$this->defaults[$key] = $value;
+
+		return $this;
+	}
+
+	/**
+	 * Set a regular expression requirement on the route.
+	 *
+	 * @param  array|string  $name
+	 * @param  string  $expression
+	 * @return $this
+	 */
+	public function where($name, $expression = null)
+	{
+		foreach ($this->parseWhere($name, $expression) as $name => $expression)
+		{
+			$this->wheres[$name] = $expression;
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Parse arguments to the where method into an array.
+	 *
+	 * @param  array|string  $name
+	 * @param  string  $expression
+	 * @return array
+	 */
+	protected function parseWhere($name, $expression)
+	{
+		return is_array($name) ? $name : array($name => $expression);
+	}
+
+	/**
+	 * Set a list of regular expression requirements on the route.
+	 *
+	 * @param  array  $wheres
+	 * @return $this
+	 */
+	protected function whereArray(array $wheres)
+	{
+		foreach ($wheres as $name => $expression)
+		{
+			$this->where($name, $expression);
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Add a prefix to the route URI.
+	 *
+	 * @param  string  $prefix
+	 * @return $this
+	 */
+	public function prefix($prefix)
+	{
+		$this->uri = trim($prefix, '/').'/'.trim($this->uri, '/');
+
+		return $this;
+	}
+
+	/**
+	 * Get the URI associated with the route.
+	 *
+	 * @return string
+	 */
+	public function getPath()
+	{
+		return $this->uri();
+	}
+
+	/**
+	 * Get the URI associated with the route.
+	 *
+	 * @return string
+	 */
+	public function uri()
+	{
+		return $this->uri;
+	}
+
+	/**
+	 * Get the HTTP verbs the route responds to.
+	 *
+	 * @return array
+	 */
+	public function getMethods()
+	{
+		return $this->methods();
+	}
+
+	/**
+	 * Get the HTTP verbs the route responds to.
+	 *
+	 * @return array
+	 */
+	public function methods()
+	{
+		return $this->methods;
+	}
+
+	/**
+	 * Determine if the route only responds to HTTP requests.
+	 *
+	 * @return bool
+	 */
+	public function httpOnly()
+	{
+		return in_array('http', $this->action, true);
+	}
+
+	/**
+	 * Determine if the route only responds to HTTPS requests.
+	 *
+	 * @return bool
+	 */
+	public function httpsOnly()
+	{
+		return $this->secure();
+	}
+
+	/**
+	 * Determine if the route only responds to HTTPS requests.
+	 *
+	 * @return bool
+	 */
+	public function secure()
+	{
+		return in_array('https', $this->action, true);
+	}
+
+	/**
+	 * Get the domain defined for the route.
+	 *
+	 * @return string|null
+	 */
+	public function domain()
+	{
+		return isset($this->action['domain']) ? $this->action['domain'] : null;
+	}
+
+	/**
+	 * Get the URI that the route responds to.
+	 *
+	 * @return string
+	 */
+	public function getUri()
+	{
+		return $this->uri;
+	}
+
+	/**
+	 * Set the URI that the route responds to.
+	 *
+	 * @param  string  $uri
+	 * @return \Illuminate\Routing\Route
+	 */
+	public function setUri($uri)
+	{
+		$this->uri = $uri;
+
+		return $this;
+	}
+
+	/**
+	 * Get the prefix of the route instance.
+	 *
+	 * @return string
+	 */
+	public function getPrefix()
+	{
+		return isset($this->action['prefix']) ? $this->action['prefix'] : null;
+	}
+
+	/**
+	 * Get the name of the route instance.
+	 *
+	 * @return string
+	 */
+	public function getName()
+	{
+		return isset($this->action['as']) ? $this->action['as'] : null;
+	}
+
+	/**
+	 * Get the action name for the route.
+	 *
+	 * @return string
+	 */
+	public function getActionName()
+	{
+		return isset($this->action['controller']) ? $this->action['controller'] : 'Closure';
+	}
+
+	/**
+	 * Get the action array for the route.
+	 *
+	 * @return array
+	 */
+	public function getAction()
+	{
+		return $this->action;
+	}
+
+	/**
+	 * Set the action array for the route.
+	 *
+	 * @param  array  $action
+	 * @return $this
+	 */
+	public function setAction(array $action)
+	{
+		$this->action = $action;
+
+		return $this;
+	}
+
+	/**
+	 * Get the compiled version of the route.
+	 *
+	 * @return \Symfony\Component\Routing\CompiledRoute
+	 */
+	public function getCompiled()
+	{
+		return $this->compiled;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php
new file mode 100644
index 0000000..abfea49
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php
@@ -0,0 +1,305 @@
+<?php namespace Illuminate\Routing;
+
+use Countable;
+use ArrayIterator;
+use IteratorAggregate;
+use Illuminate\Http\Request;
+use Illuminate\Http\Response;
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
+use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
+
+class RouteCollection implements Countable, IteratorAggregate {
+
+	/**
+	 * An array of the routes keyed by method.
+	 *
+	 * @var array
+	 */
+	protected $routes = array();
+
+	/**
+	 * An flattened array of all of the routes.
+	 *
+	 * @var array
+	 */
+	protected $allRoutes = array();
+
+	/**
+	 * A look-up table of routes by their names.
+	 *
+	 * @var array
+	 */
+	protected $nameList = array();
+
+	/**
+	 * A look-up table of routes by controller action.
+	 *
+	 * @var array
+	 */
+	protected $actionList = array();
+
+	/**
+	 * Add a Route instance to the collection.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @return \Illuminate\Routing\Route
+	 */
+	public function add(Route $route)
+	{
+		$this->addToCollections($route);
+
+		$this->addLookups($route);
+
+		return $route;
+	}
+
+	/**
+	 * Add the given route to the arrays of routes.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @return void
+	 */
+	protected function addToCollections($route)
+	{
+		$domainAndUri = $route->domain().$route->getUri();
+
+		foreach ($route->methods() as $method)
+		{
+			$this->routes[$method][$domainAndUri] = $route;
+		}
+
+		$this->allRoutes[$method.$domainAndUri] = $route;
+	}
+
+	/**
+	 * Add the route to any look-up tables if necessary.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @return void
+	 */
+	protected function addLookups($route)
+	{
+		// If the route has a name, we will add it to the name look-up table so that we
+		// will quickly be able to find any route associate with a name and not have
+		// to iterate through every route every time we need to perform a look-up.
+		$action = $route->getAction();
+
+		if (isset($action['as']))
+		{
+			$this->nameList[$action['as']] = $route;
+		}
+
+		// When the route is routing to a controller we will also store the action that
+		// is used by the route. This will let us reverse route to controllers while
+		// processing a request and easily generate URLs to the given controllers.
+		if (isset($action['controller']))
+		{
+			$this->addToActionList($action, $route);
+		}
+	}
+
+	/**
+	 * Add a route to the controller action dictionary.
+	 *
+	 * @param  array  $action
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @return void
+	 */
+	protected function addToActionList($action, $route)
+	{
+		if ( ! isset($this->actionList[$action['controller']]))
+		{
+			$this->actionList[$action['controller']] = $route;
+		}
+	}
+
+	/**
+	 * Find the first route matching a given request.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return \Illuminate\Routing\Route
+	 *
+	 * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
+	 */
+	public function match(Request $request)
+	{
+		$routes = $this->get($request->getMethod());
+
+		// First, we will see if we can find a matching route for this current request
+		// method. If we can, great, we can just return it so that it can be called
+		// by the consumer. Otherwise we will check for routes with another verb.
+		$route = $this->check($routes, $request);
+
+		if ( ! is_null($route))
+		{
+			return $route->bind($request);
+		}
+
+		// If no route was found, we will check if a matching is route is specified on
+		// another HTTP verb. If it is we will need to throw a MethodNotAllowed and
+		// inform the user agent of which HTTP verb it should use for this route.
+		$others = $this->checkForAlternateVerbs($request);
+
+		if (count($others) > 0)
+		{
+			return $this->getOtherMethodsRoute($request, $others);
+		}
+
+		throw new NotFoundHttpException;
+	}
+
+	/**
+	 * Determine if any routes match on another HTTP verb.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return array
+	 */
+	protected function checkForAlternateVerbs($request)
+	{
+		$methods = array_diff(Router::$verbs, array($request->getMethod()));
+
+		// Here we will spin through all verbs except for the current request verb and
+		// check to see if any routes respond to them. If they do, we will return a
+		// proper error response with the correct headers on the response string.
+		$others = array();
+
+		foreach ($methods as $method)
+		{
+			if ( ! is_null($this->check($this->get($method), $request, false)))
+			{
+				$others[] = $method;
+			}
+		}
+
+		return $others;
+	}
+
+	/**
+	 * Get a route (if necessary) that responds when other available methods are present.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @param  array  $others
+	 * @return \Illuminate\Routing\Route
+	 *
+	 * @throws \Symfony\Component\Routing\Exception\MethodNotAllowedHttpException
+	 */
+	protected function getOtherMethodsRoute($request, array $others)
+	{
+		if ($request->method() == 'OPTIONS')
+		{
+			return (new Route('OPTIONS', $request->path(), function() use ($others)
+			{
+				return new Response('', 200, array('Allow' => implode(',', $others)));
+
+			}))->bind($request);
+		}
+
+		$this->methodNotAllowed($others);
+	}
+
+	/**
+	 * Throw a method not allowed HTTP exception.
+	 *
+	 * @param  array  $others
+	 * @return void
+	 *
+	 * @throws \Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException
+	 */
+	protected function methodNotAllowed(array $others)
+	{
+		throw new MethodNotAllowedHttpException($others);
+	}
+
+	/**
+	 * Determine if a route in the array matches the request.
+	 *
+	 * @param  array  $routes
+	 * @param  \Illuminate\http\Request  $request
+	 * @param  bool  $includingMethod
+	 * @return \Illuminate\Routing\Route|null
+	 */
+	protected function check(array $routes, $request, $includingMethod = true)
+	{
+		return array_first($routes, function($key, $value) use ($request, $includingMethod)
+		{
+			return $value->matches($request, $includingMethod);
+		});
+	}
+
+	/**
+	 * Get all of the routes in the collection.
+	 *
+	 * @param  string|null  $method
+	 * @return array
+	 */
+	protected function get($method = null)
+	{
+		if (is_null($method)) return $this->getRoutes();
+
+		return array_get($this->routes, $method, array());
+	}
+
+	/**
+	 * Determine if the route collection contains a given named route.
+	 *
+	 * @param  string  $name
+	 * @return bool
+	 */
+	public function hasNamedRoute($name)
+	{
+		return ! is_null($this->getByName($name));
+	}
+
+	/**
+	 * Get a route instance by its name.
+	 *
+	 * @param  string  $name
+	 * @return \Illuminate\Routing\Route|null
+	 */
+	public function getByName($name)
+	{
+		return isset($this->nameList[$name]) ? $this->nameList[$name] : null;
+	}
+
+	/**
+	 * Get a route instance by its controller action.
+	 *
+	 * @param  string  $action
+	 * @return \Illuminate\Routing\Route|null
+	 */
+	public function getByAction($action)
+	{
+		return isset($this->actionList[$action]) ? $this->actionList[$action] : null;
+	}
+
+	/**
+	 * Get all of the routes in the collection.
+	 *
+	 * @return array
+	 */
+	public function getRoutes()
+	{
+		return array_values($this->allRoutes);
+	}
+
+	/**
+	 * Get an iterator for the items.
+	 *
+	 * @return \ArrayIterator
+	 */
+	public function getIterator()
+	{
+		return new ArrayIterator($this->getRoutes());
+	}
+
+	/**
+	 * Count the number of items in the collection.
+	 *
+	 * @return int
+	 */
+	public function count()
+	{
+		return count($this->getRoutes());
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/RouteFiltererInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteFiltererInterface.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteFiltererInterface.php
new file mode 100644
index 0000000..2cc0d12
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteFiltererInterface.php
@@ -0,0 +1,26 @@
+<?php namespace Illuminate\Routing;
+
+interface RouteFiltererInterface {
+
+	/**
+	 * Register a new filter with the router.
+	 *
+	 * @param  string  $name
+	 * @param  mixed  $callback
+	 * @return void
+	 */
+	public function filter($name, $callback);
+
+	/**
+	 * Call the given route filter.
+	 *
+	 * @param  string  $filter
+	 * @param  array  $parameters
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  \Illuminate\Http\Request  $request
+	 * @param  \Illuminate\Http\Response|null $response
+	 * @return mixed
+	 */
+	public function callRouteFilter($filter, $parameters, $route, $request, $response = null);
+
+}


[12/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/OptimizeCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/OptimizeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/OptimizeCommand.php
new file mode 100644
index 0000000..764b5fd
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/OptimizeCommand.php
@@ -0,0 +1,163 @@
+<?php namespace Illuminate\Foundation\Console;
+
+use Illuminate\Console\Command;
+use Illuminate\Foundation\Composer;
+use Illuminate\View\Engines\CompilerEngine;
+use ClassPreloader\Command\PreCompileCommand;
+use Symfony\Component\Console\Input\InputOption;
+
+class OptimizeCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'optimize';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = "Optimize the framework for better performance";
+
+	/**
+	 * The composer instance.
+	 *
+	 * @var \Illuminate\Foundation\Composer
+	 */
+	protected $composer;
+
+	/**
+	 * Create a new optimize command instance.
+	 *
+	 * @param  \Illuminate\Foundation\Composer  $composer
+	 * @return void
+	 */
+	public function __construct(Composer $composer)
+	{
+		parent::__construct();
+
+		$this->composer = $composer;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$this->info('Generating optimized class loader');
+
+		if ($this->option('psr'))
+		{
+			$this->composer->dumpAutoloads();
+		}
+		else
+		{
+			$this->composer->dumpOptimized();
+		}
+
+		if ($this->option('force') || ! $this->laravel['config']['app.debug'])
+		{
+			$this->info('Compiling common classes');
+
+			$this->compileClasses();
+
+			$this->info('Compiling views');
+
+			$this->compileViews();
+		}
+		else
+		{
+			$this->call('clear-compiled');
+		}
+	}
+
+	/**
+	 * Generate the compiled class file.
+	 *
+	 * @return void
+	 */
+	protected function compileClasses()
+	{
+		$this->registerClassPreloaderCommand();
+
+		$outputPath = $this->laravel['path.base'].'/bootstrap/compiled.php';
+
+		$this->callSilent('compile', array(
+			'--config' => implode(',', $this->getClassFiles()),
+			'--output' => $outputPath,
+			'--strip_comments' => 1,
+		));
+	}
+
+	/**
+	 * Get the classes that should be combined and compiled.
+	 *
+	 * @return array
+	 */
+	protected function getClassFiles()
+	{
+		$app = $this->laravel;
+
+		$core = require __DIR__.'/Optimize/config.php';
+
+		return array_merge($core, $this->laravel['config']['compile']);
+	}
+
+	/**
+	 * Register the pre-compiler command instance with Artisan.
+	 *
+	 * @return void
+	 */
+	protected function registerClassPreloaderCommand()
+	{
+		$this->getApplication()->add(new PreCompileCommand);
+	}
+
+	/**
+	 * Compile all view files.
+	 *
+	 * @return void
+	 */
+	protected function compileViews()
+	{
+		foreach ($this->laravel['view']->getFinder()->getPaths() as $path)
+		{
+			foreach ($this->laravel['files']->allFiles($path) as $file)
+			{
+				try
+				{
+					$engine = $this->laravel['view']->getEngineFromPath($file);
+				}
+				catch (\InvalidArgumentException $e)
+				{
+					continue;
+				}
+
+				if ($engine instanceof CompilerEngine)
+				{
+					$engine->getCompiler()->compile($file);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('force', null, InputOption::VALUE_NONE, 'Force the compiled class file to be written.'),
+
+			array('psr', null, InputOption::VALUE_NONE, 'Do not optimize Composer dump-autoload.'),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/RoutesCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/RoutesCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/RoutesCommand.php
new file mode 100755
index 0000000..cfcb0d6
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/RoutesCommand.php
@@ -0,0 +1,217 @@
+<?php namespace Illuminate\Foundation\Console;
+
+use Illuminate\Http\Request;
+use Illuminate\Routing\Route;
+use Illuminate\Routing\Router;
+use Illuminate\Console\Command;
+use Symfony\Component\Console\Input\InputOption;
+
+class RoutesCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'routes';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'List all registered routes';
+
+	/**
+	 * The router instance.
+	 *
+	 * @var \Illuminate\Routing\Router
+	 */
+	protected $router;
+
+	/**
+	 * An array of all the registered routes.
+	 *
+	 * @var \Illuminate\Routing\RouteCollection
+	 */
+	protected $routes;
+
+	/**
+	 * The table headers for the command.
+	 *
+	 * @var array
+	 */
+	protected $headers = array(
+		'Domain', 'URI', 'Name', 'Action', 'Before Filters', 'After Filters'
+	);
+
+	/**
+	 * Create a new route command instance.
+	 *
+	 * @param  \Illuminate\Routing\Router  $router
+	 * @return void
+	 */
+	public function __construct(Router $router)
+	{
+		parent::__construct();
+
+		$this->router = $router;
+		$this->routes = $router->getRoutes();
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		if (count($this->routes) == 0)
+		{
+			return $this->error("Your application doesn't have any routes.");
+		}
+
+		$this->displayRoutes($this->getRoutes());
+	}
+
+	/**
+	 * Compile the routes into a displayable format.
+	 *
+	 * @return array
+	 */
+	protected function getRoutes()
+	{
+		$results = array();
+
+		foreach ($this->routes as $route)
+		{
+			$results[] = $this->getRouteInformation($route);
+		}
+
+		return array_filter($results);
+	}
+
+	/**
+	 * Get the route information for a given route.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @return array
+	 */
+	protected function getRouteInformation(Route $route)
+	{
+		$uri = implode('|', $route->methods()).' '.$route->uri();
+
+		return $this->filterRoute(array(
+			'host'   => $route->domain(),
+			'uri'    => $uri,
+			'name'   => $route->getName(),
+			'action' => $route->getActionName(),
+			'before' => $this->getBeforeFilters($route),
+			'after'  => $this->getAfterFilters($route)
+		));
+	}
+
+	/**
+	 * Display the route information on the console.
+	 *
+	 * @param  array  $routes
+	 * @return void
+	 */
+	protected function displayRoutes(array $routes)
+	{
+		$this->table($this->headers, $routes);
+	}
+
+	/**
+	 * Get before filters
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @return string
+	 */
+	protected function getBeforeFilters($route)
+	{
+		$before = array_keys($route->beforeFilters());
+
+		$before = array_unique(array_merge($before, $this->getPatternFilters($route)));
+
+		return implode(', ', $before);
+	}
+
+	/**
+	 * Get all of the pattern filters matching the route.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @return array
+	 */
+	protected function getPatternFilters($route)
+	{
+		$patterns = array();
+
+		foreach ($route->methods() as $method)
+		{
+			// For each method supported by the route we will need to gather up the patterned
+			// filters for that method. We will then merge these in with the other filters
+			// we have already gathered up then return them back out to these consumers.
+			$inner = $this->getMethodPatterns($route->uri(), $method);
+
+			$patterns = array_merge($patterns, array_keys($inner));
+		}
+
+		return $patterns;
+	}
+
+	/**
+	 * Get the pattern filters for a given URI and method.
+	 *
+	 * @param  string  $uri
+	 * @param  string  $method
+	 * @return array
+	 */
+	protected function getMethodPatterns($uri, $method)
+	{
+		return $this->router->findPatternFilters(Request::create($uri, $method));
+	}
+
+	/**
+	 * Get after filters
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @return string
+	 */
+	protected function getAfterFilters($route)
+	{
+		return implode(', ', array_keys($route->afterFilters()));
+	}
+
+	/**
+	 * Filter the route by URI and / or name.
+	 *
+	 * @param  array  $route
+	 * @return array|null
+	 */
+	protected function filterRoute(array $route)
+	{
+		if (($this->option('name') && ! str_contains($route['name'], $this->option('name'))) ||
+			 $this->option('path') && ! str_contains($route['uri'], $this->option('path')))
+		{
+			return null;
+		}
+
+		return $route;
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('name', null, InputOption::VALUE_OPTIONAL, 'Filter the routes by name.'),
+
+			array('path', null, InputOption::VALUE_OPTIONAL, 'Filter the routes by path.'),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php
new file mode 100755
index 0000000..998105f
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php
@@ -0,0 +1,73 @@
+<?php namespace Illuminate\Foundation\Console;
+
+use Illuminate\Console\Command;
+use Symfony\Component\Console\Input\InputOption;
+
+class ServeCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'serve';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = "Serve the application on the PHP development server";
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$this->checkPhpVersion();
+
+		chdir($this->laravel['path.base']);
+
+		$host = $this->input->getOption('host');
+
+		$port = $this->input->getOption('port');
+
+		$public = $this->laravel['path.public'];
+
+		$this->info("Laravel development server started on http://{$host}:{$port}");
+
+		passthru('"'.PHP_BINARY.'"'." -S {$host}:{$port} -t \"{$public}\" server.php");
+	}
+
+	/**
+	 * Check the current PHP version is >= 5.4.
+	 *
+	 * @return void
+	 *
+	 * @throws \Exception
+	 */
+	protected function checkPhpVersion()
+	{
+		if (version_compare(PHP_VERSION, '5.4.0', '<'))
+		{
+			throw new \Exception('This PHP binary is not version 5.4 or greater.');
+		}
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('host', null, InputOption::VALUE_OPTIONAL, 'The host address to serve the application on.', 'localhost'),
+
+			array('port', null, InputOption::VALUE_OPTIONAL, 'The port to serve the application on.', 8000),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/TailCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/TailCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/TailCommand.php
new file mode 100644
index 0000000..031cd29
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/TailCommand.php
@@ -0,0 +1,165 @@
+<?php namespace Illuminate\Foundation\Console;
+
+use Illuminate\Console\Command;
+use Symfony\Component\Process\Process;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputArgument;
+
+class TailCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'tail';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = "Tail a log file on a remote server";
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$path = $this->getPath($this->argument('connection'));
+
+		if ($path)
+		{
+			$this->tailLogFile($path, $this->argument('connection'));
+		}
+		else
+		{
+			$this->error('Could not determine path to log file.');
+		}
+	}
+
+	/**
+	 * Tail the given log file for the connection.
+	 *
+	 * @param  string  $path
+	 * @param  string  $connection
+	 * @return void
+	 */
+	protected function tailLogFile($path, $connection)
+	{
+		if (is_null($connection))
+		{
+			$this->tailLocalLogs($path);
+		}
+		else
+		{
+			$this->tailRemoteLogs($path, $connection);
+		}
+	}
+
+	/**
+	 * Tail a local log file for the application.
+	 *
+	 * @param  string  $path
+	 * @return string
+	 */
+	protected function tailLocalLogs($path)
+	{
+		$output = $this->output;
+
+		$lines = $this->option('lines');
+
+		(new Process('tail -f -n '.$lines.' '.escapeshellarg($path)))->setTimeout(null)->run(function($type, $line) use ($output)
+		{
+			$output->write($line);
+		});
+	}
+
+	/**
+	 * Tail a remote log file at the given path and connection.
+	 *
+	 * @param  string  $path
+	 * @param  string  $connection
+	 * @return void
+	 */
+	protected function tailRemoteLogs($path, $connection)
+	{
+		$out = $this->output;
+
+		$lines = $this->option('lines');
+
+		$this->getRemote($connection)->run('tail -f -n '.$lines.' '.escapeshellarg($path), function($line) use ($out)
+		{
+			$out->write($line);
+		});
+	}
+
+	/**
+	 * Get a connection to the remote server.
+	 *
+	 * @param  string  $connection
+	 * @return \Illuminate\Remote\Connection
+	 */
+	protected function getRemote($connection)
+	{
+		return $this->laravel['remote']->connection($connection);
+	}
+
+	/**
+	 * Get the path to the Laravel log file.
+	 *
+	 * @param  string  $connection
+	 * @return string
+	 */
+	protected function getPath($connection)
+	{
+		if ($this->option('path')) return $this->option('path');
+
+		if (is_null($connection))
+		{
+			return storage_path('/logs/laravel.log');
+		}
+
+		return $this->getRoot($connection).str_replace(base_path(), '', storage_path()).'/logs/laravel.log';
+	}
+
+	/**
+	 * Get the path to the Laravel install root.
+	 *
+	 * @param  string  $connection
+	 * @return string
+	 */
+	protected function getRoot($connection)
+	{
+		return $this->laravel['config']['remote.connections.'.$connection.'.root'];
+	}
+
+	/**
+	 * Get the console command arguments.
+	 *
+	 * @return array
+	 */
+	protected function getArguments()
+	{
+		return array(
+			array('connection', InputArgument::OPTIONAL, 'The remote connection name'),
+		);
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('path', null, InputOption::VALUE_OPTIONAL, 'The fully qualified path to the log file.'),
+
+			array('lines', null, InputOption::VALUE_OPTIONAL, 'The number of lines to tail.', 20),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/TinkerCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/TinkerCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/TinkerCommand.php
new file mode 100755
index 0000000..58d4014
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/TinkerCommand.php
@@ -0,0 +1,125 @@
+<?php namespace Illuminate\Foundation\Console;
+
+use Boris\Boris;
+use Illuminate\Console\Command;
+
+class TinkerCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'tinker';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = "Interact with your application";
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		if ($this->supportsBoris())
+		{
+			$this->runBorisShell();
+		}
+		else
+		{
+			$this->comment('Full REPL not supported. Falling back to simple shell.');
+
+			$this->runPlainShell();
+		}
+	}
+
+	/**
+	 * Run the Boris REPL with the current context.
+	 *
+	 * @return void
+	 */
+	protected function runBorisShell()
+	{
+		$this->setupBorisErrorHandling();
+
+		(new Boris('> '))->start();
+	}
+
+	/**
+	 * Setup the Boris exception handling.
+	 *
+	 * @return void
+	 */
+	protected function setupBorisErrorHandling()
+	{
+		restore_error_handler(); restore_exception_handler();
+
+		$this->laravel->make('artisan')->setCatchExceptions(false);
+
+		$this->laravel->error(function() { return ''; });
+	}
+
+	/**
+	 * Run the plain Artisan tinker shell.
+	 *
+	 * @return void
+	 */
+	protected function runPlainShell()
+	{
+		$input = $this->prompt();
+
+		while ($input != 'quit')
+		{
+			// We will wrap the execution of the command in a try / catch block so we
+			// can easily display the errors in a convenient way instead of having
+			// them bubble back out to the CLI and stop the entire command loop.
+			try
+			{
+				if (starts_with($input, 'dump '))
+				{
+					$input = 'var_dump('.substr($input, 5).');';
+				}
+
+				eval($input);
+			}
+
+			// If an exception occurs, we will just display the message and keep this
+			// loop going so we can keep executing commands. However, when a fatal
+			// error occurs, we have no choice but to bail out of this routines.
+			catch (\Exception $e)
+			{
+				$this->error($e->getMessage());
+			}
+
+			$input = $this->prompt();
+		}
+	}
+
+	/**
+	 * Prompt the developer for a command.
+	 *
+	 * @return string
+	 */
+	protected function prompt()
+	{
+		$dialog = $this->getHelperSet()->get('dialog');
+
+		return $dialog->ask($this->output, "<info>></info>", null);
+	}
+
+	/**
+	 * Determine if the current environment supports Boris.
+	 *
+	 * @return bool
+	 */
+	protected function supportsBoris()
+	{
+		return extension_loaded('readline') && extension_loaded('posix') && extension_loaded('pcntl');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/UpCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/UpCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/UpCommand.php
new file mode 100755
index 0000000..dd84552
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/UpCommand.php
@@ -0,0 +1,33 @@
+<?php namespace Illuminate\Foundation\Console;
+
+use Illuminate\Console\Command;
+
+class UpCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'up';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = "Bring the application out of maintenance mode";
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		@unlink($this->laravel['config']['app.manifest'].'/down');
+
+		$this->info('Application is now live.');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/ViewPublishCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ViewPublishCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ViewPublishCommand.php
new file mode 100755
index 0000000..4353619
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ViewPublishCommand.php
@@ -0,0 +1,104 @@
+<?php namespace Illuminate\Foundation\Console;
+
+use Illuminate\Console\Command;
+use Illuminate\Foundation\ViewPublisher;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputArgument;
+
+class ViewPublishCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'view:publish';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = "Publish a package's views to the application";
+
+	/**
+	 * The view publisher instance.
+	 *
+	 * @var \Illuminate\Foundation\ViewPublisher
+	 */
+	protected $view;
+
+	/**
+	 * Create a new view publish command instance.
+	 *
+	 * @param  \Illuminate\Foundation\ViewPublisher  $view
+	 * @return void
+	 */
+	public function __construct(ViewPublisher $view)
+	{
+		parent::__construct();
+
+		$this->view = $view;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$package = $this->input->getArgument('package');
+
+		if ( ! is_null($path = $this->getPath()))
+		{
+			$this->view->publish($package, $path);
+		}
+		else
+		{
+			$this->view->publishPackage($package);
+		}
+
+		$this->output->writeln('<info>Views published for package:</info> '.$package);
+	}
+
+	/**
+	 * Get the specified path to the files.
+	 *
+	 * @return string
+	 */
+	protected function getPath()
+	{
+		$path = $this->input->getOption('path');
+
+		if ( ! is_null($path))
+		{
+			return $this->laravel['path.base'].'/'.$path;
+		}
+	}
+
+	/**
+	 * Get the console command arguments.
+	 *
+	 * @return array
+	 */
+	protected function getArguments()
+	{
+		return array(
+			array('package', InputArgument::REQUIRED, 'The name of the package being published.'),
+		);
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('path', null, InputOption::VALUE_OPTIONAL, 'The path to the source view files.', null),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/command.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/command.stub b/vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/command.stub
new file mode 100755
index 0000000..d48e675
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/command.stub
@@ -0,0 +1,67 @@
+<?php{{namespace}}
+
+use Illuminate\Console\Command;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputArgument;
+
+class {{class}} extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'command:name';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Command description.';
+
+	/**
+	 * Create a new command instance.
+	 *
+	 * @return void
+	 */
+	public function __construct()
+	{
+		parent::__construct();
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return mixed
+	 */
+	public function fire()
+	{
+		//
+	}
+
+	/**
+	 * Get the console command arguments.
+	 *
+	 * @return array
+	 */
+	protected function getArguments()
+	{
+		return array(
+			array('example', InputArgument::REQUIRED, 'An example argument.'),
+		);
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/EnvironmentDetector.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/EnvironmentDetector.php b/vendor/laravel/framework/src/Illuminate/Foundation/EnvironmentDetector.php
new file mode 100644
index 0000000..61ca8e2
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/EnvironmentDetector.php
@@ -0,0 +1,99 @@
+<?php namespace Illuminate\Foundation;
+
+use Closure;
+
+class EnvironmentDetector {
+
+	/**
+	 * Detect the application's current environment.
+	 *
+	 * @param  array|string  $environments
+	 * @param  array|null  $consoleArgs
+	 * @return string
+	 */
+	public function detect($environments, $consoleArgs = null)
+	{
+		if ($consoleArgs)
+		{
+			return $this->detectConsoleEnvironment($environments, $consoleArgs);
+		}
+
+		return $this->detectWebEnvironment($environments);
+	}
+
+	/**
+	 * Set the application environment for a web request.
+	 *
+	 * @param  array|string  $environments
+	 * @return string
+	 */
+	protected function detectWebEnvironment($environments)
+	{
+		// If the given environment is just a Closure, we will defer the environment check
+		// to the Closure the developer has provided, which allows them to totally swap
+		// the webs environment detection logic with their own custom Closure's code.
+		if ($environments instanceof Closure)
+		{
+			return call_user_func($environments);
+		}
+
+		foreach ($environments as $environment => $hosts)
+		{
+			// To determine the current environment, we'll simply iterate through the possible
+			// environments and look for the host that matches the host for this request we
+			// are currently processing here, then return back these environment's names.
+			foreach ((array) $hosts as $host)
+			{
+				if ($this->isMachine($host)) return $environment;
+			}
+		}
+
+		return 'production';
+	}
+
+	/**
+	 * Set the application environment from command-line arguments.
+	 *
+	 * @param  mixed   $environments
+	 * @param  array  $args
+	 * @return string
+	 */
+	protected function detectConsoleEnvironment($environments, array $args)
+	{
+		// First we will check if an environment argument was passed via console arguments
+		// and if it was that automatically overrides as the environment. Otherwise, we
+		// will check the environment as a "web" request like a typical HTTP request.
+		if ( ! is_null($value = $this->getEnvironmentArgument($args)))
+		{
+			return head(array_slice(explode('=', $value), 1));
+		}
+
+		return $this->detectWebEnvironment($environments);
+	}
+
+	/**
+	 * Get the environment argument from the console.
+	 *
+	 * @param  array  $args
+	 * @return string|null
+	 */
+	protected function getEnvironmentArgument(array $args)
+	{
+		return array_first($args, function($k, $v)
+		{
+			return starts_with($v, '--env');
+		});
+	}
+
+	/**
+	 * Determine if the name matches the machine name.
+	 *
+	 * @param  string  $name
+	 * @return bool
+	 */
+	public function isMachine($name)
+	{
+		return str_is($name, gethostname());
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/MigrationPublisher.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/MigrationPublisher.php b/vendor/laravel/framework/src/Illuminate/Foundation/MigrationPublisher.php
new file mode 100644
index 0000000..75faab3
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/MigrationPublisher.php
@@ -0,0 +1,131 @@
+<?php namespace Illuminate\Foundation;
+
+use Carbon\Carbon;
+use Illuminate\Filesystem\Filesystem;
+
+class MigrationPublisher {
+
+	/**
+	 * A cache of migrations at a given destination.
+	 *
+	 * @var array
+	 */
+	protected $existing = array();
+
+	/**
+	 * Create a new migration publisher instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @return void
+	 */
+	public function __construct(Filesystem $files)
+	{
+		$this->files = $files;
+	}
+
+	/**
+	 * Publish the given package's migrations.
+	 *
+	 * @param  string  $source
+	 * @param  string  $destination
+	 * @return array
+	 */
+	public function publish($source, $destination)
+	{
+		$add = 0;
+
+		$published = array();
+
+		foreach ($this->getFreshMigrations($source, $destination) as $file)
+		{
+			$add++;
+
+			$newName = $this->getNewMigrationName($file, $add);
+
+			$this->files->copy(
+				$file, $newName = $destination.'/'.$newName
+			);
+
+			$published[] = $newName;
+		}
+
+		return $published;
+	}
+
+	/**
+	 * Get the fresh migrations for the source.
+	 *
+	 * @param  string  $source
+	 * @param  string  $destination
+	 * @return array
+	 */
+	protected function getFreshMigrations($source, $destination)
+	{
+		return array_filter($this->getPackageMigrations($source), function($file) use ($destination)
+		{
+			return ! $this->migrationExists($file, $destination);
+		});
+	}
+
+	/**
+	 * Determine if the migration is already published.
+	 *
+	 * @param  string  $migration
+	 * @param  string  $destination
+	 * @return bool
+	 */
+	public function migrationExists($migration, $destination)
+	{
+		$existing = $this->getExistingMigrationNames($destination);
+
+		return in_array(substr(basename($migration), 18), $existing);
+	}
+
+	/**
+	 * Get the existing migration names from the destination.
+	 *
+	 * @param  string  $destination
+	 * @return array
+	 */
+	public function getExistingMigrationNames($destination)
+	{
+		if (isset($this->existing[$destination])) return $this->existing[$destination];
+
+		return $this->existing[$destination] = array_map(function($file)
+		{
+			return substr(basename($file), 18);
+
+		}, $this->files->files($destination));
+	}
+
+	/**
+	 * Get the file list from the source directory.
+	 *
+	 * @param  string  $source
+	 * @return array
+	 */
+	protected function getPackageMigrations($source)
+	{
+		$files = array_filter($this->files->files($source), function($file)
+		{
+			return ! starts_with($file, '.');
+		});
+
+		sort($files);
+
+		return $files;
+	}
+
+	/**
+	 * Get the new migration name.
+	 *
+	 * @param  string  $file
+	 * @param  int  $add
+	 * @return string
+	 */
+	protected function getNewMigrationName($file, $add)
+	{
+		return Carbon::now()->addSeconds($add)->format('Y_m_d_His').substr(basename($file), 17);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php b/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php
new file mode 100755
index 0000000..5944615
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php
@@ -0,0 +1,230 @@
+<?php namespace Illuminate\Foundation;
+
+use Illuminate\Filesystem\Filesystem;
+
+class ProviderRepository {
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * The path to the manifest.
+	 *
+	 * @var string
+	 */
+	protected $manifestPath;
+
+	/**
+	 * Default manifest structure.
+	 *
+	 * @var array
+	 */
+	protected $default = array('when' => array());
+
+	/**
+	 * Create a new service repository instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @param  string  $manifestPath
+	 * @return void
+	 */
+	public function __construct(Filesystem $files, $manifestPath)
+	{
+		$this->files = $files;
+		$this->manifestPath = $manifestPath;
+	}
+
+	/**
+	 * Register the application service providers.
+	 *
+	 * @param  \Illuminate\Foundation\Application  $app
+	 * @param  array  $providers
+	 * @return void
+	 */
+	public function load(Application $app, array $providers)
+	{
+		$manifest = $this->loadManifest();
+
+		// First we will load the service manifest, which contains information on all
+		// service providers registered with the application and which services it
+		// provides. This is used to know which services are "deferred" loaders.
+		if ($this->shouldRecompile($manifest, $providers))
+		{
+			$manifest = $this->compileManifest($app, $providers);
+		}
+
+		// If the application is running in the console, we will not lazy load any of
+		// the service providers. This is mainly because it's not as necessary for
+		// performance and also so any provided Artisan commands get registered.
+		if ($app->runningInConsole())
+		{
+			$manifest['eager'] = $manifest['providers'];
+		}
+
+		// Next, we will register events to load the providers for each of the events
+		// that it has requested. This allows the service provider to defer itself
+		// while still getting automatically loaded when a certain event occurs.
+		foreach ($manifest['when'] as $provider => $events)
+		{
+			$this->registerLoadEvents($app, $provider, $events);
+		}
+
+		// We will go ahead and register all of the eagerly loaded providers with the
+		// application so their services can be registered with the application as
+		// a provided service. Then we will set the deferred service list on it.
+		foreach ($manifest['eager'] as $provider)
+		{
+			$app->register($this->createProvider($app, $provider));
+		}
+
+		$app->setDeferredServices($manifest['deferred']);
+	}
+
+	/**
+	 * Register the load events for the given provider.
+	 *
+	 * @param  \Illuminate\Foundation\Application  $app
+	 * @param  string  $provider
+	 * @param  array  $events
+	 * @return void
+	 */
+	protected function registerLoadEvents(Application $app, $provider, array $events)
+	{
+		if (count($events) < 1) return;
+
+		$app->make('events')->listen($events, function() use ($app, $provider)
+		{
+			$app->register($provider);
+		});
+	}
+
+	/**
+	 * Compile the application manifest file.
+	 *
+	 * @param  \Illuminate\Foundation\Application  $app
+	 * @param  array  $providers
+	 * @return array
+	 */
+	protected function compileManifest(Application $app, $providers)
+	{
+		// The service manifest should contain a list of all of the providers for
+		// the application so we can compare it on each request to the service
+		// and determine if the manifest should be recompiled or is current.
+		$manifest = $this->freshManifest($providers);
+
+		foreach ($providers as $provider)
+		{
+			$instance = $this->createProvider($app, $provider);
+
+			// When recompiling the service manifest, we will spin through each of the
+			// providers and check if it's a deferred provider or not. If so we'll
+			// add it's provided services to the manifest and note the provider.
+			if ($instance->isDeferred())
+			{
+				foreach ($instance->provides() as $service)
+				{
+					$manifest['deferred'][$service] = $provider;
+				}
+
+				$manifest['when'][$provider] = $instance->when();
+			}
+
+			// If the service providers are not deferred, we will simply add it to an
+			// of eagerly loaded providers that will be registered with the app on
+			// each request to the applications instead of being lazy loaded in.
+			else
+			{
+				$manifest['eager'][] = $provider;
+			}
+		}
+
+		return $this->writeManifest($manifest);
+	}
+
+	/**
+	 * Create a new provider instance.
+	 *
+	 * @param  \Illuminate\Foundation\Application  $app
+	 * @param  string  $provider
+	 * @return \Illuminate\Support\ServiceProvider
+	 */
+	public function createProvider(Application $app, $provider)
+	{
+		return new $provider($app);
+	}
+
+	/**
+	 * Determine if the manifest should be compiled.
+	 *
+	 * @param  array  $manifest
+	 * @param  array  $providers
+	 * @return bool
+	 */
+	public function shouldRecompile($manifest, $providers)
+	{
+		return is_null($manifest) || $manifest['providers'] != $providers;
+	}
+
+	/**
+	 * Load the service provider manifest JSON file.
+	 *
+	 * @return array
+	 */
+	public function loadManifest()
+	{
+		$path = $this->manifestPath.'/services.json';
+
+		// The service manifest is a file containing a JSON representation of every
+		// service provided by the application and whether its provider is using
+		// deferred loading or should be eagerly loaded on each request to us.
+		if ($this->files->exists($path))
+		{
+			$manifest = json_decode($this->files->get($path), true);
+
+			return array_merge($this->default, $manifest);
+		}
+	}
+
+	/**
+	 * Write the service manifest file to disk.
+	 *
+	 * @param  array  $manifest
+	 * @return array
+	 */
+	public function writeManifest($manifest)
+	{
+		$path = $this->manifestPath.'/services.json';
+
+		$this->files->put($path, json_encode($manifest, JSON_PRETTY_PRINT));
+
+		return $manifest;
+	}
+
+	/**
+	 * Create a fresh manifest array.
+	 *
+	 * @param  array  $providers
+	 * @return array
+	 */
+	protected function freshManifest(array $providers)
+	{
+		list($eager, $deferred) = array(array(), array());
+
+		return compact('providers', 'eager', 'deferred');
+	}
+
+	/**
+	 * Get the filesystem instance.
+	 *
+	 * @return \Illuminate\Filesystem\Filesystem
+	 */
+	public function getFilesystem()
+	{
+		return $this->files;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ArtisanServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ArtisanServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ArtisanServiceProvider.php
new file mode 100755
index 0000000..2881bc7
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ArtisanServiceProvider.php
@@ -0,0 +1,58 @@
+<?php namespace Illuminate\Foundation\Providers;
+
+use Illuminate\Foundation\Artisan;
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Foundation\Console\TailCommand;
+use Illuminate\Foundation\Console\ChangesCommand;
+use Illuminate\Foundation\Console\EnvironmentCommand;
+
+class ArtisanServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('artisan', function($app)
+		{
+			return new Artisan($app);
+		});
+
+		$this->app->bindShared('command.tail', function()
+		{
+			return new TailCommand;
+		});
+
+		$this->app->bindShared('command.changes', function()
+		{
+			return new ChangesCommand;
+		});
+
+		$this->app->bindShared('command.environment', function()
+		{
+			return new EnvironmentCommand;
+		});
+
+		$this->commands('command.tail', 'command.changes', 'command.environment');
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('artisan', 'command.changes', 'command.environment');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Providers/CommandCreatorServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/CommandCreatorServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/CommandCreatorServiceProvider.php
new file mode 100755
index 0000000..07610a8
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/CommandCreatorServiceProvider.php
@@ -0,0 +1,42 @@
+<?php namespace Illuminate\Foundation\Providers;
+
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Foundation\Console\CommandMakeCommand;
+
+class CommandCreatorServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('command.command.make', function($app)
+		{
+			return new CommandMakeCommand($app['files']);
+		});
+
+		$this->commands('command.command.make');
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array(
+			'command.command.make',
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ComposerServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ComposerServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ComposerServiceProvider.php
new file mode 100755
index 0000000..570e22d
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ComposerServiceProvider.php
@@ -0,0 +1,46 @@
+<?php namespace Illuminate\Foundation\Providers;
+
+use Illuminate\Foundation\Composer;
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Foundation\Console\AutoloadCommand;
+
+class ComposerServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('composer', function($app)
+		{
+			return new Composer($app['files'], $app['path.base']);
+		});
+
+		$this->app->bindShared('command.dump-autoload', function($app)
+		{
+			return new AutoloadCommand($app['composer']);
+		});
+
+		$this->commands('command.dump-autoload');
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('composer', 'command.dump-autoload');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ConsoleSupportServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ConsoleSupportServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ConsoleSupportServiceProvider.php
new file mode 100644
index 0000000..307a39a
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ConsoleSupportServiceProvider.php
@@ -0,0 +1,73 @@
+<?php namespace Illuminate\Foundation\Providers;
+
+use Illuminate\Support\ServiceProvider;
+
+class ConsoleSupportServiceProvider extends ServiceProvider {
+
+	/**
+	 * The provider class names.
+	 *
+	 * @var array
+	 */
+	protected $providers = array(
+		'Illuminate\Foundation\Providers\CommandCreatorServiceProvider',
+		'Illuminate\Foundation\Providers\ComposerServiceProvider',
+		'Illuminate\Foundation\Providers\KeyGeneratorServiceProvider',
+		'Illuminate\Foundation\Providers\MaintenanceServiceProvider',
+		'Illuminate\Foundation\Providers\OptimizeServiceProvider',
+		'Illuminate\Foundation\Providers\PublisherServiceProvider',
+		'Illuminate\Foundation\Providers\RouteListServiceProvider',
+		'Illuminate\Foundation\Providers\ServerServiceProvider',
+		'Illuminate\Foundation\Providers\TinkerServiceProvider',
+		'Illuminate\Queue\FailConsoleServiceProvider',
+	);
+
+	/**
+	 * An array of the service provider instances.
+	 *
+	 * @var array
+	 */
+	protected $instances = array();
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->instances = array();
+
+		foreach ($this->providers as $provider)
+		{
+			$this->instances[] = $this->app->register($provider);
+		}
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		$provides = array();
+
+		foreach ($this->providers as $provider)
+		{
+			$instance = $this->app->resolveProviderClass($provider);
+
+			$provides = array_merge($provides, $instance->provides());
+		}
+
+		return $provides;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Providers/KeyGeneratorServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/KeyGeneratorServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/KeyGeneratorServiceProvider.php
new file mode 100755
index 0000000..755ac36
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/KeyGeneratorServiceProvider.php
@@ -0,0 +1,40 @@
+<?php namespace Illuminate\Foundation\Providers;
+
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Foundation\Console\KeyGenerateCommand;
+
+class KeyGeneratorServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('command.key.generate', function($app)
+		{
+			return new KeyGenerateCommand($app['files']);
+		});
+
+		$this->commands('command.key.generate');
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('command.key.generate');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Providers/MaintenanceServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/MaintenanceServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/MaintenanceServiceProvider.php
new file mode 100755
index 0000000..e64d47f
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/MaintenanceServiceProvider.php
@@ -0,0 +1,46 @@
+<?php namespace Illuminate\Foundation\Providers;
+
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Foundation\Console\UpCommand;
+use Illuminate\Foundation\Console\DownCommand;
+
+class MaintenanceServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('command.up', function()
+		{
+			return new UpCommand;
+		});
+
+		$this->app->bindShared('command.down', function()
+		{
+			return new DownCommand;
+		});
+
+		$this->commands('command.up', 'command.down');
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('command.up', 'command.down');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Providers/OptimizeServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/OptimizeServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/OptimizeServiceProvider.php
new file mode 100755
index 0000000..998c998
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/OptimizeServiceProvider.php
@@ -0,0 +1,66 @@
+<?php namespace Illuminate\Foundation\Providers;
+
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Foundation\Console\OptimizeCommand;
+use Illuminate\Foundation\Console\ClearCompiledCommand;
+
+class OptimizeServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->registerOptimizeCommand();
+
+		$this->registerClearCompiledCommand();
+
+		$this->commands('command.optimize', 'command.clear-compiled');
+	}
+
+	/**
+	 * Register the optimize command.
+	 *
+	 * @return void
+	 */
+	protected function registerOptimizeCommand()
+	{
+		$this->app->bindShared('command.optimize', function($app)
+		{
+			return new OptimizeCommand($app['composer']);
+		});
+	}
+
+	/**
+	 * Register the compiled file remover command.
+	 *
+	 * @return void
+	 */
+	protected function registerClearCompiledCommand()
+	{
+		$this->app->bindShared('command.clear-compiled', function()
+		{
+			return new ClearCompiledCommand;
+		});
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('command.optimize', 'command.clear-compiled');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Providers/PublisherServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/PublisherServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/PublisherServiceProvider.php
new file mode 100755
index 0000000..2d4496a
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/PublisherServiceProvider.php
@@ -0,0 +1,201 @@
+<?php namespace Illuminate\Foundation\Providers;
+
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Foundation\ViewPublisher;
+use Illuminate\Foundation\AssetPublisher;
+use Illuminate\Foundation\ConfigPublisher;
+use Illuminate\Foundation\MigrationPublisher;
+use Illuminate\Foundation\Console\ViewPublishCommand;
+use Illuminate\Foundation\Console\AssetPublishCommand;
+use Illuminate\Foundation\Console\ConfigPublishCommand;
+use Illuminate\Foundation\Console\MigratePublishCommand;
+
+class PublisherServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->registerAssetPublisher();
+
+		$this->registerConfigPublisher();
+
+		$this->registerViewPublisher();
+
+		$this->registerMigrationPublisher();
+
+		$this->commands(
+			'command.asset.publish', 'command.config.publish',
+			'command.view.publish', 'command.migrate.publish'
+		);
+	}
+
+	/**
+	 * Register the asset publisher service and command.
+	 *
+	 * @return void
+	 */
+	protected function registerAssetPublisher()
+	{
+		$this->registerAssetPublishCommand();
+
+		$this->app->bindShared('asset.publisher', function($app)
+		{
+			$publicPath = $app['path.public'];
+
+			// The asset "publisher" is responsible for moving package's assets into the
+			// web accessible public directory of an application so they can actually
+			// be served to the browser. Otherwise, they would be locked in vendor.
+			$publisher = new AssetPublisher($app['files'], $publicPath);
+
+			$publisher->setPackagePath($app['path.base'].'/vendor');
+
+			return $publisher;
+		});
+	}
+
+	/**
+	 * Register the asset publish console command.
+	 *
+	 * @return void
+	 */
+	protected function registerAssetPublishCommand()
+	{
+		$this->app->bindShared('command.asset.publish', function($app)
+		{
+			return new AssetPublishCommand($app['asset.publisher']);
+		});
+	}
+
+	/**
+	 * Register the configuration publisher class and command.
+	 *
+	 * @return void
+	 */
+	protected function registerConfigPublisher()
+	{
+		$this->registerConfigPublishCommand();
+
+		$this->app->bindShared('config.publisher', function($app)
+		{
+			$path = $app['path'].'/config';
+
+			// Once we have created the configuration publisher, we will set the default
+			// package path on the object so that it knows where to find the packages
+			// that are installed for the application and can move them to the app.
+			$publisher = new ConfigPublisher($app['files'], $path);
+
+			$publisher->setPackagePath($app['path.base'].'/vendor');
+
+			return $publisher;
+		});
+	}
+
+	/**
+	 * Register the configuration publish console command.
+	 *
+	 * @return void
+	 */
+	protected function registerConfigPublishCommand()
+	{
+		$this->app->bindShared('command.config.publish', function($app)
+		{
+			return new ConfigPublishCommand($app['config.publisher']);
+		});
+	}
+
+	/**
+	 * Register the view publisher class and command.
+	 *
+	 * @return void
+	 */
+	protected function registerViewPublisher()
+	{
+		$this->registerViewPublishCommand();
+
+		$this->app->bindShared('view.publisher', function($app)
+		{
+			$viewPath = $app['path'].'/views';
+
+			// Once we have created the view publisher, we will set the default packages
+			// path on this object so that it knows where to find all of the packages
+			// that are installed for the application and can move them to the app.
+			$publisher = new ViewPublisher($app['files'], $viewPath);
+
+			$publisher->setPackagePath($app['path.base'].'/vendor');
+
+			return $publisher;
+		});
+	}
+
+	/**
+	 * Register the view publish console command.
+	 *
+	 * @return void
+	 */
+	protected function registerViewPublishCommand()
+	{
+		$this->app->bindShared('command.view.publish', function($app)
+		{
+			return new ViewPublishCommand($app['view.publisher']);
+		});
+	}
+
+	/**
+	 * Register the migration publisher class and command.
+	 *
+	 * @return void
+	 */
+	protected function registerMigrationPublisher()
+	{
+		$this->registerMigratePublishCommand();
+
+		$this->app->bindShared('migration.publisher', function($app)
+		{
+			return new MigrationPublisher($app['files']);
+		});
+	}
+
+	/**
+	 * Register the migration publisher command.
+	 *
+	 * @return void
+	 */
+	protected function registerMigratePublishCommand()
+	{
+		$this->app->bindShared('command.migrate.publish', function()
+		{
+			return new MigratePublishCommand;
+		});
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array(
+			'asset.publisher',
+			'command.asset.publish',
+			'config.publisher',
+			'command.config.publish',
+			'view.publisher',
+			'command.view.publish',
+			'migration.publisher',
+			'command.migrate.publish',
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Providers/RouteListServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/RouteListServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/RouteListServiceProvider.php
new file mode 100755
index 0000000..9dcbd9e
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/RouteListServiceProvider.php
@@ -0,0 +1,40 @@
+<?php namespace Illuminate\Foundation\Providers;
+
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Foundation\Console\RoutesCommand;
+
+class RouteListServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('command.routes', function($app)
+		{
+			return new RoutesCommand($app['router']);
+		});
+
+		$this->commands('command.routes');
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('command.routes');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ServerServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ServerServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ServerServiceProvider.php
new file mode 100755
index 0000000..3d1e316
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ServerServiceProvider.php
@@ -0,0 +1,40 @@
+<?php namespace Illuminate\Foundation\Providers;
+
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Foundation\Console\ServeCommand;
+
+class ServerServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('command.serve', function()
+		{
+			return new ServeCommand;
+		});
+
+		$this->commands('command.serve');
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('command.serve');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Providers/TinkerServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/TinkerServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/TinkerServiceProvider.php
new file mode 100755
index 0000000..81ef0d0
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/TinkerServiceProvider.php
@@ -0,0 +1,40 @@
+<?php namespace Illuminate\Foundation\Providers;
+
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Foundation\Console\TinkerCommand;
+
+class TinkerServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('command.tinker', function()
+		{
+			return new TinkerCommand;
+		});
+
+		$this->commands('command.tinker');
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('command.tinker');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Testing/ApplicationTrait.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/ApplicationTrait.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/ApplicationTrait.php
new file mode 100644
index 0000000..d254f3d
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/ApplicationTrait.php
@@ -0,0 +1,190 @@
+<?php namespace Illuminate\Foundation\Testing;
+
+use Illuminate\Auth\UserInterface;
+
+trait ApplicationTrait {
+
+	/**
+	 * The Illuminate application instance.
+	 *
+	 * @var \Illuminate\Foundation\Application
+	 */
+	protected $app;
+
+	/**
+	 * The HttpKernel client instance.
+	 *
+	 * @var \Illuminate\Foundation\Testing\Client
+	 */
+	protected $client;
+
+	/**
+	 * Refresh the application instance.
+	 *
+	 * @return void
+	 */
+	protected function refreshApplication()
+	{
+		$this->app = $this->createApplication();
+
+		$this->client = $this->createClient();
+
+		$this->app->setRequestForConsoleEnvironment();
+
+		$this->app->boot();
+	}
+
+	/**
+	 * Call the given URI and return the Response.
+	 *
+	 * @param  string  $method
+	 * @param  string  $uri
+	 * @param  array   $parameters
+	 * @param  array   $files
+	 * @param  array   $server
+	 * @param  string  $content
+	 * @param  bool	$changeHistory
+	 * @return \Illuminate\Http\Response
+	 */
+	public function call($method, $uri, $parameters = [], $files = [], $server = [], $content = null, $changeHistory = true)
+	{
+		$this->client->request($method, $uri, $parameters, $files, $server, $content, $changeHistory);
+
+		return $this->client->getResponse();
+	}
+
+	/**
+	 * Call the given HTTPS URI and return the Response.
+	 *
+	 * @param  string  $method
+	 * @param  string  $uri
+	 * @param  array   $parameters
+	 * @param  array   $files
+	 * @param  array   $server
+	 * @param  string  $content
+	 * @param  bool	$changeHistory
+	 * @return \Illuminate\Http\Response
+	 */
+	public function callSecure($method, $uri, $parameters = [], $files = [], $server = [], $content = null, $changeHistory = true)
+	{
+		$uri = 'https://localhost/'.ltrim($uri, '/');
+
+		return $this->call($method, $uri, $parameters, $files, $server, $content, $changeHistory);
+	}
+
+	/**
+	 * Call a controller action and return the Response.
+	 *
+	 * @param  string  $method
+	 * @param  string  $action
+	 * @param  array   $wildcards
+	 * @param  array   $parameters
+	 * @param  array   $files
+	 * @param  array   $server
+	 * @param  string  $content
+	 * @param  bool	$changeHistory
+	 * @return \Illuminate\Http\Response
+	 */
+	public function action($method, $action, $wildcards = array(), $parameters = array(), $files = array(), $server = array(), $content = null, $changeHistory = true)
+	{
+		$uri = $this->app['url']->action($action, $wildcards, true);
+
+		return $this->call($method, $uri, $parameters, $files, $server, $content, $changeHistory);
+	}
+
+	/**
+	 * Call a named route and return the Response.
+	 *
+	 * @param  string  $method
+	 * @param  string  $name
+	 * @param  array   $routeParameters
+	 * @param  array   $parameters
+	 * @param  array   $files
+	 * @param  array   $server
+	 * @param  string  $content
+	 * @param  bool	$changeHistory
+	 * @return \Illuminate\Http\Response
+	 */
+	public function route($method, $name, $routeParameters = array(), $parameters = array(), $files = array(), $server = array(), $content = null, $changeHistory = true)
+	{
+		$uri = $this->app['url']->route($name, $routeParameters);
+
+		return $this->call($method, $uri, $parameters, $files, $server, $content, $changeHistory);
+	}
+
+	/**
+	 * Set the session to the given array.
+	 *
+	 * @param  array  $data
+	 * @return void
+	 */
+	public function session(array $data)
+	{
+		$this->startSession();
+
+		foreach ($data as $key => $value)
+		{
+			$this->app['session']->put($key, $value);
+		}
+	}
+
+	/**
+	 * Flush all of the current session data.
+	 *
+	 * @return void
+	 */
+	public function flushSession()
+	{
+		$this->startSession();
+
+		$this->app['session']->flush();
+	}
+
+	/**
+	 * Start the session for the application.
+	 *
+	 * @return void
+	 */
+	protected function startSession()
+	{
+		if ( ! $this->app['session']->isStarted())
+		{
+			$this->app['session']->start();
+		}
+	}
+
+	/**
+	 * Set the currently logged in user for the application.
+	 *
+	 * @param  \Illuminate\Auth\UserInterface  $user
+	 * @param  string  $driver
+	 * @return void
+	 */
+	public function be(UserInterface $user, $driver = null)
+	{
+		$this->app['auth']->driver($driver)->setUser($user);
+	}
+
+	/**
+	 * Seed a given database connection.
+	 *
+	 * @param  string  $class
+	 * @return void
+	 */
+	public function seed($class = 'DatabaseSeeder')
+	{
+		$this->app['artisan']->call('db:seed', array('--class' => $class));
+	}
+
+	/**
+	 * Create a new HttpKernel client instance.
+	 *
+	 * @param  array  $server
+	 * @return \Symfony\Component\HttpKernel\Client
+	 */
+	protected function createClient(array $server = array())
+	{
+		return new Client($this->app, $server);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Testing/AssertionsTrait.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/AssertionsTrait.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/AssertionsTrait.php
new file mode 100644
index 0000000..218595b
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/AssertionsTrait.php
@@ -0,0 +1,223 @@
+<?php namespace Illuminate\Foundation\Testing;
+
+use Illuminate\View\View;
+
+trait AssertionsTrait {
+
+	/**
+	 * Assert that the client response has an OK status code.
+	 *
+	 * @return void
+	 */
+	public function assertResponseOk()
+	{
+		$response = $this->client->getResponse();
+
+		$actual = $response->getStatusCode();
+
+		return $this->assertTrue($response->isOk(), 'Expected status code 200, got ' .$actual);
+	}
+
+	/**
+	 * Assert that the client response has a given code.
+	 *
+	 * @param  int  $code
+	 * @return void
+	 */
+	public function assertResponseStatus($code)
+	{
+		return $this->assertEquals($code, $this->client->getResponse()->getStatusCode());
+	}
+
+	/**
+	 * Assert that the response view has a given piece of bound data.
+	 *
+	 * @param  string|array  $key
+	 * @param  mixed  $value
+	 * @return void
+	 */
+	public function assertViewHas($key, $value = null)
+	{
+		if (is_array($key)) return $this->assertViewHasAll($key);
+
+		$response = $this->client->getResponse();
+
+		if ( ! isset($response->original) || ! $response->original instanceof View)
+		{
+			return $this->assertTrue(false, 'The response was not a view.');
+		}
+
+		if (is_null($value))
+		{
+			$this->assertArrayHasKey($key, $response->original->getData());
+		}
+		else
+		{
+			$this->assertEquals($value, $response->original->$key);
+		}
+	}
+
+	/**
+	 * Assert that the view has a given list of bound data.
+	 *
+	 * @param  array  $bindings
+	 * @return void
+	 */
+	public function assertViewHasAll(array $bindings)
+	{
+		foreach ($bindings as $key => $value)
+		{
+			if (is_int($key))
+			{
+				$this->assertViewHas($value);
+			}
+			else
+			{
+				$this->assertViewHas($key, $value);
+			}
+		}
+	}
+
+	/**
+	 * Assert that the response view is missing a piece of bound data.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function assertViewMissing($key)
+	{
+		$response = $this->client->getResponse();
+
+		if ( ! isset($response->original) || ! $response->original instanceof View)
+		{
+			return $this->assertTrue(false, 'The response was not a view.');
+		}
+
+		$this->assertArrayNotHasKey($key, $response->original->getData());
+	}
+
+	/**
+	 * Assert whether the client was redirected to a given URI.
+	 *
+	 * @param  string  $uri
+	 * @param  array   $with
+	 * @return void
+	 */
+	public function assertRedirectedTo($uri, $with = array())
+	{
+		$response = $this->client->getResponse();
+
+		$this->assertInstanceOf('Illuminate\Http\RedirectResponse', $response);
+
+		$this->assertEquals($this->app['url']->to($uri), $response->headers->get('Location'));
+
+		$this->assertSessionHasAll($with);
+	}
+
+	/**
+	 * Assert whether the client was redirected to a given route.
+	 *
+	 * @param  string  $name
+	 * @param  array   $parameters
+	 * @param  array   $with
+	 * @return void
+	 */
+	public function assertRedirectedToRoute($name, $parameters = array(), $with = array())
+	{
+		$this->assertRedirectedTo($this->app['url']->route($name, $parameters), $with);
+	}
+
+	/**
+	 * Assert whether the client was redirected to a given action.
+	 *
+	 * @param  string  $name
+	 * @param  array   $parameters
+	 * @param  array   $with
+	 * @return void
+	 */
+	public function assertRedirectedToAction($name, $parameters = array(), $with = array())
+	{
+		$this->assertRedirectedTo($this->app['url']->action($name, $parameters), $with);
+	}
+
+	/**
+	 * Assert that the session has a given list of values.
+	 *
+	 * @param  string|array  $key
+	 * @param  mixed  $value
+	 * @return void
+	 */
+	public function assertSessionHas($key, $value = null)
+	{
+		if (is_array($key)) return $this->assertSessionHasAll($key);
+
+		if (is_null($value))
+		{
+			$this->assertTrue($this->app['session.store']->has($key), "Session missing key: $key");
+		}
+		else
+		{
+			$this->assertEquals($value, $this->app['session.store']->get($key));
+		}
+	}
+
+	/**
+	 * Assert that the session has a given list of values.
+	 *
+	 * @param  array  $bindings
+	 * @return void
+	 */
+	public function assertSessionHasAll(array $bindings)
+	{
+		foreach ($bindings as $key => $value)
+		{
+			if (is_int($key))
+			{
+				$this->assertSessionHas($value);
+			}
+			else
+			{
+				$this->assertSessionHas($key, $value);
+			}
+		}
+	}
+
+	/**
+	 * Assert that the session has errors bound.
+	 *
+	 * @param  string|array  $bindings
+	 * @param  mixed  $format
+	 * @return void
+	 */
+	public function assertSessionHasErrors($bindings = array(), $format = null)
+	{
+		$this->assertSessionHas('errors');
+
+		$bindings = (array) $bindings;
+
+		$errors = $this->app['session.store']->get('errors');
+
+		foreach ($bindings as $key => $value)
+		{
+			if (is_int($key))
+			{
+				$this->assertTrue($errors->has($value), "Session missing error: $value");
+			}
+			else
+			{
+				$this->assertContains($value, $errors->get($key, $format));
+			}
+		}
+	}
+
+	/**
+	 * Assert that the session has old input.
+	 *
+	 * @return void
+	 */
+	public function assertHasOldInput()
+	{
+		$this->assertSessionHas('_old_input');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Client.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Client.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Client.php
new file mode 100755
index 0000000..d32425e
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Client.php
@@ -0,0 +1,38 @@
+<?php namespace Illuminate\Foundation\Testing;
+
+use Illuminate\Foundation\Application;
+use Symfony\Component\HttpKernel\Client as BaseClient;
+use Symfony\Component\BrowserKit\Request as DomRequest;
+
+class Client extends BaseClient {
+
+	/**
+	 * Convert a BrowserKit request into a Illuminate request.
+	 *
+	 * @param  \Symfony\Component\BrowserKit\Request  $request
+	 * @return \Illuminate\Http\Request
+	 */
+	protected function filterRequest(DomRequest $request)
+	{
+		$httpRequest = Application::onRequest('create', $this->getRequestParameters($request));
+
+		$httpRequest->files->replace($this->filterFiles($httpRequest->files->all()));
+
+		return $httpRequest;
+	}
+
+	/**
+	 * Get the request parameters from a BrowserKit request.
+	 *
+	 * @param  \Symfony\Component\BrowserKit\Request  $request
+	 * @return array
+	 */
+	protected function getRequestParameters(DomRequest $request)
+	{
+		return array(
+			$request->getUri(), $request->getMethod(), $request->getParameters(), $request->getCookies(),
+			$request->getFiles(), $request->getServer(), $request->getContent()
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php
new file mode 100755
index 0000000..1c9326a
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php
@@ -0,0 +1,29 @@
+<?php namespace Illuminate\Foundation\Testing;
+
+abstract class TestCase extends \PHPUnit_Framework_TestCase {
+
+	use ApplicationTrait, AssertionsTrait;
+
+	/**
+	 * Setup the test environment.
+	 *
+	 * @return void
+	 */
+	public function setUp()
+	{
+		if ( ! $this->app)
+		{
+			$this->refreshApplication();
+		}
+	}
+
+	/**
+	 * Creates the application.
+	 *
+	 * Needs to be implemented by subclasses.
+	 *
+	 * @return \Symfony\Component\HttpKernel\HttpKernelInterface
+	 */
+	abstract public function createApplication();
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/ViewPublisher.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/ViewPublisher.php b/vendor/laravel/framework/src/Illuminate/Foundation/ViewPublisher.php
new file mode 100755
index 0000000..c223991
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/ViewPublisher.php
@@ -0,0 +1,117 @@
+<?php namespace Illuminate\Foundation;
+
+use Illuminate\Filesystem\Filesystem;
+
+class ViewPublisher {
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * The destination of the view files.
+	 *
+	 * @var string
+	 */
+	protected $publishPath;
+
+	/**
+	 * The path to the application's packages.
+	 *
+	 * @var string
+	 */
+	protected $packagePath;
+
+	/**
+	 * Create a new view publisher instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @param  string  $publishPath
+	 * @return void
+	 */
+	public function __construct(Filesystem $files, $publishPath)
+	{
+		$this->files = $files;
+		$this->publishPath = $publishPath;
+	}
+
+	/**
+	 * Publish view files from a given path.
+	 *
+	 * @param  string  $package
+	 * @param  string  $source
+	 * @return void
+	 */
+	public function publish($package, $source)
+	{
+		$destination = $this->publishPath."/packages/{$package}";
+
+		$this->makeDestination($destination);
+
+		return $this->files->copyDirectory($source, $destination);
+	}
+
+	/**
+	 * Publish the view files for a package.
+	 *
+	 * @param  string  $package
+	 * @param  string  $packagePath
+	 * @return void
+	 */
+	public function publishPackage($package, $packagePath = null)
+	{
+		$source = $this->getSource($package, $packagePath ?: $this->packagePath);
+
+		return $this->publish($package, $source);
+	}
+
+	/**
+	 * Get the source views directory to publish.
+	 *
+	 * @param  string  $package
+	 * @param  string  $packagePath
+	 * @return string
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	protected function getSource($package, $packagePath)
+	{
+		$source = $packagePath."/{$package}/src/views";
+
+		if ( ! $this->files->isDirectory($source))
+		{
+			throw new \InvalidArgumentException("Views not found.");
+		}
+
+		return $source;
+	}
+
+	/**
+	 * Create the destination directory if it doesn't exist.
+	 *
+	 * @param  string  $destination
+	 * @return void
+	 */
+	protected function makeDestination($destination)
+	{
+		if ( ! $this->files->isDirectory($destination))
+		{
+			$this->files->makeDirectory($destination, 0777, true);
+		}
+	}
+
+	/**
+	 * Set the default package path.
+	 *
+	 * @param  string  $packagePath
+	 * @return void
+	 */
+	public function setPackagePath($packagePath)
+	{
+		$this->packagePath = $packagePath;
+	}
+
+}


[37/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/xml_id_utilities.php
----------------------------------------------------------------------
diff --git a/app/libraries/xml_id_utilities.php b/app/libraries/xml_id_utilities.php
new file mode 100755
index 0000000..6b54767
--- /dev/null
+++ b/app/libraries/xml_id_utilities.php
@@ -0,0 +1,252 @@
+<?php
+/**
+ * Utilities for ID management with an XML file
+ */
+
+//include 'id_utilities.php';
+
+class XmlIdUtilities implements IdUtilities
+{
+    const DB_PATH = 'users.xml';
+
+    /**
+     * Connect to the user database.
+     * @return mixed|void
+     */
+    public function connect()
+    {
+        global $db;
+
+
+        try
+        {
+            if (file_exists(self::DB_PATH))
+            {
+                $db = simplexml_load_file(self::DB_PATH);
+            }
+            else
+            {
+                throw new Exception("Error: Cannot connect to database!");
+            }
+
+
+            if (!$db)
+            {
+                throw new Exception('Error: Cannot open database!');
+            }
+        }
+        catch (Exception $e)
+        {
+            echo '<div>' . $e->getMessage() . '</div>';
+        }
+    }
+
+    /**
+     * Return true if the given username exists in the database.
+     * @param $username
+     * @return bool
+     */
+    public function username_exists($username)
+    {
+        global $db;
+
+        foreach($db->xpath('//username') as $db_username)
+        {
+            if ($db_username == $username)
+            {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Authenticate the user given username and password.
+     * @param $username
+     * @param $password
+     * @return int|mixed
+     */
+    public function authenticate($username, $password)
+    {
+        global $db;
+
+        $hashed_password = md5($password);
+        
+        $user = $db->xpath('//user[username="' . $username . '"]');
+
+        if (sizeof($user) == 1)
+        {
+            return $user[0]->password_hash == $hashed_password;
+        }
+        elseif(sizeof($user) == 0)
+        {
+            return -1;
+        }
+        else // duplicate users in database
+        {
+            return -2;
+        }
+    }
+
+    /**
+     * Add a new user to the database.
+     * @param $username
+     * @param $password
+     * @return mixed|void
+     */
+    public function add_user($username, $password, $first_name, $last_name, $email, $organization,
+            $address, $country,$telephone, $mobile, $im, $url)
+    {
+        global $db;
+
+        $users = $db->xpath('//users');
+
+        $user = $users[0]->addChild('user');
+
+        $user->addChild('username', $username);
+        $user->addChild('password_hash', md5($password));
+
+        //Format XML to save indented tree rather than one line
+        $dom = new DOMDocument('1.0');
+        $dom->preserveWhiteSpace = false;
+        $dom->formatOutput = true;
+        $dom->loadXML($db->asXML());
+        $dom->save('users.xml');
+    }
+
+    /**
+     * Get the user profile
+     * @param $username
+     * @return mixed|void
+     */
+    public function get_user_profile($username)
+    {
+        // TODO: Implement get_user_profile() method.
+    }
+
+    /**
+     * Update the user profile
+     *
+     * @param $username
+     * @param $first_name
+     * @param $last_name
+     * @param $email
+     * @param $organization
+     * @param $address
+     * @param $country
+     * @param $telephone
+     * @param $mobile
+     * @param $im
+     * @param $url
+     * @return mixed
+     */
+    public function update_user_profile($username, $first_name, $last_name, $email, $organization, $address,
+                                        $country, $telephone, $mobile, $im, $url)
+    {
+        // TODO: Implement update_user_profile() method.
+    }
+
+    /**
+     * Function to update user password
+     *
+     * @param $username
+     * @param $current_password
+     * @param $new_password
+     * @return mixed
+     */
+    public function change_password($username, $current_password, $new_password)
+    {
+        // TODO: Implement change_password() method.
+    }
+
+    /**
+     * Function to remove an existing user
+     *
+     * @param $username
+     * @return void
+     */
+    public function remove_user($username)
+    {
+        // TODO: Implement remove_user() method.
+    }
+
+    /**
+     * Function to check whether a user has permission for a particular permission string(api method).
+     *
+     * @param $username
+     * @param $permission_string
+     * @return bool
+     */
+    public function checkPermissionForUser($username, $permission_string)
+    {
+        // TODO: Implement checkPermissionForUser() method.
+    }
+
+    /**
+     * Function to get all the permissions that a particular user has.
+     *
+     * @param $username
+     * @return mixed
+     */
+    public function getUserPermissions($username)
+    {
+        // TODO: Implement getUserPermissions() method.
+    }
+
+    /**
+     * Function to get the entire list of roles in the application
+     *
+     * @return mixed
+     */
+    public function getRoleList()
+    {
+        // TODO: Implement getRoleList() method.
+    }
+
+    /**
+     * Function to get the role list of a user
+     *
+     * @param $username
+     * @return mixed
+     */
+    public function getRoleListOfUser($username)
+    {
+        // TODO: Implement getRoleListOfUser() method.
+    }
+
+    /**
+     * Function to get the user list of a particular role
+     *
+     * @param $role
+     * @return mixed
+     */
+    public function getUserListOfRole($role)
+    {
+        // TODO: Implement getUserListOfRole() method.
+    }
+
+    /**
+     * Function to add a role to a user
+     *
+     * @param $username
+     * @param $role
+     * @return void
+     */
+    public function addUserToRole($username, $role)
+    {
+        // TODO: Implement addUserToRole() method.
+    }
+
+    /**
+     * Function to role from user
+     *
+     * @param $username
+     * @param $role
+     * @return void
+     */
+    public function removeUserFromRole($username, $role)
+    {
+        // TODO: Implement removeUserFromRole() method.
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/models/Constant.php
----------------------------------------------------------------------
diff --git a/app/models/Constant.php b/app/models/Constant.php
new file mode 100644
index 0000000..f18ba41
--- /dev/null
+++ b/app/models/Constant.php
@@ -0,0 +1,48 @@
+<?php
+
+class Constant extends Eloquent{
+
+
+	const EXPERIMENT_DATA_ROOT = '/../experimentData/';
+
+	/* 
+
+	------------ now rest all are handled at config/app-config.ini -------------------
+
+	const AIRAVATA_SERVER = 'gw111.iu.xsede.org';
+	//const AIRAVATA_SERVER = 'gw127.iu.xsede.org';
+	//const AIRAVATA_SERVER = 'gw56.iu.xsede.org'; //Mirror
+	//const AIRAVATA_PORT = 8930; //development
+	const AIRAVATA_PORT = 9930; //production
+	const AIRAVATA_TIMEOUT = 100000;
+	const EXPERIMENT_DATA_ROOT = '/../experimentData/';
+
+	const SSH_USER = 'root';
+	//const DATA_PATH = 'file://home/pga/production/experimentData/';
+
+	const EXPERIMENT_DATA_ROOT_ABSOLUTE = '/var/www/experimentData/';
+	//const EXPERIMENT_DATA_ROOT_ABSOLUTE = 'C:/wamp/www/experimentData/';
+
+	//const USER_STORE = 'WSO2','XML','USER_API';
+	const USER_STORE = 'WSO2';
+
+	//This will need to be updated everytime a new user role is being added for
+	//specific purposes.
+	const ADMIN_ROLE = "admin";
+	const GATEWAY_ADMIN_ROLE = "gateway_admin";
+	const USER_ROLE = "Internal/everyone";
+
+	//identity server roles assigned for Gateway
+	const GATEWAY_ROLE_PREPEND = "gateway_";
+	const GATEWAY_ROLE_ADMIN_APPEND = "_admin";
+
+	const REQ_URL = 'https://gw111.iu.xsede.org:8443/credential-store/acs-start-servlet';
+	const GATEWAY_NAME = 'PHP-Reference-Gateway';
+	const EMAIL = 'admin@gw120.iu.xsede.org';	
+
+	const SERVER_ALLOWED_FILE_SIZE = 64; // in MB
+
+	*/ 
+}
+
+?>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/models/User.php
----------------------------------------------------------------------
diff --git a/app/models/User.php b/app/models/User.php
new file mode 100755
index 0000000..0d96f81
--- /dev/null
+++ b/app/models/User.php
@@ -0,0 +1,25 @@
+<?php
+
+use Illuminate\Auth\UserTrait;
+use Illuminate\Auth\UserInterface;
+use Illuminate\Auth\Reminders\RemindableTrait;
+use Illuminate\Auth\Reminders\RemindableInterface;
+
+class User extends Eloquent implements UserInterface, RemindableInterface {
+
+	use UserTrait, RemindableTrait;
+
+	/**
+	 * The database table used by the model.
+	 *
+	 * @var string
+	 */
+	protected $table = 'users';
+
+	/**
+	 * The attributes excluded from the model's JSON form.
+	 *
+	 * @var array
+	 */
+	protected $hidden = array('password', 'remember_token');
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/resources/assets/PoweredbyAiravata_Small.png
----------------------------------------------------------------------
diff --git a/app/resources/assets/PoweredbyAiravata_Small.png b/app/resources/assets/PoweredbyAiravata_Small.png
new file mode 100755
index 0000000..7178e31
Binary files /dev/null and b/app/resources/assets/PoweredbyAiravata_Small.png differ

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/resources/assets/favicon.ico
----------------------------------------------------------------------
diff --git a/app/resources/assets/favicon.ico b/app/resources/assets/favicon.ico
new file mode 100755
index 0000000..541659e
Binary files /dev/null and b/app/resources/assets/favicon.ico differ

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/resources/assets/scigap-header-logo.png
----------------------------------------------------------------------
diff --git a/app/resources/assets/scigap-header-logo.png b/app/resources/assets/scigap-header-logo.png
new file mode 100755
index 0000000..6e8bf4a
Binary files /dev/null and b/app/resources/assets/scigap-header-logo.png differ

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/resources/oa4mp/oauth-properties.ini
----------------------------------------------------------------------
diff --git a/app/resources/oa4mp/oauth-properties.ini b/app/resources/oa4mp/oauth-properties.ini
new file mode 100755
index 0000000..d9e5b9b
--- /dev/null
+++ b/app/resources/oa4mp/oauth-properties.ini
@@ -0,0 +1,15 @@
+; Configuration file for XSEDE properties
+
+oauth_privkey_file = "/var/www/PHP-Reference-Gateway/resources/oa4mp/oauth-privkey.pk8"
+oauth_privkey_pem = "/var/www/PHP-Reference-Gateway/resources/oa4mp/oauth-privkey.pem"
+
+home_url = "https://gw120.iu.xsede.org/PHP-Reference-Gateway/xsede_login.php"
+oa4mp_id = "myproxy:oa4mp,2012:/client/5a323fc6fcffcff7a95401046a303520"
+
+dn[countryName] = "US"
+dn[stateOrProvinceName] = "IN"
+dn[localityName] = "Bloomington"
+dn[organizationName] = "IU"
+dn[organizationalUnitName] = "SGG"
+dn[commonName] = "gw120.iu.xsede.org"
+dn[emailAddress] = "yuma@iu.edu"

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/resources/security/idp_scigap_org.pem
----------------------------------------------------------------------
diff --git a/app/resources/security/idp_scigap_org.pem b/app/resources/security/idp_scigap_org.pem
new file mode 100755
index 0000000..6cb8cf3
--- /dev/null
+++ b/app/resources/security/idp_scigap_org.pem
@@ -0,0 +1,83 @@
+-----BEGIN CERTIFICATE-----
+MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
+IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
+MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
+FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
+bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
+H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
+uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
+mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
+a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
+E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
+WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
+VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
+Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
+cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
+IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
+AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
+YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
+6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
+Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
+c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
+mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEwzCCA6ugAwIBAgIQf3HB06ImsNKxE/PmgWdkPjANBgkqhkiG9w0BAQUFADBv
+MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk
+ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF
+eHRlcm5hbCBDQSBSb290MB4XDTEwMTIwNzAwMDAwMFoXDTIwMDUzMDEwNDgzOFow
+UTELMAkGA1UEBhMCVVMxEjAQBgNVBAoTCUludGVybmV0MjERMA8GA1UECxMISW5D
+b21tb24xGzAZBgNVBAMTEkluQ29tbW9uIFNlcnZlciBDQTCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAJd8x8j+s+kgaqOkT46ONFYGs3psqhCbSGErNpBp
+4zQKR6e7e96qavvrgpWPyh1/r3WmqEzaIGdhGg2GwcrBh6+sTuTeYhsvnbGYr8YB
++xdw26wUWexvPzN/ppgL5OI4r/V/hW0OdASd9ieGx5uP53EqCPQDAkBjJH1AV49U
+4FR+thNIYfHezg69tvpNmLLZDY15puCqzQyRmqXfq3O7yhR4XEcpocrFup/H2mD3
+/+d/8tnaoS0PSRan0wCSz4pH2U341ZVm03T5gGMAT0yEFh+z9SQfoU7e6JXWsgsJ
+iyxrx1wvjGPJmctSsWJ7cwFif2Ns2Gig7mqojR8p89AYrK0CAwEAAaOCAXcwggFz
+MB8GA1UdIwQYMBaAFK29mHo0tCb3+sQmVO8DveAky1QaMB0GA1UdDgQWBBRIT1r6
+L0qaXuBQ82t7VaXe9b40XTAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB
+/wIBADARBgNVHSAECjAIMAYGBFUdIAAwRAYDVR0fBD0wOzA5oDegNYYzaHR0cDov
+L2NybC51c2VydHJ1c3QuY29tL0FkZFRydXN0RXh0ZXJuYWxDQVJvb3QuY3JsMIGz
+BggrBgEFBQcBAQSBpjCBozA/BggrBgEFBQcwAoYzaHR0cDovL2NydC51c2VydHJ1
+c3QuY29tL0FkZFRydXN0RXh0ZXJuYWxDQVJvb3QucDdjMDkGCCsGAQUFBzAChi1o
+dHRwOi8vY3J0LnVzZXJ0cnVzdC5jb20vQWRkVHJ1c3RVVE5TR0NDQS5jcnQwJQYI
+KwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcNAQEF
+BQADggEBAJNmIYB0RYVLwqvOMrAp/t3f1iRbvwNqb1A+DhuzDYijW+7EpBI7Vu8G
+f89/IZVWO0Ex/uGqk9KV85UNPEerylwmrT7x+Yw0bhG+9GfjAkn5pnx7ZCXdF0by
+UOPjCiE6SSTNxoRlaGdosEUtR5nNnKuGKRFy3NacNkN089SXnlag/l9AWNLV1358
+xY4asgRckmYOha0uBs7Io9jrFCeR3s8XMIFTtmYSrTfk9e+WXCAONumsYn0ZgYr1
+kGGmSavOPN/mymTugmU5RZUWukEGAJi6DFZh5MbGhgHPZqkiKQLWPc/EKo2Z3vsJ
+FJ4O0dXG14HdrSSrrAcF4h1ow3BmX9M=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFFTCCA/2gAwIBAgIQEUBLlISAS3rT/GaBSZxRUTANBgkqhkiG9w0BAQUFADBR
+MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSW50ZXJuZXQyMREwDwYDVQQLEwhJbkNv
+bW1vbjEbMBkGA1UEAxMSSW5Db21tb24gU2VydmVyIENBMB4XDTE0MDUwMTAwMDAw
+MFoXDTE3MDQzMDIzNTk1OVowgYIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJJTjEU
+MBIGA1UEBxMLQmxvb21pbmd0b24xGzAZBgNVBAoTEkluZGlhbmEgVW5pdmVyc2l0
+eTEaMBgGA1UECxMRSWRlbnRpdHkgUHJvdmlkZXIxFzAVBgNVBAMTDmlkcC5zY2ln
+YXAub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4dFhVixu23vB
+dpTR31H4DWB+PObD2yV0R0eRq8iBVKkvtu4HRt1ClBjZnmfpK1K1pfsO8CSLNjEu
+8ZA7AnynalMjN9DMzWjlYzoezc8vC5RIhGT7n7UAIBmHXXXUuNEr99/BB0rWvWa0
+BlBPZ+JmNn6rO1n4m8RK+Uf06GJogHRmWy3AakNdBT3s3H/LeFHDi5hifw7hbwbs
+dtsSrx56vmEsR9nde2i/ZyDkXWoNifsqkJfWQnKe2KSraS1CxTDzvOS8CAjjK2XD
+TYuD3wjDAr/GCafmId734erKPpSboj1S+0SAceZdnPi4jNBrycXcB2AfCudwse7L
+UhzWlyKy2wIDAQABo4IBtTCCAbEwHwYDVR0jBBgwFoAUSE9a+i9Kml7gUPNre1Wl
+3vW+NF0wHQYDVR0OBBYEFOgRhFYc+6zhi6WLx7+ZPsUr0osVMA4GA1UdDwEB/wQE
+AwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD
+AjBnBgNVHSAEYDBeMFIGDCsGAQQBriMBBAMBATBCMEAGCCsGAQUFBwIBFjRodHRw
+czovL3d3dy5pbmNvbW1vbi5vcmcvY2VydC9yZXBvc2l0b3J5L2Nwc19zc2wucGRm
+MAgGBmeBDAECAjA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLmluY29tbW9u
+Lm9yZy9JbkNvbW1vblNlcnZlckNBLmNybDBvBggrBgEFBQcBAQRjMGEwOQYIKwYB
+BQUHMAKGLWh0dHA6Ly9jZXJ0LmluY29tbW9uLm9yZy9JbkNvbW1vblNlcnZlckNB
+LmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuaW5jb21tb24ub3JnMBkGA1Ud
+EQQSMBCCDmlkcC5zY2lnYXAub3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAdg9Cv2Ora
+un7CAt77dhfGirTUdytoTwb5d7//OzWz6M95vr3e0siRowrKXq5AnQLY8CZ+YE3H
+yDxlvulWM2cMbubPsOLExCI4sNllViPWFNQKDl6s3Cbc7E2q11Hz048OVU4KtmL5
+5jA6/rWRCvoMepDzMF4T72DCeMnFSe3ICq+kBRI+RmOPoWWjIrL8Q9rWfUVLdQbu
+LgKtSfPpm0VfedZLlrJ3R7urdqpnIESzkBFj5rNDaD7Wiwc0LqcpbpGNo9SZ6IiT
+kKYLJCeoyWMAQa5zo5nnRbJ5cu1z/B50uibxbYclRWKEamiTThEYH824G0jaGCXx
+IspTV/Gt1tKM
+-----END CERTIFICATE-----
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/routes.php
----------------------------------------------------------------------
diff --git a/app/routes.php b/app/routes.php
new file mode 100755
index 0000000..ad7ea27
--- /dev/null
+++ b/app/routes.php
@@ -0,0 +1,193 @@
+<?php
+
+/*
+|--------------------------------------------------------------------------
+| Application Routes
+|--------------------------------------------------------------------------
+|
+| Here is where you can register all of the routes for an application.
+| It's a breeze. Simply tell Laravel the URIs it should respond to
+| and give it the Closure to execute when that URI is requested.
+|
+*/
+
+
+/*
+ * User Routes
+*/
+
+Route::get("create", "AccountController@createAccountView");
+
+Route::post("create", "AccountController@createAccountSubmit");
+
+Route::get("login", "AccountController@loginView");
+
+Route::post("login", "AccountController@loginSubmit");
+
+Route::get("logout", "AccountController@logout");
+
+Route::get("forgot-password", "AccountController@forgotPassword");
+/*
+ * The following routes will not work without logging in.
+ *
+*/
+
+/*
+ * Project Routes
+*/
+
+Route::get("project/create", "ProjectController@createView");
+
+Route::post("project/create", "ProjectController@createSubmit");
+
+Route::get("project/summary", "ProjectController@summary");
+
+Route::get("project/search", "ProjectController@searchView");
+
+Route::post("project/search", "ProjectController@searchSubmit");
+
+Route::get("project/edit", "ProjectController@editView");
+
+Route::post("project/edit", "ProjectController@editSubmit");
+
+/*
+ * Experiment Routes
+*/
+
+Route::get("experiment/create", "ExperimentController@createView");
+
+Route::post("experiment/create", "ExperimentController@createSubmit");
+
+Route::get("experiment/summary", "ExperimentController@summary");
+
+Route::post("experiment/summary", "ExperimentController@expChange");
+
+Route::get("experiment/search", "ExperimentController@searchView");
+
+Route::post("experiment/search", "ExperimentController@searchSubmit");
+
+Route::get("experiment/edit", "ExperimentController@editView");
+
+Route::post("experiment/edit", "ExperimentController@editSubmit");
+
+Route::post("experiment/cancel", "ExperimentController@expCancel");
+
+/*
+ * Compute Resources Routes
+*/
+
+Route::get("cr/create", function(){
+	return Redirect::to("cr/create/step1");
+});
+
+Route::get("cr/create", "ComputeResource@createView"); 
+
+Route::post("cr/create", "ComputeResource@createSubmit");
+
+Route::get("cr/edit", "ComputeResource@editView"); 
+
+Route::post("cr/edit", "ComputeResource@editSubmit"); 
+
+Route::get("cr/browse", "ComputeResource@browseView");
+
+Route::post("cr/delete-jsi", "ComputeResource@deleteActions");
+
+Route::post("cr/delete-dmi", "ComputeResource@deleteActions");
+
+Route::post("cr/delete-cr", "ComputeResource@deleteActions");
+
+/*
+ * Application Catalog Routes
+*/
+
+Route::get("app/module", "ApplicationController@showAppModuleView");
+
+Route::post("app/module-create", "ApplicationController@modifyAppModuleSubmit");
+
+Route::post("app/module-edit", "ApplicationController@modifyAppModuleSubmit");
+
+Route::post("app/module-delete", "ApplicationController@deleteAppModule");
+
+Route::get("app/interface", "ApplicationController@createAppInterfaceView");
+
+Route::post("app/interface-create", "ApplicationController@createAppInterfaceSubmit");
+
+Route::post("app/interface-edit", "ApplicationController@editAppInterfaceSubmit");
+
+Route::post("app/interface-delete", "ApplicationController@deleteAppInterface");
+
+Route::get("app/deployment", "ApplicationController@createAppDeploymentView");
+
+Route::post("app/deployment-create", "ApplicationController@createAppDeploymentSubmit");
+
+Route::post("app/deployment-edit", "ApplicationController@editAppDeploymentSubmit");
+
+Route::post("app/deployment-delete", "ApplicationController@deleteAppDeployment");
+
+Route::get("gp/create", "GatewayprofileController@createView");
+
+Route::post("gp/create", "GatewayprofileController@createSubmit");
+
+Route::post("gp/edit", "GatewayprofileController@editGP");
+
+Route::get("gp/browse", "GatewayprofileController@browseView");
+
+Route::post("gp/delete-gp", "GatewayprofileController@delete");
+
+Route::post("gp/remove-cr", "GatewayprofileController@delete");
+
+Route::post("gp/add-crp", "GatewayprofileController@modifyCRP");
+
+Route::post("gp/update-crp", "GatewayprofileController@modifyCRP");
+
+//Management Dashboard
+
+Route::get("admin/console", "AdminController@console");
+
+Route::get("admin/dashboard", "AdminController@dashboard");
+
+Route::get("admin/dashboard/gateway", "AdminController@dashboard");
+
+Route::get("admin/dashboard/users", "AdminController@usersView");
+
+Route::get("admin/dashboard/roles", "AdminController@rolesView");
+
+Route::get("admin/dashboard/experiments", "AdminController@experimentsView");
+
+Route::get("admin/dashboard/experiment/summary", function(){
+	return Redirect::to("experiment/summary?expId=" . $_GET["expId"] . "&dashboard=true");
+});
+
+Route::get("admin/dashboard/credential-store", "AdminController@credentialStoreView");
+
+Route::get("manage/users", "AdminController@usersView");
+
+Route::post("admin/adduser", "AdminController@addAdminSubmit");
+
+Route::post("admin/addgatewayadmin", "AdminController@addGatewayAdminSubmit");
+
+Route::post("admin/addrole", "AdminController@addRole");
+
+Route::post("admin/checkroles", "AdminController@getRoles");
+
+Route::post("admin/deleterole", "AdminController@deleteRole");
+
+//Airavata Server Check
+Route::get("airavata/down", function(){
+	return View::make("server-down");
+});
+/*
+ * Test Routes.
+*/
+
+Route::get("testjob", function(){
+	//print_r( Session::all());
+});
+
+
+/*
+ * Following base Routes need to be at the bottom.
+*/
+Route::controller("home", "HomeController");
+
+Route::controller("/", "HomeController");

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/start/artisan.php
----------------------------------------------------------------------
diff --git a/app/start/artisan.php b/app/start/artisan.php
new file mode 100755
index 0000000..1df850b
--- /dev/null
+++ b/app/start/artisan.php
@@ -0,0 +1,13 @@
+<?php
+
+/*
+|--------------------------------------------------------------------------
+| Register The Artisan Commands
+|--------------------------------------------------------------------------
+|
+| Each available Artisan command must be registered with the console so
+| that it is available to be called. We'll register every command so
+| the console gets access to each of the command object instances.
+|
+*/
+

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/start/global.php
----------------------------------------------------------------------
diff --git a/app/start/global.php b/app/start/global.php
new file mode 100755
index 0000000..cddbe4d
--- /dev/null
+++ b/app/start/global.php
@@ -0,0 +1,82 @@
+<?php
+
+/*
+|--------------------------------------------------------------------------
+| Register The Laravel Class Loader
+|--------------------------------------------------------------------------
+|
+| In addition to using Composer, you may use the Laravel class loader to
+| load your controllers and models. This is useful for keeping all of
+| your classes in the "global" namespace without Composer updating.
+|
+*/
+
+ClassLoader::addDirectories(array(
+
+	app_path().'/commands',
+	app_path().'/controllers',
+	app_path().'/models',
+	app_path().'/database/seeds',
+	app_path().'/libraires',
+
+));
+
+/*
+|--------------------------------------------------------------------------
+| Application Error Logger
+|--------------------------------------------------------------------------
+|
+| Here we will configure the error logger setup for the application which
+| is built on top of the wonderful Monolog library. By default we will
+| build a basic log file setup which creates a single file for logs.
+|
+*/
+
+Log::useFiles(storage_path().'/logs/laravel.log');
+
+/*
+|--------------------------------------------------------------------------
+| Application Error Handler
+|--------------------------------------------------------------------------
+|
+| Here you may handle any errors that occur in your application, including
+| logging them or displaying custom views for specific errors. You may
+| even register several error handlers to handle different types of
+| exceptions. If nothing is returned, the default error view is
+| shown, which includes a detailed stack trace during debug.
+|
+*/
+
+App::error(function(Exception $exception, $code)
+{
+	Log::error($exception);
+});
+
+/*
+|--------------------------------------------------------------------------
+| Maintenance Mode Handler
+|--------------------------------------------------------------------------
+|
+| The "down" Artisan command gives you the ability to put an application
+| into maintenance mode. Here, you will define what is displayed back
+| to the user if maintenance mode is in effect for the application.
+|
+*/
+
+App::down(function()
+{
+	return Response::make("Be right back!", 503);
+});
+
+/*
+|--------------------------------------------------------------------------
+| Require The Filters File
+|--------------------------------------------------------------------------
+|
+| Next we will load the filters file for the application. This gives us
+| a nice separate location to store our route and application filter
+| definitions instead of putting them all in the main routes file.
+|
+*/
+
+require app_path().'/filters.php';

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/start/local.php
----------------------------------------------------------------------
diff --git a/app/start/local.php b/app/start/local.php
new file mode 100755
index 0000000..3d14850
--- /dev/null
+++ b/app/start/local.php
@@ -0,0 +1,3 @@
+<?php
+
+//
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/storage/.gitignore
----------------------------------------------------------------------
diff --git a/app/storage/.gitignore b/app/storage/.gitignore
new file mode 100644
index 0000000..35b719c
--- /dev/null
+++ b/app/storage/.gitignore
@@ -0,0 +1 @@
+services.manifest
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/storage/cache/.gitignore
----------------------------------------------------------------------
diff --git a/app/storage/cache/.gitignore b/app/storage/cache/.gitignore
new file mode 100644
index 0000000..c96a04f
--- /dev/null
+++ b/app/storage/cache/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/storage/logs/.gitignore
----------------------------------------------------------------------
diff --git a/app/storage/logs/.gitignore b/app/storage/logs/.gitignore
new file mode 100644
index 0000000..c96a04f
--- /dev/null
+++ b/app/storage/logs/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/storage/meta/.gitignore
----------------------------------------------------------------------
diff --git a/app/storage/meta/.gitignore b/app/storage/meta/.gitignore
new file mode 100644
index 0000000..c96a04f
--- /dev/null
+++ b/app/storage/meta/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/storage/sessions/.gitignore
----------------------------------------------------------------------
diff --git a/app/storage/sessions/.gitignore b/app/storage/sessions/.gitignore
new file mode 100644
index 0000000..c96a04f
--- /dev/null
+++ b/app/storage/sessions/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/storage/views/.gitignore
----------------------------------------------------------------------
diff --git a/app/storage/views/.gitignore b/app/storage/views/.gitignore
new file mode 100644
index 0000000..c96a04f
--- /dev/null
+++ b/app/storage/views/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/tests/ExampleTest.php
----------------------------------------------------------------------
diff --git a/app/tests/ExampleTest.php b/app/tests/ExampleTest.php
new file mode 100755
index 0000000..62387de
--- /dev/null
+++ b/app/tests/ExampleTest.php
@@ -0,0 +1,17 @@
+<?php
+
+class ExampleTest extends TestCase {
+
+	/**
+	 * A basic functional test example.
+	 *
+	 * @return void
+	 */
+	public function testBasicExample()
+	{
+		$crawler = $this->client->request('GET', '/');
+
+		$this->assertTrue($this->client->getResponse()->isOk());
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/tests/TestCase.php
----------------------------------------------------------------------
diff --git a/app/tests/TestCase.php b/app/tests/TestCase.php
new file mode 100755
index 0000000..d367fe5
--- /dev/null
+++ b/app/tests/TestCase.php
@@ -0,0 +1,19 @@
+<?php
+
+class TestCase extends Illuminate\Foundation\Testing\TestCase {
+
+	/**
+	 * Creates the application.
+	 *
+	 * @return \Symfony\Component\HttpKernel\HttpKernelInterface
+	 */
+	public function createApplication()
+	{
+		$unitTesting = true;
+
+		$testEnvironment = 'testing';
+
+		return require __DIR__.'/../../bootstrap/start.php';
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/account/create.blade.php
----------------------------------------------------------------------
diff --git a/app/views/account/create.blade.php b/app/views/account/create.blade.php
new file mode 100755
index 0000000..9feb720
--- /dev/null
+++ b/app/views/account/create.blade.php
@@ -0,0 +1,121 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+
+<div class="col-md-offset-4 col-md-4">
+    <div class="page-header">
+        <h3>Create New Account
+            <small>
+                <small> (Already registered? <a href="login">Log in</a>)</small>
+            </small>
+        </h3>
+    </div>
+    @if ($errors->has())
+        
+            @foreach ($errors->all() as $error)
+                {{ Utilities::print_error_message($error) }}        
+            @endforeach
+        
+        @endif
+
+    <form action="create" method="post" role="form">
+        
+    @if( Session::has('username_exists'))
+            {{ Utilities::print_error_message('The username you entered is already in use. Please select another.') }}
+    @endif
+    <?php
+    Session::forget("username_exists");
+    ?>
+        <div class="form-group required"><label class="control-label">Username</label>
+
+            <div><input class="form-control" id="username" minlength="6" maxlength="30" name="username"
+                        placeholder="Username" required="required" type="text"  value="{{Input::old('username') }}"/></div>
+        </div>
+        <div class="form-group required"><label class="control-label">Password</label>
+
+            <div><input class="form-control" id="password" minlength="6" name="password" placeholder="Password"
+                        required="required" title="" type="password"/></div>
+        </div>
+        <div class="form-group required"><label class="control-label">Password (again)</label>
+
+            <div><input class="form-control" id="confirm_password" name="confirm_password"
+                        placeholder="Password (again)" required="required" title="" type="password"/>
+            </div>
+        </div>
+        <div class="form-group required"><label class="control-label">E-mail</label>
+
+            <div><input class="form-control" id="email" name="email" placeholder="E-mail"
+                        required="required" title="" type="email"   value="{{Input::old('email') }}"/></div>
+        </div>
+        <div class="form-group required"><label class="control-label">First Name</label>
+
+            <div><input class="form-control" id="first_name" maxlength="30" name="first_name"
+                        placeholder="First Name" required="required" title="" type="text"   value="{{Input::old('first_name') }}"/></div>
+        </div>
+        <div class="form-group required"><label class="control-label">Last Name</label>
+
+            <div><input class="form-control" id="last_name" maxlength="30" name="last_name"
+                        placeholder="Last Name" required="required" title="" type="text"   value="{{Input::old('last_name') }}"/></div>
+        </div>
+        <div class="form-group"><label class="control-label">Organization</label>
+
+            <div><input class="form-control" id="organization" name="organization"
+                        placeholder="Organization" title="" type="text"   value="{{Input::old('organization') }}"/>
+            </div>
+        </div>
+        <div class="form-group"><label class="control-label">Address</label>
+
+            <div><input class="form-control" id="address" name="address"
+                        placeholder="Address" title="" type="text"   value="{{Input::old('address') }}"/>
+            </div>
+        </div>
+        <div class="form-group"><label class="control-label">Country</label>
+
+            <div><input class="form-control" id="country" name="country"
+                        placeholder="Country" title="" type="text"   value="{{Input::old('country') }}"/>
+            </div>
+        </div>
+        <div class="form-group"><label class="control-label">Telephone</label>
+
+            <div><input class="form-control" id="telephone" name="telephone"
+                        placeholder="Telephone" title="" type="tel"   value="{{Input::old('telephone') }}"/>
+            </div>
+        </div>
+        <div class="form-group"><label class="control-label">Mobile</label>
+
+            <div><input class="form-control" id="mobile" name="mobile"
+                        placeholder="Mobile" title="" type="tel"   value="{{Input::old('mobile') }}"/>
+            </div>
+        </div>
+        <div class="form-group"><label class="control-label">IM</label>
+
+            <div><input class="form-control" id="im" name="im"
+                        placeholder="IM" title="" type="text"   value="{{Input::old('im') }}"/>
+            </div>
+        </div>
+        <div class="form-group"><label class="control-label">URL</label>
+
+            <div><input class="form-control" id="url" name="url"
+                        placeholder="URL" title="" type="text"   value="{{Input::old('url') }}"/>
+            </div>
+        </div>
+        <br/>
+        <input name="Submit" type="submit" class="btn btn-primary btn-block" value="Create">
+    </form>
+
+    <style media="screen" type="text/css">
+        .form-group.required .control-label:after {
+            content: " *";
+            color: red;
+        }
+    </style>
+    <br/><br/><br/>
+</div>
+</body>
+
+@stop
+

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/account/forgot-password.blade.php
----------------------------------------------------------------------
diff --git a/app/views/account/forgot-password.blade.php b/app/views/account/forgot-password.blade.php
new file mode 100644
index 0000000..b9c8274
--- /dev/null
+++ b/app/views/account/forgot-password.blade.php
@@ -0,0 +1,18 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+
+<div class="col-md-offset-3 col-md-6">
+
+<h3> Did you forget the password to your account? </h3>
+<h4> Please enter your email id, you registered with.</h4>
+<div class="form-group form-horizontal">
+	<div class="col-md-8"><input type="email" value="" class="form-control" placeholder="email"/></div>
+	<div class="col-md-2"><input type="submit" class="form-control btn btn-primary"value="Submit"/></div>
+</div>
+
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/account/login.blade.php
----------------------------------------------------------------------
diff --git a/app/views/account/login.blade.php b/app/views/account/login.blade.php
new file mode 100755
index 0000000..0e13cd0
--- /dev/null
+++ b/app/views/account/login.blade.php
@@ -0,0 +1,44 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+
+    <div class="col-md-offset-4 col-md-4">
+
+        <h3>
+            Login
+            <small>
+                <small> (Not registered? <a href="create">Create account</a>)</small>
+            </small>
+        </h3>
+
+        
+
+        <form action="login" method="post" role="form">
+            @if( Session::has("invalid-credentials") )
+                {{ Utilities::print_error_message('Invalid username or password. Please try again.') }}
+            @endif
+            <?php
+            Session::forget( "invalid-credentials");
+            ?>
+
+            <div class="form-group">
+                <label class="sr-only" for="username">Username</label>
+                <input type="text" class="form-control" name="username" placeholder="Username" autofocus required>
+            </div>
+            <div class="form-group">
+                <label class="sr-only" for="password">Password</label>
+                <input type="password" class="form-control" name="password" placeholder="Password" required>
+            </div>
+            <input name="Submit" type="submit" class="btn btn-primary btn-block" value="Sign in">
+        </form>
+
+            <small>
+                <small> (Forgot Password? Click <a href="{{URL::to('/') }}/forgot-password">here</a>)</small>
+            </small>
+    </div>
+
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/admin/dashboard.blade.php
----------------------------------------------------------------------
diff --git a/app/views/admin/dashboard.blade.php b/app/views/admin/dashboard.blade.php
new file mode 100644
index 0000000..0fd2ffc
--- /dev/null
+++ b/app/views/admin/dashboard.blade.php
@@ -0,0 +1,115 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+<div class="container">
+    <div class="col-md-12">
+        @if( Session::has("message"))
+            <div class="row">
+                <div class="alert alert-success alert-dismissible" role="alert">
+                    <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+                    {{ Session::get("message") }}
+                </div>
+            </div>
+            {{ Session::forget("message") }}
+        @endif
+
+        <div class="row text-center">
+            <h1>Admin Console</h1>
+        </div>
+        <div class="row text-center admin-options">
+
+        <div class="row">
+            <a href="{{URL::to('/')}}/manage/users">
+                <div class="col-md-3 well">
+                    <div class="col-md-12">
+                        <span class="glyphicon glyphicon-user"></span>
+                    </div>
+                    <div class="col-md-12">
+                        Users
+                    </div>
+                </div>
+            </a>
+
+            <a href="{{URL::to('/')}}/admin/dashboard">
+                <div class=" col-md-offset-1 col-md-3 well">
+                    <div class="col-md-12">
+                        <span class="glyphicon glyphicon-eye-open"></span>
+                    </div>
+                    <div class="col-md-12">
+                        Admins
+                    </div>
+                </div>
+            </a>
+
+            <a href="{{URL::to('/')}}/cr/browse">
+                <div class=" col-md-offset-1 col-md-3 well">
+                    <div class="col-md-12">
+                        <span class="glyphicon glyphicon-briefcase"></span>
+                    </div>
+                    <div class="col-md-12">
+                        Resources
+                    </div>
+                </div>
+            </a>
+        </div>
+
+        <div class="row">
+            <div class="col-md-3 well">
+                <div class="col-md-12">
+                    <span class="glyphicon glyphicon-tasks"></span>
+                </div>
+                <div class="col-md-12">
+                    Application Catalog
+                </div>
+                <select  onchange="location = this.options[this.selectedIndex].value;">
+                    <option>-- Select --</option>
+                    <option value="{{URL::to('/')}}/app/interface">Interface</option>
+                    <option value="{{URL::to('/')}}/app/module">Module</option>
+                    <option value="{{URL::to('/')}}/app/deployment">Deployment</option>
+                </select>
+            </div>
+
+                <div class=" col-md-offset-1 col-md-3 well">
+                    <div class="col-md-12">
+                        <span class="glyphicon glyphicon-sort"></span>
+                    </div>
+                    <div class="col-md-12">
+                        Gateways
+                    </div>
+                    <select  onchange="location = this.options[this.selectedIndex].value;">
+                        <option>-- Select --</option>
+                        <option value="{{URL::to('/')}}/gp/create">Create</option>
+                        <option value="{{URL::to('/')}}/gp/browse">Browse</option>
+                    </select>
+                </div>
+
+                <div class=" col-md-offset-1 col-md-3 well">
+                    <div class="col-md-12">
+                        <span class="glyphicon glyphicon-list-alt"></span>
+                    </div>
+                    <div class="col-md-12">
+                        Reports
+                    </div>
+                </div>
+            </div>
+
+            <div class="row">
+                <div class="col-md-3 well">
+                    <div class="col-md-12">
+                        <span class="glyphicon glyphicon-question-sign"></span>
+                    </div>
+                    <div class="col-md-12">
+                        Support
+                    </div>
+                </div>
+            </div>
+
+        </div>
+    </div>
+</div>
+
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/admin/manage-admin.blade.php
----------------------------------------------------------------------
diff --git a/app/views/admin/manage-admin.blade.php b/app/views/admin/manage-admin.blade.php
new file mode 100644
index 0000000..35fbaee
--- /dev/null
+++ b/app/views/admin/manage-admin.blade.php
@@ -0,0 +1,196 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+<div class="container">
+    <div class="col-md-12">
+        @if( Session::has("message"))
+            <div class="row">
+                <div class="alert alert-success alert-dismissible" role="alert">
+                    <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+                    {{ Session::get("message") }}
+                </div>
+            </div>
+            {{ Session::forget("message") }}
+        @endif
+        <div class="panel-group" id="accordion">
+
+        <!-- Super Admin Users have access to Scigap Administration -->
+          <div class="panel panel-default">
+            <div class="panel-heading">
+              <h4 class="panel-title">
+                <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
+                  Scigap Administration
+                </a>
+              </h4>
+            </div>
+            <div id="collapseOne" class="panel-collapse collapse in">
+                <div class="panel-body">
+                    <h1>Add a User to Admin</h1>
+                    <form action="{{URL::to('/')}}/admin/adduser" method="POST" role="form" enctype="multipart/form-data">
+
+                        <div class="form-group required">
+                            <label for="experiment-name" class="control-label">Enter Username</label>
+                            <input type="text" class="form-control" name="username" id="experiment-name" placeholder="username" autofocus required="required">
+                        </div>
+                        <div class="btn-toolbar">
+                            <input name="add" type="submit" class="btn btn-primary" value="Add User">
+                        </div>   
+                    </form>
+                </div>
+            </div>
+          </div>
+        <!-- Scigap Administration Ends -->
+
+        <!-- Gateway Administration can be accessed by Super Admins and Gateway Admins can access their particular gateway -->
+        <div class="panel panel-default">
+            <div class="panel-heading">
+              <h4 class="panel-title">
+                <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">
+                    Gateways Administration
+                </a>
+              </h4>
+            </div>
+            <div id="collapseThree" class="panel-collapse collapse">
+                <div class="panel-body">
+                    <div class="row">
+
+                        <div class="col-md-6">
+                            <h3>Existing Gateway Resource Profiles :</h3>
+                        </div>
+                        <div class="col-md-6" style="margin-top:3.5%">
+                            <input type="text" class="col-md-12 filterinput" placeholder="Search by Gateway Name" />
+                        </div>
+                    </div>
+                    <div class="panel-group" id="accordion2">
+                    @foreach( $gatewayProfiles as $indexGP => $gp )
+                        <div class="panel panel-default">
+                            <div class="panel-heading">
+                                <h4 class="panel-title">
+                                    <a class="accordion-toggle collapsed gateway-name" data-toggle="collapse" data-parent="#accordion2" href="#collapse-gateway-{{$indexGP}}">
+                                    {{ $gp->gatewayName }}
+                                    </a>
+                                    <div class="pull-right col-md-2 gateway-options fade">
+                                        <span class="glyphicon glyphicon-pencil edit-gateway" style="cursor:pointer;" data-toggle="modal" data-target="#edit-gateway-block" data-gp-id="{{ $gp->gatewayID }}" data-gp-name="{{ $gp->gatewayName }}" data-gp-desc="{{ $gp->gatewayDescription }}"></span>
+                                        <span class="glyphicon glyphicon-trash delete-gateway" style="cursor:pointer;" data-toggle="modal" data-target="#delete-gateway-block" data-gp-name="{{$gp->gatewayName}}" data-gp-id="{{ $gp->gatewayID }}"></span>
+                                    </div>
+                                </h4>
+                            </div>
+                            <div id="collapse-gateway-{{$indexGP}}" class="panel-collapse collapse">
+                                <div class="panel-body">
+                                    <div class="app-interface-block">
+                                        <h5>{{ $gp->gatewayDescription}}</h5>
+                                        <hr/>
+                                        <div class="row">
+                                            <div class="col-md-10">
+                                                <h4><span class="glyphicon glyphicon-plus"></span> Add a user as Admin to this Gateway</h4>
+                                                <form action="{{URL::to('/')}}/admin/addgatewayadmin" method="POST" role="form" enctype="multipart/form-data">
+                                                    <div class="form-group required">
+                                                        <label for="experiment-name" class="control-label">Enter Username</label>
+                                                        <input type="text" class="form-control" name="username" id="experiment-name" placeholder="username" autofocus required="required">
+                                                        <input type="hidden" name="gateway_name" value="{{ $gp->gatewayName }}"/>
+                                                    </div>
+                                                    <div class="btn-toolbar">
+                                                        <input name="add" type="submit" class="btn btn-primary" value="Add Admin"/>
+                                                    </div>   
+                                                </form>
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    @endforeach
+                    </div>
+                </div>
+            </div>
+          </div>
+
+        <!-- Super Admin Users have access to Role Administration -->
+          <div class="panel panel-default">
+            <div class="panel-heading">
+              <h4 class="panel-title">
+                <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">
+                  Role Adminstration
+                </a>
+              </h4>
+            </div>
+            <div id="collapseTwo" class="panel-collapse collapse">
+                <div class="panel-body">
+                    <h1>Existing Roles</h1>
+                    <table class="table table-condensed">
+                    @foreach( $roles as $role)
+                        <tr>
+                            <td>{{ $role }}</td>
+                            @if( $role != "admin")
+                                <td><a href=""><span class="glyphicon glyphicon-pencil"></span></a></td>
+                                <td><span class="glyphicon glyphicon-remove"></span></td>
+                            @endif
+                        </tr>
+                    @endforeach
+                    </table>
+                    <h1>Add a new Role</h1>
+                    <form id="role-form" action="{{URL::to('/')}}/admin/addrole" method="POST" role="form" enctype="multipart/form-data">
+                        <div class="form-group form-horizontal required col-md-2">
+                            <label for="experiment-name" class="control-label">Enter Role</label>
+                        </div>
+                        <div class="form-group form-horizontal required col-md-4">
+                            <input type="text" class="form-control input-small role-name" name="role" placeholder="username" autofocus required="required">
+                        </div>
+                        <div class="form-group form-horizontal col-md-4">
+                            <input name="add" type="submit" class="btn btn-primary add-role" value="Add">
+                        </div>   
+                    </form>
+                    <input type="hidden" id="roles" value="{{ htmlentities( json_encode( $roles) ) }}"/>
+                </div>
+            </div>
+          </div>
+          <!-- Role Administration complete -->
+
+          <!-- Admins will have access to their settings -->
+          <div class="panel panel-default">
+            <div class="panel-heading">
+              <h4 class="panel-title">
+                <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">
+                    Settings
+                </a>
+              </h4>
+            </div>
+            <div id="collapseThree" class="panel-collapse collapse">
+                <div class="panel-body">
+                    some settngs should come here.
+                </div>
+            </div>
+          </div>
+          <!--Settings complete -->
+
+        </div>
+    </div>
+</div>
+
+@stop
+
+
+@section('scripts')
+    @parent
+    <script>
+    // Checking if role already exists.
+    $(".add-role").click( function( e){
+        e.preventDefault();
+        var roles = $.parseJSON( $("#roles").val() );
+        if( $.inArray( $.trim( $(".role-name").val() ), roles ) != -1 )
+        {
+            console.log( $(this).parent().find(".alert").length );
+            if( ! $(this).parent().parent().find(".alert").length )
+            {
+                $(this).parent().after("<div class='col-md-12 alert alert-danger'>This role already exists. Please pick another role.</span>");
+            }
+        }
+        else
+            $("#role-form").submit();
+    })
+    </script>
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/admin/manage-credentials.blade.php
----------------------------------------------------------------------
diff --git a/app/views/admin/manage-credentials.blade.php b/app/views/admin/manage-credentials.blade.php
new file mode 100644
index 0000000..2183739
--- /dev/null
+++ b/app/views/admin/manage-credentials.blade.php
@@ -0,0 +1,164 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+    {{ HTML::style('css/admin.css')}}
+@stop
+
+@section('content')
+
+    <div id="wrapper">
+        <!-- Sidebar Menu Items - These collapse to the responsive navigation menu on small screens -->
+        @include( 'partials/dashboard-block')
+        <div id="page-wrapper">
+
+            <div class="container-fluid">
+                <div class="col-md-12">
+                    @if( Session::has("message"))
+                        <div class="row">
+                            <div class="alert alert-success alert-dismissible" role="alert">
+                                <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+                                {{ Session::get("message") }}
+                            </div>
+                        </div>
+                        {{ Session::forget("message") }}
+                    @endif
+
+                    <h1 class="text-center">SSH Keys</h1>
+
+                    <table class="table table-bordered table-condensed">
+                        <tr>
+                            <th class="text-center">
+                                Token</th>
+                            <th class="text-center">Public Key</th>
+                        </tr>
+                        @foreach( $tokens as $token)
+                        <tr>
+                            <td class="role-name">{{ $token }}</td>
+                            <td>
+                                {{ $public-key }}
+                            </td>
+                        </tr>
+                        @endforeach
+                        <tr>
+                            <td>Some token</td>
+                            <td>$ cat ~/.ssh/id_rsa.pub
+ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
+GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
+Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
+t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
+mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
+NrRFi9wrf+M7Q== schacon@mylaptop.local</td>
+                        </tr>
+                    </table>
+                    <table class="table">
+                        <tr class="text-center table-condensed">
+                            <td><button class="btn btn-default">Generate a new token</button></td>
+                        </tr>
+                    </table>
+
+                    <div class="row">
+                        <h1 class="text-center">My Proxy Credentials</h1>
+
+                        <div class="col-md-offset-3 col-md-6">
+                            <table class="table table-striped table-condensed">
+                                <tr>
+                                    <td>My Proxy Server</td>
+                                    <td><input type="text" class="form-control" placeholder="" value=""/></td>
+                                </tr>
+                                <tr>
+                                    <td>Username</td>
+                                    <td><input type="text" class="form-control" placeholder="" value=""/></td>
+                                </tr>
+                                <tr>
+                                    <td>Passphrase</td>
+                                    <td><input type="text" class="form-control" placeholder="" value=""/></td>
+                                </tr>
+                            </table>
+                            <table class="table">
+                                <tr class="text-center table-condensed">
+                                    <td><button class="btn btn-default">Submit</button></td>
+                                </tr>
+                            </table>
+                        </div>
+                    </div>
+
+                    <h1 class="text-center">Amazon Credentials</h1>
+
+                    <table class="table table-striped table-condensed">
+                        <tr class="text-center">
+                            <td>Under Development</td>
+                        </tr>
+                    </table>
+
+                    <h1 class="text-center">OAuth MyProxy</h1>
+
+                    <table class="table table-striped table-condensed">
+                        <tr class="text-center">
+                            <td>Under Development</td>
+                        </tr>
+                    </table>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="modal fade" id="delete-role-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+        <div class="modal-dialog">
+
+            <form action="{{URL::to('/')}}/admin/deleterole" method="POST">
+                <div class="modal-content">
+                    <div class="modal-header">
+                        <h3 class="text-center">Delete Role Confirmation</h3>
+                    </div>
+                    <div class="modal-body">
+                        <input type="hidden" class="form-control delete-roleName" name="role"/>
+                        Do you really want to delete the role - <span class="delete-role-name"></span>
+                    </div>
+                    <div class="modal-footer">
+                        <div class="form-group">
+                            <input type="submit" class="btn btn-danger" value="Delete"/>
+                            <input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+                        </div>
+                    </div>
+                </div>
+
+            </form>
+
+
+        </div>
+    </div>
+
+
+@stop
+
+@section('scripts')
+    @parent
+    <script>
+        $(".toggle-add-role").click( function(){
+            $(".add-role").slideDown();
+        });
+
+        $(".edit-role-name").click( function(){
+            var roleNameSpace = $(this).parent().parent().find(".role-name");
+            if( roleNameSpace.find(".edit-role-form").length )
+            {
+                roleNameSpace.html( roleNameSpace.find(".original-role-name").val() );
+            }
+            else
+            {
+                var role = roleNameSpace.html();
+                roleNameSpace.html( $(".edit-role").html() );
+                roleNameSpace.find(".original-role-name").val( role );
+                roleNameSpace.find(".new-role-name").val( role );
+            }
+        });
+
+        $(".delete-role").click( function(){
+            $("#delete-role-block").modal("show");
+            var roleName = $(this).parent().parent().find(".role-name").html();
+            $(".delete-role-name").html(roleName);
+            $(".delete-roleName").val(roleName);
+        })
+    </script>
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/admin/manage-experiments.blade.php
----------------------------------------------------------------------
diff --git a/app/views/admin/manage-experiments.blade.php b/app/views/admin/manage-experiments.blade.php
new file mode 100644
index 0000000..0aaddc5
--- /dev/null
+++ b/app/views/admin/manage-experiments.blade.php
@@ -0,0 +1,169 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+    {{ HTML::style('css/admin.css')}}
+@stop
+
+@section('content')
+
+    <div id="wrapper">
+            <!-- Sidebar Menu Items - These collapse to the responsive navigation menu on small screens -->
+            @include( 'partials/dashboard-block')
+        <div id="page-wrapper">
+            <div class="col-md-12">
+                <h3>Experiments</h3>
+            </div>
+            <div class="container-fluid">
+
+                <div class="row">
+                    <!--
+                        <div class="well col-md-2 text-center">
+                            Total 500
+                        </div>
+                    -->
+
+                    <div class="well form-group form-horizontal col-md-12">
+                        <label class="col-md-3">Enter Experiment Id to View Summary :</label>
+                        <div class="col-md-6">
+                            <input type="text" class="form-control experimentId"/>
+                        </div>
+                        <button class="col-md-3 btn btn-primary get-experiment">Get</button>
+                        <div class="loading-img hide text-center"><img src="{{URL::to('/')}}/assets/ajax-loader.gif"/></div>
+
+                        <div class="experiment-info col-md-12">
+                        </div>
+                    </div>
+                </div>
+
+                <div class="row">
+                    <div class="tree">
+                        <ul>
+                            <li>
+                                <span><i class="icon-calendar"></i>Experiment 1</span>
+                                <ul>
+                                    <li>
+                                        <span class="badge badge-success"><i class="icon-minus-sign"></i>Pre Processing</span>
+                                        <ul>
+                                            <li>
+                                                <a href=""><span class="alert alert-success"><i class="icon-time"></i>2015-04-17 15:21:21</span> &ndash;  PGA to Airavata Authentication Successful</a>
+                                            </li>
+                                            <li>
+                                                <a href=""><span class="alert alert-success"><i class="icon-time"></i>2015-04-17 15:21:21</span> &ndash;  Airavata to Resource Authentication Successful</a>
+                                            </li>
+                                        </ul>
+                                    </li>
+                                    <li>
+                                        <span class="badge badge-success"><i class="icon-minus-sign"></i>Input Staging</span>
+                                        <ul>
+                                            <li>
+                                                <span  class="alert alert-success"><i class="icon-time"></i>2015-04-17 15:21:21</span> &ndash; <a href="">PGA to Airavata File Transfer Successful</a>
+                                            </li>
+                                            <li>
+                                                <span  class="alert alert-success"abhi ><i class="icon-time"></i>2015-04-17 15:21:21</span> &ndash; <a href="">Airavata to Resource File Transfer Successful</a>
+                                            </li>
+                                        </ul>
+                                    </li>
+                                    <li>
+                                        <span class="badge badge-warning"><i class="icon-minus-sign"></i>Job Description</span>
+                                        <ul>
+                                            <li>
+                                                <a href=""><span>
+                                                   Long Script of Job Description / PBS Script <br/>
+                                                   <br/>
+                                                    <p>
+                                                        Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean
+                                                    </p>
+                                                 </span></a>
+                                            </li>
+                                        </ul>
+                                    </li>
+                                    <li>
+                                        <span class="badge badge-important"><i class="icon-minus-sign"></i>Execution</span>
+                                        <ul>
+                                            <li>
+                                                <a href=""><span  class="alert alert-success"><i class="icon-time"></i>2015-04-17 15:21:21</span> &ndash; Execution of Job Description - No errors</a>
+                                            </li>
+                                        </ul>
+                                    </li>
+
+                                    <li>
+                                        <span class="badge badge-important"><i class="icon-minus-sign"></i>Experiment Complete</span>
+                                        <ul>
+                                            <li>
+                                                <a href=""><span  class="alert alert-danger"><i class="icon-time"></i>2015-04-17 15:21:21</span> &ndash; Output Transfer from Resource to Airavata UnSuccessful</a>
+                                                <br/>
+                                                <span> Some text about failure</span>
+                                            </li>
+                                            <li>
+                                                <a href=""><span  class="alert alert-danger"><i class="icon-time"></i>2015-04-17 15:21:21</span> &ndash; Output Transfer from Airavata to PGA UnSuccessful</a>
+                                                <br/>
+                                                <span> Some text about failure</span>
+                                            </li>
+                                        </ul>
+                                    </li>
+
+
+                                </ul>
+                            </li>
+                        </ul>
+                    </div>
+                </div>
+            </div>
+            <!-- /.container-fluid -->
+
+        </div>
+        <!-- /#page-wrapper -->
+
+    </div>
+
+@stop
+
+
+@section('scripts')
+    @parent
+    {{ HTML::script('js/gateway.js') }}
+    <script>
+
+        //make first tab of accordion open by default.
+        //temporary fix
+        $("#accordion2").children(".panel").children(".collapse").addClass("in");
+        $(".add-tenant").slideUp();
+        
+        $(".toggle-add-tenant").click( function(){
+            $(".add-tenant").slideDown();
+        });
+
+        $(function () {
+            $('.tree li:has(ul)').addClass('parent_li').find(' > span').attr('title', 'Collapse this branch');
+            $('.tree li.parent_li > span').on('click', function (e) {
+                var children = $(this).parent('li.parent_li').find(' > ul > li');
+                if (children.is(":visible")) {
+                    children.hide('fast');
+                    $(this).attr('title', 'Expand this branch').find(' > i').addClass('icon-plus-sign').removeClass('icon-minus-sign');
+                } else {
+                    children.show('fast');
+                    $(this).attr('title', 'Collapse this branch').find(' > i').addClass('icon-minus-sign').removeClass('icon-plus-sign');
+                }
+                e.stopPropagation();
+            });
+
+            $(".get-experiment").click( function(){
+                $(".loading-img").removeClass("hide");
+                $.ajax({
+                    url:'experiment/summary?expId=' + $(".experimentId").val(),
+                    type: 'get',
+                    success:function( data){
+                        $(".experiment-info").html( data);
+
+                    }
+                }).complete( function(){
+                    $(".loading-img").addClass("hide");
+                });
+            });
+
+            //Experiment stages are under development.
+            $(".tree").parent().addClass("hide");
+        });
+    </script>
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/admin/manage-gateway.blade.php
----------------------------------------------------------------------
diff --git a/app/views/admin/manage-gateway.blade.php b/app/views/admin/manage-gateway.blade.php
new file mode 100644
index 0000000..f7261d1
--- /dev/null
+++ b/app/views/admin/manage-gateway.blade.php
@@ -0,0 +1,228 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+    {{ HTML::style('css/admin.css')}}
+@stop
+
+@section('content')
+
+    <div id="wrapper">
+            <!-- Sidebar Menu Items - These collapse to the responsive navigation menu on small screens -->
+            @include( 'partials/dashboard-block')
+        <div id="page-wrapper">
+            <div class="col-md-12">
+            @if( Session::has("message"))
+                <div class="row">
+                    <div class="alert alert-success alert-dismissible" role="alert">
+                        <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+                        {{ Session::get("message") }}
+                    </div>
+                </div>
+                {{ Session::forget("message") }}
+            @endif
+            </div>
+            <div class="container-fluid">
+
+                    <div class="row">
+
+                        <div class="col-md-6">
+                            @if( Session::has("scigap_admin") )
+                                <h3>Existing Gateways :</h3>
+                            @else
+                                <h3>Gateway Settings</h3>
+                            @endif
+                        </div>
+                        @if( Session::has("scigap_admin"))
+                        <div class="col-md-6" style="margin-top:3.5%">
+                            <input type="text" class="col-md-12 filterinput" placeholder="Search by Gateway Name" />
+                        </div>
+                        @endif
+                    </div>
+                    <div class="panel-group" id="accordion2">
+                    @foreach( $gateways as $indexGP => $gp )
+                        <div class="panel panel-default">
+                            <div class="panel-heading">
+                                <h4 class="panel-title">
+                                    <a class="accordion-toggle collapsed gateway-name" data-toggle="collapse" data-parent="#accordion2" href="#collapse-gateway-{{$indexGP}}">
+                                    {{ $gp->gatewayName }}
+                                    </a>
+                                    <div class="pull-right col-md-2 gateway-options fade">
+                                        <span class="glyphicon glyphicon-pencil edit-gateway" style="cursor:pointer;" data-toggle="modal" data-target="#edit-gateway-block" data-gp-id="{{ $gp->gatewayId }}" data-gp-name="{{ $gp->gatewayName }}"></span>
+                                        <span class="glyphicon glyphicon-trash delete-gateway" style="cursor:pointer;" data-toggle="modal" data-target="#delete-gateway-block" data-gp-name="{{$gp->gatewayName}}" data-gp-id="{{ $gp->gatewayId }}"></span>
+                                    </div>
+                                </h4>
+                            </div>
+                            <div id="collapse-gateway-{{$indexGP}}" class="panel-collapse collapse">
+                                <div class="panel-body">
+                                    <div class="app-interface-block">
+                                        <div class="row">
+                                            <div class="col-md-10">
+                                                <button class="btn btn-default add-cr" data-gpid="{{$gp->gatewayId}}"><span class="glyphicon glyphicon-plus"></span> Add a Compute Resource</button>
+                                            </div>
+                                            <div class="col-md-10">
+                                                @if( isset( $gp->profile->computeResourcePreferences) )
+                                                    <div class="col-md-12">
+                                                        <h3>Existing Compute Resources :</h3>
+                                                    </div>
+                                                <div class="accordion-inner">
+                                                    <div class="panel-group" id="accordion-{{$indexGP}}">
+                                                    @foreach( (array)$gp->profile->computeResourcePreferences as $indexCRP => $crp )
+                                                        <div class="panel panel-default">
+                                                            <div class="panel-heading">
+                                                                <h4 class="panel-title">
+                                                                    <a class="accordion-toggle collapsed gateway-name" data-toggle="collapse" data-parent="#accordion" href="#collapse-crp-{{$indexGP}}-{{$indexCRP}}">
+                                                                    {{ $crp->crDetails->hostName }}
+                                                                    </a>
+                                                                    <div class="pull-right col-md-2 gateway-options fade">
+                                                                        <span class="glyphicon glyphicon-remove remove-resource" style="cursor:pointer;" data-toggle="modal" data-target="#remove-resource-block" data-cr-name="{{$crp->crDetails->hostName}}" data-cr-id="{{$crp->computeResourceId}}" data-gp-id="{{ $gp->gatewayId }}"></span>
+                                                                    </div>
+                                                                </h4>
+                                                            </div>
+                                                            <div id="collapse-crp-{{$indexGP}}-{{$indexCRP}}" class="panel-collapse collapse">
+                                                                <div class="panel-body">
+                                                                    <div class="app-compute-resource-preferences-block">
+                                                                        <form action="{{URL::to('/')}}/gp/update-crp" method="POST">
+                                                                            <input type="hidden" name="gatewayId" id="gatewayId" value="{{$gp->gatewayId}}">
+                                                                            <input type="hidden" name="computeResourceId" id="gatewayId" value="{{$crp->computeResourceId}}">
+                                                                            <div class="form-horizontal">
+                                                                                @include('partials/gateway-preferences', array('computeResource' => $crp->crDetails, 'crData' => $crData, 'preferences'=>$crp, 'show'=>true))
+                                                                            </div>
+                                                                        </form>
+                                                                    </div>
+                                                                </div>
+                                                            </div>
+                                                        </div>
+                                                    @endforeach
+                                                    </div>
+                                                </div>
+                                                @endif
+                                                <!-- 
+                                                Adding a user as admin will shift to roles. Removing from here. 
+                                                <h4><span class="glyphicon glyphicon-plus"></span> Add a user as Admin to this Gateway</h4>
+                                                <form action="{{URL::to('/')}}/admin/addgatewayadmin" method="POST" role="form" enctype="multipart/form-data">
+                                                    <div class="form-group required">
+                                                        <label for="experiment-name" class="control-label">Enter Username</label>
+                                                        <input type="text" class="form-control" name="username" id="experiment-name" placeholder="username" autofocus required="required">
+                                                        <input type="hidden" name="gateway_name" value="{{ $gp->gatewayName }}"/>
+                                                    </div>
+                                                    <div class="btn-toolbar">
+                                                        <input name="add" type="submit" class="btn btn-primary" value="Add Admin"/>
+                                                    </div>   
+                                                </form>
+                                                -->
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    @endforeach
+                    </div>
+                @if( Session::has("scigap_admin"))
+                <div class="col-md-12">
+                    <button type="button" class="btn btn-default toggle-add-tenant"><span class="glyphicon glyphicon-plus"></span>Add a new gateway</button>
+                </div>
+                <div class="add-tenant col-md-6">
+                    <div class="form-group">
+                        <label>Enter Domain Name</label>
+                        <input type="text" class="form-control"/>
+                    </div>
+                    <div class="form-group">
+                        <label>Enter Admin Username</label>
+                        <input type="text" class="form-control"/>
+                    </div>
+                    <div class="form-group">
+                        <label>Enter Admin Password</label>
+                        <input type="text" class="form-control"/>
+                    </div>
+                    <div class="form-group">
+                        <label>Re-enter Admin Password</label>
+                        <input type="text" class="form-control"/>
+                    </div>
+                    <div class="form-group">
+                        <input type="submit" class="form-control btn btn-primary" value="Register" />
+                    </div>
+                </div>
+                @endif
+
+            </div>
+            <!-- /.container-fluid -->
+
+        </div>
+        <!-- /#page-wrapper -->
+
+    </div>
+
+
+<div class="add-compute-resource-block hide">
+    <div class="well">
+        <form action="{{URL::to('/')}}/gp/add-crp" method="POST">
+            <input type="hidden" name="gatewayId" id="gatewayId" value="">
+            <div class="input-group">
+                <select name="computeResourceId" class="cr-select form-control">
+                    <option value="">Select a compute Resource and set its preferences</option>
+                    @foreach( (array)$computeResources as $index => $cr)
+                    <option value="{{ $cr->computeResourceId}}">{{ $cr->hostName }}</option>
+                    @endforeach
+                </select>
+                <span class="input-group-addon remove-cr" style="cursor:pointer;">x</span>
+            </div>
+            <div class="pref-space form-horizontal"></div>
+        </form> 
+    </div>
+</div>
+
+
+<!-- Remove a Compute Resource from a Gateway -->
+<div class="modal fade" id="remove-resource-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+    <div class="modal-dialog">
+
+        <form action="{{URL::to('/')}}/gp/remove-cr" method="POST">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <h3 class="text-center">Remove Compute Resource Confirmation</h3>
+                </div>
+                <div class="modal-body">
+                    <input type="hidden" class="form-control remove-crId" name="rem-crId"/>
+                    <input type="hidden" class="form-control cr-gpId" name="gpId"/>
+
+                    Do you really want to remove the Compute Resource, <span class="remove-cr-name"> </span>from the selected Gateway?
+                </div>
+                <div class="modal-footer">
+                    <div class="form-group">
+                        <input type="submit" class="btn btn-danger" value="Remove"/>
+                        <input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+                    </div>
+                </div>
+            </div>
+
+        </form>
+    </div>
+</div>
+
+<!-- contains all compute resource choices that might get selected on adding a new one to a gateway -->
+@foreach( (array)$computeResources as $index => $cr)
+    @include('partials/gateway-preferences', array('computeResource' => $cr, 'crData' => $crData))
+@endforeach
+
+
+
+@stop
+
+
+@section('scripts')
+    @parent
+    {{ HTML::script('js/gateway.js') }}
+    <script>
+
+        //make first tab of accordion open by default.
+        //temporary fix
+        $("#accordion2").children(".panel").children(".collapse").addClass("in");
+        $(".add-tenant").slideUp();
+        
+        $(".toggle-add-tenant").click( function(){
+            $(".add-tenant").slideDown();
+        });
+    </script>
+@stop
\ No newline at end of file


[42/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/Airavata/Model/Messaging/Event/Types.php
----------------------------------------------------------------------
diff --git a/app/libraries/Airavata/Model/Messaging/Event/Types.php b/app/libraries/Airavata/Model/Messaging/Event/Types.php
new file mode 100644
index 0000000..035e249
--- /dev/null
+++ b/app/libraries/Airavata/Model/Messaging/Event/Types.php
@@ -0,0 +1,1680 @@
+<?php
+namespace Airavata\Model\Messaging\Event;
+
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+use Thrift\Base\TBase;
+use Thrift\Type\TType;
+use Thrift\Type\TMessageType;
+use Thrift\Exception\TException;
+use Thrift\Exception\TProtocolException;
+use Thrift\Protocol\TProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
+use Thrift\Exception\TApplicationException;
+
+
+final class MessageLevel {
+  const INFO = 0;
+  const DEBUG = 1;
+  const ERROR = 2;
+  const ACK = 3;
+  static public $__names = array(
+    0 => 'INFO',
+    1 => 'DEBUG',
+    2 => 'ERROR',
+    3 => 'ACK',
+  );
+}
+
+final class MessageType {
+  const EXPERIMENT = 0;
+  const TASK = 1;
+  const WORKFLOWNODE = 2;
+  const JOB = 3;
+  const LAUNCHTASK = 4;
+  const TERMINATETASK = 5;
+  const TASKOUTPUT = 6;
+  static public $__names = array(
+    0 => 'EXPERIMENT',
+    1 => 'TASK',
+    2 => 'WORKFLOWNODE',
+    3 => 'JOB',
+    4 => 'LAUNCHTASK',
+    5 => 'TERMINATETASK',
+    6 => 'TASKOUTPUT',
+  );
+}
+
+class ExperimentStatusChangeEvent {
+  static $_TSPEC;
+
+  public $state = null;
+  public $experimentId = null;
+  public $gatewayId = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'state',
+          'type' => TType::I32,
+          ),
+        2 => array(
+          'var' => 'experimentId',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'gatewayId',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['state'])) {
+        $this->state = $vals['state'];
+      }
+      if (isset($vals['experimentId'])) {
+        $this->experimentId = $vals['experimentId'];
+      }
+      if (isset($vals['gatewayId'])) {
+        $this->gatewayId = $vals['gatewayId'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ExperimentStatusChangeEvent';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->state);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->experimentId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->gatewayId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ExperimentStatusChangeEvent');
+    if ($this->state !== null) {
+      $xfer += $output->writeFieldBegin('state', TType::I32, 1);
+      $xfer += $output->writeI32($this->state);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->experimentId !== null) {
+      $xfer += $output->writeFieldBegin('experimentId', TType::STRING, 2);
+      $xfer += $output->writeString($this->experimentId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->gatewayId !== null) {
+      $xfer += $output->writeFieldBegin('gatewayId', TType::STRING, 3);
+      $xfer += $output->writeString($this->gatewayId);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class WorkflowIdentifier {
+  static $_TSPEC;
+
+  public $workflowNodeId = null;
+  public $experimentId = null;
+  public $gatewayId = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'workflowNodeId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'experimentId',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'gatewayId',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['workflowNodeId'])) {
+        $this->workflowNodeId = $vals['workflowNodeId'];
+      }
+      if (isset($vals['experimentId'])) {
+        $this->experimentId = $vals['experimentId'];
+      }
+      if (isset($vals['gatewayId'])) {
+        $this->gatewayId = $vals['gatewayId'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'WorkflowIdentifier';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->workflowNodeId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->experimentId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->gatewayId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('WorkflowIdentifier');
+    if ($this->workflowNodeId !== null) {
+      $xfer += $output->writeFieldBegin('workflowNodeId', TType::STRING, 1);
+      $xfer += $output->writeString($this->workflowNodeId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->experimentId !== null) {
+      $xfer += $output->writeFieldBegin('experimentId', TType::STRING, 2);
+      $xfer += $output->writeString($this->experimentId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->gatewayId !== null) {
+      $xfer += $output->writeFieldBegin('gatewayId', TType::STRING, 3);
+      $xfer += $output->writeString($this->gatewayId);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class WorkflowNodeStatusChangeEvent {
+  static $_TSPEC;
+
+  public $state = null;
+  public $workflowNodeIdentity = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'state',
+          'type' => TType::I32,
+          ),
+        2 => array(
+          'var' => 'workflowNodeIdentity',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Messaging\Event\WorkflowIdentifier',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['state'])) {
+        $this->state = $vals['state'];
+      }
+      if (isset($vals['workflowNodeIdentity'])) {
+        $this->workflowNodeIdentity = $vals['workflowNodeIdentity'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'WorkflowNodeStatusChangeEvent';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->state);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->workflowNodeIdentity = new \Airavata\Model\Messaging\Event\WorkflowIdentifier();
+            $xfer += $this->workflowNodeIdentity->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('WorkflowNodeStatusChangeEvent');
+    if ($this->state !== null) {
+      $xfer += $output->writeFieldBegin('state', TType::I32, 1);
+      $xfer += $output->writeI32($this->state);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->workflowNodeIdentity !== null) {
+      if (!is_object($this->workflowNodeIdentity)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('workflowNodeIdentity', TType::STRUCT, 2);
+      $xfer += $this->workflowNodeIdentity->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class TaskIdentifier {
+  static $_TSPEC;
+
+  public $taskId = null;
+  public $workflowNodeId = null;
+  public $experimentId = null;
+  public $gatewayId = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'taskId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'workflowNodeId',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'experimentId',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'gatewayId',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['taskId'])) {
+        $this->taskId = $vals['taskId'];
+      }
+      if (isset($vals['workflowNodeId'])) {
+        $this->workflowNodeId = $vals['workflowNodeId'];
+      }
+      if (isset($vals['experimentId'])) {
+        $this->experimentId = $vals['experimentId'];
+      }
+      if (isset($vals['gatewayId'])) {
+        $this->gatewayId = $vals['gatewayId'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'TaskIdentifier';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->taskId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->workflowNodeId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->experimentId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->gatewayId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('TaskIdentifier');
+    if ($this->taskId !== null) {
+      $xfer += $output->writeFieldBegin('taskId', TType::STRING, 1);
+      $xfer += $output->writeString($this->taskId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->workflowNodeId !== null) {
+      $xfer += $output->writeFieldBegin('workflowNodeId', TType::STRING, 2);
+      $xfer += $output->writeString($this->workflowNodeId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->experimentId !== null) {
+      $xfer += $output->writeFieldBegin('experimentId', TType::STRING, 3);
+      $xfer += $output->writeString($this->experimentId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->gatewayId !== null) {
+      $xfer += $output->writeFieldBegin('gatewayId', TType::STRING, 4);
+      $xfer += $output->writeString($this->gatewayId);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class TaskStatusChangeEvent {
+  static $_TSPEC;
+
+  public $state = null;
+  public $taskIdentity = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'state',
+          'type' => TType::I32,
+          ),
+        2 => array(
+          'var' => 'taskIdentity',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Messaging\Event\TaskIdentifier',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['state'])) {
+        $this->state = $vals['state'];
+      }
+      if (isset($vals['taskIdentity'])) {
+        $this->taskIdentity = $vals['taskIdentity'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'TaskStatusChangeEvent';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->state);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->taskIdentity = new \Airavata\Model\Messaging\Event\TaskIdentifier();
+            $xfer += $this->taskIdentity->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('TaskStatusChangeEvent');
+    if ($this->state !== null) {
+      $xfer += $output->writeFieldBegin('state', TType::I32, 1);
+      $xfer += $output->writeI32($this->state);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->taskIdentity !== null) {
+      if (!is_object($this->taskIdentity)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('taskIdentity', TType::STRUCT, 2);
+      $xfer += $this->taskIdentity->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class TaskStatusChangeRequestEvent {
+  static $_TSPEC;
+
+  public $state = null;
+  public $taskIdentity = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'state',
+          'type' => TType::I32,
+          ),
+        2 => array(
+          'var' => 'taskIdentity',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Messaging\Event\TaskIdentifier',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['state'])) {
+        $this->state = $vals['state'];
+      }
+      if (isset($vals['taskIdentity'])) {
+        $this->taskIdentity = $vals['taskIdentity'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'TaskStatusChangeRequestEvent';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->state);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->taskIdentity = new \Airavata\Model\Messaging\Event\TaskIdentifier();
+            $xfer += $this->taskIdentity->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('TaskStatusChangeRequestEvent');
+    if ($this->state !== null) {
+      $xfer += $output->writeFieldBegin('state', TType::I32, 1);
+      $xfer += $output->writeI32($this->state);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->taskIdentity !== null) {
+      if (!is_object($this->taskIdentity)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('taskIdentity', TType::STRUCT, 2);
+      $xfer += $this->taskIdentity->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class TaskOutputChangeEvent {
+  static $_TSPEC;
+
+  public $output = null;
+  public $taskIdentity = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'output',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType',
+            ),
+          ),
+        2 => array(
+          'var' => 'taskIdentity',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Messaging\Event\TaskIdentifier',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['output'])) {
+        $this->output = $vals['output'];
+      }
+      if (isset($vals['taskIdentity'])) {
+        $this->taskIdentity = $vals['taskIdentity'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'TaskOutputChangeEvent';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::LST) {
+            $this->output = array();
+            $_size0 = 0;
+            $_etype3 = 0;
+            $xfer += $input->readListBegin($_etype3, $_size0);
+            for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
+            {
+              $elem5 = null;
+              $elem5 = new \Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType();
+              $xfer += $elem5->read($input);
+              $this->output []= $elem5;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->taskIdentity = new \Airavata\Model\Messaging\Event\TaskIdentifier();
+            $xfer += $this->taskIdentity->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('TaskOutputChangeEvent');
+    if ($this->output !== null) {
+      if (!is_array($this->output)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('output', TType::LST, 1);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->output));
+        {
+          foreach ($this->output as $iter6)
+          {
+            $xfer += $iter6->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->taskIdentity !== null) {
+      if (!is_object($this->taskIdentity)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('taskIdentity', TType::STRUCT, 2);
+      $xfer += $this->taskIdentity->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class JobIdentifier {
+  static $_TSPEC;
+
+  public $jobId = null;
+  public $taskId = null;
+  public $workflowNodeId = null;
+  public $experimentId = null;
+  public $gatewayId = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'jobId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'taskId',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'workflowNodeId',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'experimentId',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'gatewayId',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['jobId'])) {
+        $this->jobId = $vals['jobId'];
+      }
+      if (isset($vals['taskId'])) {
+        $this->taskId = $vals['taskId'];
+      }
+      if (isset($vals['workflowNodeId'])) {
+        $this->workflowNodeId = $vals['workflowNodeId'];
+      }
+      if (isset($vals['experimentId'])) {
+        $this->experimentId = $vals['experimentId'];
+      }
+      if (isset($vals['gatewayId'])) {
+        $this->gatewayId = $vals['gatewayId'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'JobIdentifier';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->jobId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->taskId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->workflowNodeId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->experimentId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->gatewayId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('JobIdentifier');
+    if ($this->jobId !== null) {
+      $xfer += $output->writeFieldBegin('jobId', TType::STRING, 1);
+      $xfer += $output->writeString($this->jobId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->taskId !== null) {
+      $xfer += $output->writeFieldBegin('taskId', TType::STRING, 2);
+      $xfer += $output->writeString($this->taskId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->workflowNodeId !== null) {
+      $xfer += $output->writeFieldBegin('workflowNodeId', TType::STRING, 3);
+      $xfer += $output->writeString($this->workflowNodeId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->experimentId !== null) {
+      $xfer += $output->writeFieldBegin('experimentId', TType::STRING, 4);
+      $xfer += $output->writeString($this->experimentId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->gatewayId !== null) {
+      $xfer += $output->writeFieldBegin('gatewayId', TType::STRING, 5);
+      $xfer += $output->writeString($this->gatewayId);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ProcessSubmitEvent {
+  static $_TSPEC;
+
+  public $taskId = null;
+  public $credentialToken = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'taskId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'credentialToken',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['taskId'])) {
+        $this->taskId = $vals['taskId'];
+      }
+      if (isset($vals['credentialToken'])) {
+        $this->credentialToken = $vals['credentialToken'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ProcessSubmitEvent';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->taskId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->credentialToken);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ProcessSubmitEvent');
+    if ($this->taskId !== null) {
+      $xfer += $output->writeFieldBegin('taskId', TType::STRING, 1);
+      $xfer += $output->writeString($this->taskId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->credentialToken !== null) {
+      $xfer += $output->writeFieldBegin('credentialToken', TType::STRING, 2);
+      $xfer += $output->writeString($this->credentialToken);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class TaskSubmitEvent {
+  static $_TSPEC;
+
+  public $experimentId = null;
+  public $taskId = null;
+  public $gatewayId = null;
+  public $tokenId = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'experimentId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'taskId',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'gatewayId',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'tokenId',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['experimentId'])) {
+        $this->experimentId = $vals['experimentId'];
+      }
+      if (isset($vals['taskId'])) {
+        $this->taskId = $vals['taskId'];
+      }
+      if (isset($vals['gatewayId'])) {
+        $this->gatewayId = $vals['gatewayId'];
+      }
+      if (isset($vals['tokenId'])) {
+        $this->tokenId = $vals['tokenId'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'TaskSubmitEvent';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->experimentId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->taskId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->gatewayId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->tokenId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('TaskSubmitEvent');
+    if ($this->experimentId !== null) {
+      $xfer += $output->writeFieldBegin('experimentId', TType::STRING, 1);
+      $xfer += $output->writeString($this->experimentId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->taskId !== null) {
+      $xfer += $output->writeFieldBegin('taskId', TType::STRING, 2);
+      $xfer += $output->writeString($this->taskId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->gatewayId !== null) {
+      $xfer += $output->writeFieldBegin('gatewayId', TType::STRING, 3);
+      $xfer += $output->writeString($this->gatewayId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->tokenId !== null) {
+      $xfer += $output->writeFieldBegin('tokenId', TType::STRING, 4);
+      $xfer += $output->writeString($this->tokenId);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class TaskTerminateEvent {
+  static $_TSPEC;
+
+  public $experimentId = null;
+  public $taskId = null;
+  public $gatewayId = null;
+  public $tokenId = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'experimentId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'taskId',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'gatewayId',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'tokenId',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['experimentId'])) {
+        $this->experimentId = $vals['experimentId'];
+      }
+      if (isset($vals['taskId'])) {
+        $this->taskId = $vals['taskId'];
+      }
+      if (isset($vals['gatewayId'])) {
+        $this->gatewayId = $vals['gatewayId'];
+      }
+      if (isset($vals['tokenId'])) {
+        $this->tokenId = $vals['tokenId'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'TaskTerminateEvent';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->experimentId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->taskId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->gatewayId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->tokenId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('TaskTerminateEvent');
+    if ($this->experimentId !== null) {
+      $xfer += $output->writeFieldBegin('experimentId', TType::STRING, 1);
+      $xfer += $output->writeString($this->experimentId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->taskId !== null) {
+      $xfer += $output->writeFieldBegin('taskId', TType::STRING, 2);
+      $xfer += $output->writeString($this->taskId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->gatewayId !== null) {
+      $xfer += $output->writeFieldBegin('gatewayId', TType::STRING, 3);
+      $xfer += $output->writeString($this->gatewayId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->tokenId !== null) {
+      $xfer += $output->writeFieldBegin('tokenId', TType::STRING, 4);
+      $xfer += $output->writeString($this->tokenId);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class JobStatusChangeEvent {
+  static $_TSPEC;
+
+  public $state = null;
+  public $jobIdentity = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'state',
+          'type' => TType::I32,
+          ),
+        2 => array(
+          'var' => 'jobIdentity',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Messaging\Event\JobIdentifier',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['state'])) {
+        $this->state = $vals['state'];
+      }
+      if (isset($vals['jobIdentity'])) {
+        $this->jobIdentity = $vals['jobIdentity'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'JobStatusChangeEvent';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->state);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->jobIdentity = new \Airavata\Model\Messaging\Event\JobIdentifier();
+            $xfer += $this->jobIdentity->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('JobStatusChangeEvent');
+    if ($this->state !== null) {
+      $xfer += $output->writeFieldBegin('state', TType::I32, 1);
+      $xfer += $output->writeI32($this->state);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->jobIdentity !== null) {
+      if (!is_object($this->jobIdentity)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('jobIdentity', TType::STRUCT, 2);
+      $xfer += $this->jobIdentity->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class JobStatusChangeRequestEvent {
+  static $_TSPEC;
+
+  public $state = null;
+  public $jobIdentity = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'state',
+          'type' => TType::I32,
+          ),
+        2 => array(
+          'var' => 'jobIdentity',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Messaging\Event\JobIdentifier',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['state'])) {
+        $this->state = $vals['state'];
+      }
+      if (isset($vals['jobIdentity'])) {
+        $this->jobIdentity = $vals['jobIdentity'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'JobStatusChangeRequestEvent';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->state);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->jobIdentity = new \Airavata\Model\Messaging\Event\JobIdentifier();
+            $xfer += $this->jobIdentity->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('JobStatusChangeRequestEvent');
+    if ($this->state !== null) {
+      $xfer += $output->writeFieldBegin('state', TType::I32, 1);
+      $xfer += $output->writeI32($this->state);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->jobIdentity !== null) {
+      if (!is_object($this->jobIdentity)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('jobIdentity', TType::STRUCT, 2);
+      $xfer += $this->jobIdentity->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Message {
+  static $_TSPEC;
+
+  public $event = null;
+  public $messageId = "DO_NOT_SET_AT_CLIENTS";
+  public $messageType = null;
+  public $updatedTime = null;
+  public $messageLevel = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'event',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'messageId',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'messageType',
+          'type' => TType::I32,
+          ),
+        4 => array(
+          'var' => 'updatedTime',
+          'type' => TType::I64,
+          ),
+        5 => array(
+          'var' => 'messageLevel',
+          'type' => TType::I32,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['event'])) {
+        $this->event = $vals['event'];
+      }
+      if (isset($vals['messageId'])) {
+        $this->messageId = $vals['messageId'];
+      }
+      if (isset($vals['messageType'])) {
+        $this->messageType = $vals['messageType'];
+      }
+      if (isset($vals['updatedTime'])) {
+        $this->updatedTime = $vals['updatedTime'];
+      }
+      if (isset($vals['messageLevel'])) {
+        $this->messageLevel = $vals['messageLevel'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Message';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->event);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->messageId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->messageType);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::I64) {
+            $xfer += $input->readI64($this->updatedTime);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->messageLevel);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Message');
+    if ($this->event !== null) {
+      $xfer += $output->writeFieldBegin('event', TType::STRING, 1);
+      $xfer += $output->writeString($this->event);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->messageId !== null) {
+      $xfer += $output->writeFieldBegin('messageId', TType::STRING, 2);
+      $xfer += $output->writeString($this->messageId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->messageType !== null) {
+      $xfer += $output->writeFieldBegin('messageType', TType::I32, 3);
+      $xfer += $output->writeI32($this->messageType);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->updatedTime !== null) {
+      $xfer += $output->writeFieldBegin('updatedTime', TType::I64, 4);
+      $xfer += $output->writeI64($this->updatedTime);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->messageLevel !== null) {
+      $xfer += $output->writeFieldBegin('messageLevel', TType::I32, 5);
+      $xfer += $output->writeI32($this->messageLevel);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+$GLOBALS['messagingEvents_CONSTANTS']['DEFAULT_ID'] = "DO_NOT_SET_AT_CLIENTS";
+
+

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/Airavata/Model/Types.php
----------------------------------------------------------------------
diff --git a/app/libraries/Airavata/Model/Types.php b/app/libraries/Airavata/Model/Types.php
new file mode 100644
index 0000000..4e89132
--- /dev/null
+++ b/app/libraries/Airavata/Model/Types.php
@@ -0,0 +1,250 @@
+<?php
+namespace Airavata\Model;
+
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+use Thrift\Base\TBase;
+use Thrift\Type\TType;
+use Thrift\Type\TMessageType;
+use Thrift\Exception\TException;
+use Thrift\Exception\TProtocolException;
+use Thrift\Protocol\TProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
+use Thrift\Exception\TApplicationException;
+
+
+class Workflow {
+  static $_TSPEC;
+
+  public $templateId = "DO_NOT_SET_AT_CLIENTS";
+  public $name = null;
+  public $graph = null;
+  public $image = null;
+  public $workflowInputs = null;
+  public $workflowOutputs = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'templateId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'name',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'graph',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'image',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'workflowInputs',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\AppInterface\InputDataObjectType',
+            ),
+          ),
+        6 => array(
+          'var' => 'workflowOutputs',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType',
+            ),
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['templateId'])) {
+        $this->templateId = $vals['templateId'];
+      }
+      if (isset($vals['name'])) {
+        $this->name = $vals['name'];
+      }
+      if (isset($vals['graph'])) {
+        $this->graph = $vals['graph'];
+      }
+      if (isset($vals['image'])) {
+        $this->image = $vals['image'];
+      }
+      if (isset($vals['workflowInputs'])) {
+        $this->workflowInputs = $vals['workflowInputs'];
+      }
+      if (isset($vals['workflowOutputs'])) {
+        $this->workflowOutputs = $vals['workflowOutputs'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->templateId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->name);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->graph);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->image);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::LST) {
+            $this->workflowInputs = array();
+            $_size0 = 0;
+            $_etype3 = 0;
+            $xfer += $input->readListBegin($_etype3, $_size0);
+            for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
+            {
+              $elem5 = null;
+              $elem5 = new \Airavata\Model\AppCatalog\AppInterface\InputDataObjectType();
+              $xfer += $elem5->read($input);
+              $this->workflowInputs []= $elem5;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::LST) {
+            $this->workflowOutputs = array();
+            $_size6 = 0;
+            $_etype9 = 0;
+            $xfer += $input->readListBegin($_etype9, $_size6);
+            for ($_i10 = 0; $_i10 < $_size6; ++$_i10)
+            {
+              $elem11 = null;
+              $elem11 = new \Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType();
+              $xfer += $elem11->read($input);
+              $this->workflowOutputs []= $elem11;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow');
+    if ($this->templateId !== null) {
+      $xfer += $output->writeFieldBegin('templateId', TType::STRING, 1);
+      $xfer += $output->writeString($this->templateId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->name !== null) {
+      $xfer += $output->writeFieldBegin('name', TType::STRING, 2);
+      $xfer += $output->writeString($this->name);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->graph !== null) {
+      $xfer += $output->writeFieldBegin('graph', TType::STRING, 3);
+      $xfer += $output->writeString($this->graph);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->image !== null) {
+      $xfer += $output->writeFieldBegin('image', TType::STRING, 4);
+      $xfer += $output->writeString($this->image);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->workflowInputs !== null) {
+      if (!is_array($this->workflowInputs)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('workflowInputs', TType::LST, 5);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->workflowInputs));
+        {
+          foreach ($this->workflowInputs as $iter12)
+          {
+            $xfer += $iter12->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->workflowOutputs !== null) {
+      if (!is_array($this->workflowOutputs)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('workflowOutputs', TType::LST, 6);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->workflowOutputs));
+        {
+          foreach ($this->workflowOutputs as $iter13)
+          {
+            $xfer += $iter13->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+$GLOBALS['workflowDataModel_CONSTANTS']['DEFAULT_ID'] = "DO_NOT_SET_AT_CLIENTS";
+
+


[46/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/Airavata/API/Workflow/Workflow.php
----------------------------------------------------------------------
diff --git a/app/libraries/Airavata/API/Workflow/Workflow.php b/app/libraries/Airavata/API/Workflow/Workflow.php
new file mode 100644
index 0000000..4a5833e
--- /dev/null
+++ b/app/libraries/Airavata/API/Workflow/Workflow.php
@@ -0,0 +1,1927 @@
+<?php
+namespace Airavata\API\Workflow;
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+use Thrift\Base\TBase;
+use Thrift\Type\TType;
+use Thrift\Type\TMessageType;
+use Thrift\Exception\TException;
+use Thrift\Exception\TProtocolException;
+use Thrift\Protocol\TProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
+use Thrift\Exception\TApplicationException;
+
+
+interface WorkflowIf {
+  public function getAllWorkflows();
+  public function getWorkflow($workflowTemplateId);
+  public function deleteWorkflow($workflowTemplateId);
+  public function registerWorkflow(\Airavata\Model\Workflow $workflow);
+  public function updateWorkflow($workflowTemplateId, \Airavata\Model\Workflow $workflow);
+  public function getWorkflowTemplateId($workflowName);
+  public function isWorkflowExistWithName($workflowName);
+}
+
+class WorkflowClient implements \Airavata\API\Workflow\WorkflowIf {
+  protected $input_ = null;
+  protected $output_ = null;
+
+  protected $seqid_ = 0;
+
+  public function __construct($input, $output=null) {
+    $this->input_ = $input;
+    $this->output_ = $output ? $output : $input;
+  }
+
+  public function getAllWorkflows()
+  {
+    $this->send_getAllWorkflows();
+    return $this->recv_getAllWorkflows();
+  }
+
+  public function send_getAllWorkflows()
+  {
+    $args = new \Airavata\API\Workflow\Workflow_getAllWorkflows_args();
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getAllWorkflows', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getAllWorkflows', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getAllWorkflows()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Workflow\Workflow_getAllWorkflows_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Workflow\Workflow_getAllWorkflows_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("getAllWorkflows failed: unknown result");
+  }
+
+  public function getWorkflow($workflowTemplateId)
+  {
+    $this->send_getWorkflow($workflowTemplateId);
+    return $this->recv_getWorkflow();
+  }
+
+  public function send_getWorkflow($workflowTemplateId)
+  {
+    $args = new \Airavata\API\Workflow\Workflow_getWorkflow_args();
+    $args->workflowTemplateId = $workflowTemplateId;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getWorkflow', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getWorkflow', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getWorkflow()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Workflow\Workflow_getWorkflow_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Workflow\Workflow_getWorkflow_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("getWorkflow failed: unknown result");
+  }
+
+  public function deleteWorkflow($workflowTemplateId)
+  {
+    $this->send_deleteWorkflow($workflowTemplateId);
+    $this->recv_deleteWorkflow();
+  }
+
+  public function send_deleteWorkflow($workflowTemplateId)
+  {
+    $args = new \Airavata\API\Workflow\Workflow_deleteWorkflow_args();
+    $args->workflowTemplateId = $workflowTemplateId;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'deleteWorkflow', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('deleteWorkflow', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_deleteWorkflow()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Workflow\Workflow_deleteWorkflow_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Workflow\Workflow_deleteWorkflow_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    return;
+  }
+
+  public function registerWorkflow(\Airavata\Model\Workflow $workflow)
+  {
+    $this->send_registerWorkflow($workflow);
+    return $this->recv_registerWorkflow();
+  }
+
+  public function send_registerWorkflow(\Airavata\Model\Workflow $workflow)
+  {
+    $args = new \Airavata\API\Workflow\Workflow_registerWorkflow_args();
+    $args->workflow = $workflow;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'registerWorkflow', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('registerWorkflow', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_registerWorkflow()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Workflow\Workflow_registerWorkflow_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Workflow\Workflow_registerWorkflow_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("registerWorkflow failed: unknown result");
+  }
+
+  public function updateWorkflow($workflowTemplateId, \Airavata\Model\Workflow $workflow)
+  {
+    $this->send_updateWorkflow($workflowTemplateId, $workflow);
+    $this->recv_updateWorkflow();
+  }
+
+  public function send_updateWorkflow($workflowTemplateId, \Airavata\Model\Workflow $workflow)
+  {
+    $args = new \Airavata\API\Workflow\Workflow_updateWorkflow_args();
+    $args->workflowTemplateId = $workflowTemplateId;
+    $args->workflow = $workflow;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'updateWorkflow', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('updateWorkflow', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_updateWorkflow()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Workflow\Workflow_updateWorkflow_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Workflow\Workflow_updateWorkflow_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    return;
+  }
+
+  public function getWorkflowTemplateId($workflowName)
+  {
+    $this->send_getWorkflowTemplateId($workflowName);
+    return $this->recv_getWorkflowTemplateId();
+  }
+
+  public function send_getWorkflowTemplateId($workflowName)
+  {
+    $args = new \Airavata\API\Workflow\Workflow_getWorkflowTemplateId_args();
+    $args->workflowName = $workflowName;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getWorkflowTemplateId', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getWorkflowTemplateId', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getWorkflowTemplateId()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Workflow\Workflow_getWorkflowTemplateId_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Workflow\Workflow_getWorkflowTemplateId_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("getWorkflowTemplateId failed: unknown result");
+  }
+
+  public function isWorkflowExistWithName($workflowName)
+  {
+    $this->send_isWorkflowExistWithName($workflowName);
+    return $this->recv_isWorkflowExistWithName();
+  }
+
+  public function send_isWorkflowExistWithName($workflowName)
+  {
+    $args = new \Airavata\API\Workflow\Workflow_isWorkflowExistWithName_args();
+    $args->workflowName = $workflowName;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'isWorkflowExistWithName', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('isWorkflowExistWithName', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_isWorkflowExistWithName()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Workflow\Workflow_isWorkflowExistWithName_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Workflow\Workflow_isWorkflowExistWithName_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("isWorkflowExistWithName failed: unknown result");
+  }
+
+}
+
+// HELPER FUNCTIONS AND STRUCTURES
+
+class Workflow_getAllWorkflows_args {
+  static $_TSPEC;
+
+
+  public function __construct() {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        );
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_getAllWorkflows_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_getAllWorkflows_args');
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_getAllWorkflows_result {
+  static $_TSPEC;
+
+  public $success = null;
+  public $ire = null;
+  public $ace = null;
+  public $ase = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        1 => array(
+          'var' => 'ire',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\InvalidRequestException',
+          ),
+        2 => array(
+          'var' => 'ace',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataClientException',
+          ),
+        3 => array(
+          'var' => 'ase',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataSystemException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+      if (isset($vals['ire'])) {
+        $this->ire = $vals['ire'];
+      }
+      if (isset($vals['ace'])) {
+        $this->ace = $vals['ace'];
+      }
+      if (isset($vals['ase'])) {
+        $this->ase = $vals['ase'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_getAllWorkflows_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::LST) {
+            $this->success = array();
+            $_size0 = 0;
+            $_etype3 = 0;
+            $xfer += $input->readListBegin($_etype3, $_size0);
+            for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
+            {
+              $elem5 = null;
+              $xfer += $input->readString($elem5);
+              $this->success []= $elem5;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->ire = new \Airavata\API\Error\InvalidRequestException();
+            $xfer += $this->ire->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ace = new \Airavata\API\Error\AiravataClientException();
+            $xfer += $this->ace->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRUCT) {
+            $this->ase = new \Airavata\API\Error\AiravataSystemException();
+            $xfer += $this->ase->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_getAllWorkflows_result');
+    if ($this->success !== null) {
+      if (!is_array($this->success)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('success', TType::LST, 0);
+      {
+        $output->writeListBegin(TType::STRING, count($this->success));
+        {
+          foreach ($this->success as $iter6)
+          {
+            $xfer += $output->writeString($iter6);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ire !== null) {
+      $xfer += $output->writeFieldBegin('ire', TType::STRUCT, 1);
+      $xfer += $this->ire->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ace !== null) {
+      $xfer += $output->writeFieldBegin('ace', TType::STRUCT, 2);
+      $xfer += $this->ace->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ase !== null) {
+      $xfer += $output->writeFieldBegin('ase', TType::STRUCT, 3);
+      $xfer += $this->ase->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_getWorkflow_args {
+  static $_TSPEC;
+
+  public $workflowTemplateId = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'workflowTemplateId',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['workflowTemplateId'])) {
+        $this->workflowTemplateId = $vals['workflowTemplateId'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_getWorkflow_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->workflowTemplateId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_getWorkflow_args');
+    if ($this->workflowTemplateId !== null) {
+      $xfer += $output->writeFieldBegin('workflowTemplateId', TType::STRING, 1);
+      $xfer += $output->writeString($this->workflowTemplateId);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_getWorkflow_result {
+  static $_TSPEC;
+
+  public $success = null;
+  public $ire = null;
+  public $ace = null;
+  public $ase = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workflow',
+          ),
+        1 => array(
+          'var' => 'ire',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\InvalidRequestException',
+          ),
+        2 => array(
+          'var' => 'ace',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataClientException',
+          ),
+        3 => array(
+          'var' => 'ase',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataSystemException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+      if (isset($vals['ire'])) {
+        $this->ire = $vals['ire'];
+      }
+      if (isset($vals['ace'])) {
+        $this->ace = $vals['ace'];
+      }
+      if (isset($vals['ase'])) {
+        $this->ase = $vals['ase'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_getWorkflow_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::STRUCT) {
+            $this->success = new \Airavata\Model\Workflow();
+            $xfer += $this->success->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->ire = new \Airavata\API\Error\InvalidRequestException();
+            $xfer += $this->ire->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ace = new \Airavata\API\Error\AiravataClientException();
+            $xfer += $this->ace->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRUCT) {
+            $this->ase = new \Airavata\API\Error\AiravataSystemException();
+            $xfer += $this->ase->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_getWorkflow_result');
+    if ($this->success !== null) {
+      if (!is_object($this->success)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('success', TType::STRUCT, 0);
+      $xfer += $this->success->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ire !== null) {
+      $xfer += $output->writeFieldBegin('ire', TType::STRUCT, 1);
+      $xfer += $this->ire->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ace !== null) {
+      $xfer += $output->writeFieldBegin('ace', TType::STRUCT, 2);
+      $xfer += $this->ace->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ase !== null) {
+      $xfer += $output->writeFieldBegin('ase', TType::STRUCT, 3);
+      $xfer += $this->ase->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_deleteWorkflow_args {
+  static $_TSPEC;
+
+  public $workflowTemplateId = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'workflowTemplateId',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['workflowTemplateId'])) {
+        $this->workflowTemplateId = $vals['workflowTemplateId'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_deleteWorkflow_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->workflowTemplateId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_deleteWorkflow_args');
+    if ($this->workflowTemplateId !== null) {
+      $xfer += $output->writeFieldBegin('workflowTemplateId', TType::STRING, 1);
+      $xfer += $output->writeString($this->workflowTemplateId);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_deleteWorkflow_result {
+  static $_TSPEC;
+
+  public $ire = null;
+  public $ace = null;
+  public $ase = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'ire',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\InvalidRequestException',
+          ),
+        2 => array(
+          'var' => 'ace',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataClientException',
+          ),
+        3 => array(
+          'var' => 'ase',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataSystemException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['ire'])) {
+        $this->ire = $vals['ire'];
+      }
+      if (isset($vals['ace'])) {
+        $this->ace = $vals['ace'];
+      }
+      if (isset($vals['ase'])) {
+        $this->ase = $vals['ase'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_deleteWorkflow_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->ire = new \Airavata\API\Error\InvalidRequestException();
+            $xfer += $this->ire->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ace = new \Airavata\API\Error\AiravataClientException();
+            $xfer += $this->ace->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRUCT) {
+            $this->ase = new \Airavata\API\Error\AiravataSystemException();
+            $xfer += $this->ase->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_deleteWorkflow_result');
+    if ($this->ire !== null) {
+      $xfer += $output->writeFieldBegin('ire', TType::STRUCT, 1);
+      $xfer += $this->ire->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ace !== null) {
+      $xfer += $output->writeFieldBegin('ace', TType::STRUCT, 2);
+      $xfer += $this->ace->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ase !== null) {
+      $xfer += $output->writeFieldBegin('ase', TType::STRUCT, 3);
+      $xfer += $this->ase->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_registerWorkflow_args {
+  static $_TSPEC;
+
+  public $workflow = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'workflow',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workflow',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['workflow'])) {
+        $this->workflow = $vals['workflow'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_registerWorkflow_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->workflow = new \Airavata\Model\Workflow();
+            $xfer += $this->workflow->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_registerWorkflow_args');
+    if ($this->workflow !== null) {
+      if (!is_object($this->workflow)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('workflow', TType::STRUCT, 1);
+      $xfer += $this->workflow->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_registerWorkflow_result {
+  static $_TSPEC;
+
+  public $success = null;
+  public $ire = null;
+  public $ace = null;
+  public $ase = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::STRING,
+          ),
+        1 => array(
+          'var' => 'ire',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\InvalidRequestException',
+          ),
+        2 => array(
+          'var' => 'ace',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataClientException',
+          ),
+        3 => array(
+          'var' => 'ase',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataSystemException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+      if (isset($vals['ire'])) {
+        $this->ire = $vals['ire'];
+      }
+      if (isset($vals['ace'])) {
+        $this->ace = $vals['ace'];
+      }
+      if (isset($vals['ase'])) {
+        $this->ase = $vals['ase'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_registerWorkflow_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->success);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->ire = new \Airavata\API\Error\InvalidRequestException();
+            $xfer += $this->ire->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ace = new \Airavata\API\Error\AiravataClientException();
+            $xfer += $this->ace->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRUCT) {
+            $this->ase = new \Airavata\API\Error\AiravataSystemException();
+            $xfer += $this->ase->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_registerWorkflow_result');
+    if ($this->success !== null) {
+      $xfer += $output->writeFieldBegin('success', TType::STRING, 0);
+      $xfer += $output->writeString($this->success);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ire !== null) {
+      $xfer += $output->writeFieldBegin('ire', TType::STRUCT, 1);
+      $xfer += $this->ire->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ace !== null) {
+      $xfer += $output->writeFieldBegin('ace', TType::STRUCT, 2);
+      $xfer += $this->ace->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ase !== null) {
+      $xfer += $output->writeFieldBegin('ase', TType::STRUCT, 3);
+      $xfer += $this->ase->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_updateWorkflow_args {
+  static $_TSPEC;
+
+  public $workflowTemplateId = null;
+  public $workflow = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'workflowTemplateId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'workflow',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workflow',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['workflowTemplateId'])) {
+        $this->workflowTemplateId = $vals['workflowTemplateId'];
+      }
+      if (isset($vals['workflow'])) {
+        $this->workflow = $vals['workflow'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_updateWorkflow_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->workflowTemplateId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->workflow = new \Airavata\Model\Workflow();
+            $xfer += $this->workflow->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_updateWorkflow_args');
+    if ($this->workflowTemplateId !== null) {
+      $xfer += $output->writeFieldBegin('workflowTemplateId', TType::STRING, 1);
+      $xfer += $output->writeString($this->workflowTemplateId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->workflow !== null) {
+      if (!is_object($this->workflow)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('workflow', TType::STRUCT, 2);
+      $xfer += $this->workflow->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_updateWorkflow_result {
+  static $_TSPEC;
+
+  public $ire = null;
+  public $ace = null;
+  public $ase = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'ire',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\InvalidRequestException',
+          ),
+        2 => array(
+          'var' => 'ace',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataClientException',
+          ),
+        3 => array(
+          'var' => 'ase',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataSystemException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['ire'])) {
+        $this->ire = $vals['ire'];
+      }
+      if (isset($vals['ace'])) {
+        $this->ace = $vals['ace'];
+      }
+      if (isset($vals['ase'])) {
+        $this->ase = $vals['ase'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_updateWorkflow_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->ire = new \Airavata\API\Error\InvalidRequestException();
+            $xfer += $this->ire->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ace = new \Airavata\API\Error\AiravataClientException();
+            $xfer += $this->ace->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRUCT) {
+            $this->ase = new \Airavata\API\Error\AiravataSystemException();
+            $xfer += $this->ase->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_updateWorkflow_result');
+    if ($this->ire !== null) {
+      $xfer += $output->writeFieldBegin('ire', TType::STRUCT, 1);
+      $xfer += $this->ire->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ace !== null) {
+      $xfer += $output->writeFieldBegin('ace', TType::STRUCT, 2);
+      $xfer += $this->ace->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ase !== null) {
+      $xfer += $output->writeFieldBegin('ase', TType::STRUCT, 3);
+      $xfer += $this->ase->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_getWorkflowTemplateId_args {
+  static $_TSPEC;
+
+  public $workflowName = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'workflowName',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['workflowName'])) {
+        $this->workflowName = $vals['workflowName'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_getWorkflowTemplateId_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->workflowName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_getWorkflowTemplateId_args');
+    if ($this->workflowName !== null) {
+      $xfer += $output->writeFieldBegin('workflowName', TType::STRING, 1);
+      $xfer += $output->writeString($this->workflowName);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_getWorkflowTemplateId_result {
+  static $_TSPEC;
+
+  public $success = null;
+  public $ire = null;
+  public $ace = null;
+  public $ase = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::STRING,
+          ),
+        1 => array(
+          'var' => 'ire',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\InvalidRequestException',
+          ),
+        2 => array(
+          'var' => 'ace',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataClientException',
+          ),
+        3 => array(
+          'var' => 'ase',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataSystemException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+      if (isset($vals['ire'])) {
+        $this->ire = $vals['ire'];
+      }
+      if (isset($vals['ace'])) {
+        $this->ace = $vals['ace'];
+      }
+      if (isset($vals['ase'])) {
+        $this->ase = $vals['ase'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_getWorkflowTemplateId_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->success);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->ire = new \Airavata\API\Error\InvalidRequestException();
+            $xfer += $this->ire->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ace = new \Airavata\API\Error\AiravataClientException();
+            $xfer += $this->ace->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRUCT) {
+            $this->ase = new \Airavata\API\Error\AiravataSystemException();
+            $xfer += $this->ase->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_getWorkflowTemplateId_result');
+    if ($this->success !== null) {
+      $xfer += $output->writeFieldBegin('success', TType::STRING, 0);
+      $xfer += $output->writeString($this->success);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ire !== null) {
+      $xfer += $output->writeFieldBegin('ire', TType::STRUCT, 1);
+      $xfer += $this->ire->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ace !== null) {
+      $xfer += $output->writeFieldBegin('ace', TType::STRUCT, 2);
+      $xfer += $this->ace->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ase !== null) {
+      $xfer += $output->writeFieldBegin('ase', TType::STRUCT, 3);
+      $xfer += $this->ase->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_isWorkflowExistWithName_args {
+  static $_TSPEC;
+
+  public $workflowName = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'workflowName',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['workflowName'])) {
+        $this->workflowName = $vals['workflowName'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_isWorkflowExistWithName_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->workflowName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_isWorkflowExistWithName_args');
+    if ($this->workflowName !== null) {
+      $xfer += $output->writeFieldBegin('workflowName', TType::STRING, 1);
+      $xfer += $output->writeString($this->workflowName);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_isWorkflowExistWithName_result {
+  static $_TSPEC;
+
+  public $success = null;
+  public $ire = null;
+  public $ace = null;
+  public $ase = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::BOOL,
+          ),
+        1 => array(
+          'var' => 'ire',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\InvalidRequestException',
+          ),
+        2 => array(
+          'var' => 'ace',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataClientException',
+          ),
+        3 => array(
+          'var' => 'ase',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataSystemException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+      if (isset($vals['ire'])) {
+        $this->ire = $vals['ire'];
+      }
+      if (isset($vals['ace'])) {
+        $this->ace = $vals['ace'];
+      }
+      if (isset($vals['ase'])) {
+        $this->ase = $vals['ase'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_isWorkflowExistWithName_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->success);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->ire = new \Airavata\API\Error\InvalidRequestException();
+            $xfer += $this->ire->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ace = new \Airavata\API\Error\AiravataClientException();
+            $xfer += $this->ace->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRUCT) {
+            $this->ase = new \Airavata\API\Error\AiravataSystemException();
+            $xfer += $this->ase->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_isWorkflowExistWithName_result');
+    if ($this->success !== null) {
+      $xfer += $output->writeFieldBegin('success', TType::BOOL, 0);
+      $xfer += $output->writeBool($this->success);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ire !== null) {
+      $xfer += $output->writeFieldBegin('ire', TType::STRUCT, 1);
+      $xfer += $this->ire->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ace !== null) {
+      $xfer += $output->writeFieldBegin('ace', TType::STRUCT, 2);
+      $xfer += $this->ace->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ase !== null) {
+      $xfer += $output->writeFieldBegin('ase', TType::STRUCT, 3);
+      $xfer += $this->ase->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/Airavata/Model/AppCatalog/AppDeployment/Types.php
----------------------------------------------------------------------
diff --git a/app/libraries/Airavata/Model/AppCatalog/AppDeployment/Types.php b/app/libraries/Airavata/Model/AppCatalog/AppDeployment/Types.php
new file mode 100644
index 0000000..f4bde8f
--- /dev/null
+++ b/app/libraries/Airavata/Model/AppCatalog/AppDeployment/Types.php
@@ -0,0 +1,713 @@
+<?php
+namespace Airavata\Model\AppCatalog\AppDeployment;
+
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+use Thrift\Base\TBase;
+use Thrift\Type\TType;
+use Thrift\Type\TMessageType;
+use Thrift\Exception\TException;
+use Thrift\Exception\TProtocolException;
+use Thrift\Protocol\TProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
+use Thrift\Exception\TApplicationException;
+
+
+final class ApplicationParallelismType {
+  const SERIAL = 0;
+  const MPI = 1;
+  const OPENMP = 2;
+  const OPENMP_MPI = 3;
+  static public $__names = array(
+    0 => 'SERIAL',
+    1 => 'MPI',
+    2 => 'OPENMP',
+    3 => 'OPENMP_MPI',
+  );
+}
+
+class SetEnvPaths {
+  static $_TSPEC;
+
+  public $name = null;
+  public $value = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'name',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'value',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['name'])) {
+        $this->name = $vals['name'];
+      }
+      if (isset($vals['value'])) {
+        $this->value = $vals['value'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'SetEnvPaths';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->name);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->value);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('SetEnvPaths');
+    if ($this->name !== null) {
+      $xfer += $output->writeFieldBegin('name', TType::STRING, 1);
+      $xfer += $output->writeString($this->name);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->value !== null) {
+      $xfer += $output->writeFieldBegin('value', TType::STRING, 2);
+      $xfer += $output->writeString($this->value);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ApplicationModule {
+  static $_TSPEC;
+
+  public $appModuleId = "DO_NOT_SET_AT_CLIENTS";
+  public $appModuleName = null;
+  public $appModuleVersion = null;
+  public $appModuleDescription = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'appModuleId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'appModuleName',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'appModuleVersion',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'appModuleDescription',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['appModuleId'])) {
+        $this->appModuleId = $vals['appModuleId'];
+      }
+      if (isset($vals['appModuleName'])) {
+        $this->appModuleName = $vals['appModuleName'];
+      }
+      if (isset($vals['appModuleVersion'])) {
+        $this->appModuleVersion = $vals['appModuleVersion'];
+      }
+      if (isset($vals['appModuleDescription'])) {
+        $this->appModuleDescription = $vals['appModuleDescription'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ApplicationModule';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->appModuleId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->appModuleName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->appModuleVersion);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->appModuleDescription);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ApplicationModule');
+    if ($this->appModuleId !== null) {
+      $xfer += $output->writeFieldBegin('appModuleId', TType::STRING, 1);
+      $xfer += $output->writeString($this->appModuleId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->appModuleName !== null) {
+      $xfer += $output->writeFieldBegin('appModuleName', TType::STRING, 2);
+      $xfer += $output->writeString($this->appModuleName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->appModuleVersion !== null) {
+      $xfer += $output->writeFieldBegin('appModuleVersion', TType::STRING, 3);
+      $xfer += $output->writeString($this->appModuleVersion);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->appModuleDescription !== null) {
+      $xfer += $output->writeFieldBegin('appModuleDescription', TType::STRING, 4);
+      $xfer += $output->writeString($this->appModuleDescription);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ApplicationDeploymentDescription {
+  static $_TSPEC;
+
+  public $appDeploymentId = "DO_NOT_SET_AT_CLIENTS";
+  public $appModuleId = null;
+  public $computeHostId = null;
+  public $executablePath = null;
+  public $parallelism =   0;
+  public $appDeploymentDescription = null;
+  public $moduleLoadCmds = null;
+  public $libPrependPaths = null;
+  public $libAppendPaths = null;
+  public $setEnvironment = null;
+  public $preJobCommands = null;
+  public $postJobCommands = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'appDeploymentId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'appModuleId',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'computeHostId',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'executablePath',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'parallelism',
+          'type' => TType::I32,
+          ),
+        6 => array(
+          'var' => 'appDeploymentDescription',
+          'type' => TType::STRING,
+          ),
+        7 => array(
+          'var' => 'moduleLoadCmds',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        8 => array(
+          'var' => 'libPrependPaths',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\AppDeployment\SetEnvPaths',
+            ),
+          ),
+        9 => array(
+          'var' => 'libAppendPaths',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\AppDeployment\SetEnvPaths',
+            ),
+          ),
+        10 => array(
+          'var' => 'setEnvironment',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\AppDeployment\SetEnvPaths',
+            ),
+          ),
+        11 => array(
+          'var' => 'preJobCommands',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        12 => array(
+          'var' => 'postJobCommands',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['appDeploymentId'])) {
+        $this->appDeploymentId = $vals['appDeploymentId'];
+      }
+      if (isset($vals['appModuleId'])) {
+        $this->appModuleId = $vals['appModuleId'];
+      }
+      if (isset($vals['computeHostId'])) {
+        $this->computeHostId = $vals['computeHostId'];
+      }
+      if (isset($vals['executablePath'])) {
+        $this->executablePath = $vals['executablePath'];
+      }
+      if (isset($vals['parallelism'])) {
+        $this->parallelism = $vals['parallelism'];
+      }
+      if (isset($vals['appDeploymentDescription'])) {
+        $this->appDeploymentDescription = $vals['appDeploymentDescription'];
+      }
+      if (isset($vals['moduleLoadCmds'])) {
+        $this->moduleLoadCmds = $vals['moduleLoadCmds'];
+      }
+      if (isset($vals['libPrependPaths'])) {
+        $this->libPrependPaths = $vals['libPrependPaths'];
+      }
+      if (isset($vals['libAppendPaths'])) {
+        $this->libAppendPaths = $vals['libAppendPaths'];
+      }
+      if (isset($vals['setEnvironment'])) {
+        $this->setEnvironment = $vals['setEnvironment'];
+      }
+      if (isset($vals['preJobCommands'])) {
+        $this->preJobCommands = $vals['preJobCommands'];
+      }
+      if (isset($vals['postJobCommands'])) {
+        $this->postJobCommands = $vals['postJobCommands'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ApplicationDeploymentDescription';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->appDeploymentId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->appModuleId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->computeHostId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->executablePath);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->parallelism);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->appDeploymentDescription);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::LST) {
+            $this->moduleLoadCmds = array();
+            $_size0 = 0;
+            $_etype3 = 0;
+            $xfer += $input->readListBegin($_etype3, $_size0);
+            for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
+            {
+              $elem5 = null;
+              $xfer += $input->readString($elem5);
+              $this->moduleLoadCmds []= $elem5;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 8:
+          if ($ftype == TType::LST) {
+            $this->libPrependPaths = array();
+            $_size6 = 0;
+            $_etype9 = 0;
+            $xfer += $input->readListBegin($_etype9, $_size6);
+            for ($_i10 = 0; $_i10 < $_size6; ++$_i10)
+            {
+              $elem11 = null;
+              $elem11 = new \Airavata\Model\AppCatalog\AppDeployment\SetEnvPaths();
+              $xfer += $elem11->read($input);
+              $this->libPrependPaths []= $elem11;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 9:
+          if ($ftype == TType::LST) {
+            $this->libAppendPaths = array();
+            $_size12 = 0;
+            $_etype15 = 0;
+            $xfer += $input->readListBegin($_etype15, $_size12);
+            for ($_i16 = 0; $_i16 < $_size12; ++$_i16)
+            {
+              $elem17 = null;
+              $elem17 = new \Airavata\Model\AppCatalog\AppDeployment\SetEnvPaths();
+              $xfer += $elem17->read($input);
+              $this->libAppendPaths []= $elem17;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 10:
+          if ($ftype == TType::LST) {
+            $this->setEnvironment = array();
+            $_size18 = 0;
+            $_etype21 = 0;
+            $xfer += $input->readListBegin($_etype21, $_size18);
+            for ($_i22 = 0; $_i22 < $_size18; ++$_i22)
+            {
+              $elem23 = null;
+              $elem23 = new \Airavata\Model\AppCatalog\AppDeployment\SetEnvPaths();
+              $xfer += $elem23->read($input);
+              $this->setEnvironment []= $elem23;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 11:
+          if ($ftype == TType::LST) {
+            $this->preJobCommands = array();
+            $_size24 = 0;
+            $_etype27 = 0;
+            $xfer += $input->readListBegin($_etype27, $_size24);
+            for ($_i28 = 0; $_i28 < $_size24; ++$_i28)
+            {
+              $elem29 = null;
+              $xfer += $input->readString($elem29);
+              $this->preJobCommands []= $elem29;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 12:
+          if ($ftype == TType::LST) {
+            $this->postJobCommands = array();
+            $_size30 = 0;
+            $_etype33 = 0;
+            $xfer += $input->readListBegin($_etype33, $_size30);
+            for ($_i34 = 0; $_i34 < $_size30; ++$_i34)
+            {
+              $elem35 = null;
+              $xfer += $input->readString($elem35);
+              $this->postJobCommands []= $elem35;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ApplicationDeploymentDescription');
+    if ($this->appDeploymentId !== null) {
+      $xfer += $output->writeFieldBegin('appDeploymentId', TType::STRING, 1);
+      $xfer += $output->writeString($this->appDeploymentId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->appModuleId !== null) {
+      $xfer += $output->writeFieldBegin('appModuleId', TType::STRING, 2);
+      $xfer += $output->writeString($this->appModuleId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->computeHostId !== null) {
+      $xfer += $output->writeFieldBegin('computeHostId', TType::STRING, 3);
+      $xfer += $output->writeString($this->computeHostId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->executablePath !== null) {
+      $xfer += $output->writeFieldBegin('executablePath', TType::STRING, 4);
+      $xfer += $output->writeString($this->executablePath);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->parallelism !== null) {
+      $xfer += $output->writeFieldBegin('parallelism', TType::I32, 5);
+      $xfer += $output->writeI32($this->parallelism);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->appDeploymentDescription !== null) {
+      $xfer += $output->writeFieldBegin('appDeploymentDescription', TType::STRING, 6);
+      $xfer += $output->writeString($this->appDeploymentDescription);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->moduleLoadCmds !== null) {
+      if (!is_array($this->moduleLoadCmds)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('moduleLoadCmds', TType::LST, 7);
+      {
+        $output->writeListBegin(TType::STRING, count($this->moduleLoadCmds));
+        {
+          foreach ($this->moduleLoadCmds as $iter36)
+          {
+            $xfer += $output->writeString($iter36);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->libPrependPaths !== null) {
+      if (!is_array($this->libPrependPaths)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('libPrependPaths', TType::LST, 8);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->libPrependPaths));
+        {
+          foreach ($this->libPrependPaths as $iter37)
+          {
+            $xfer += $iter37->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->libAppendPaths !== null) {
+      if (!is_array($this->libAppendPaths)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('libAppendPaths', TType::LST, 9);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->libAppendPaths));
+        {
+          foreach ($this->libAppendPaths as $iter38)
+          {
+            $xfer += $iter38->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->setEnvironment !== null) {
+      if (!is_array($this->setEnvironment)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('setEnvironment', TType::LST, 10);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->setEnvironment));
+        {
+          foreach ($this->setEnvironment as $iter39)
+          {
+            $xfer += $iter39->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->preJobCommands !== null) {
+      if (!is_array($this->preJobCommands)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('preJobCommands', TType::LST, 11);
+      {
+        $output->writeListBegin(TType::STRING, count($this->preJobCommands));
+        {
+          foreach ($this->preJobCommands as $iter40)
+          {
+            $xfer += $output->writeString($iter40);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->postJobCommands !== null) {
+      if (!is_array($this->postJobCommands)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('postJobCommands', TType::LST, 12);
+      {
+        $output->writeListBegin(TType::STRING, count($this->postJobCommands));
+        {
+          foreach ($this->postJobCommands as $iter41)
+          {
+            $xfer += $output->writeString($iter41);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+$GLOBALS['applicationDeploymentModel_CONSTANTS']['DEFAULT_ID'] = "DO_NOT_SET_AT_CLIENTS";
+
+


[26/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/lib/Boris/Config.php
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/lib/Boris/Config.php b/vendor/d11wtq/boris/lib/Boris/Config.php
new file mode 100644
index 0000000..c3277a7
--- /dev/null
+++ b/vendor/d11wtq/boris/lib/Boris/Config.php
@@ -0,0 +1,88 @@
+<?php
+
+namespace Boris;
+
+/**
+ * Config handles loading configuration files for boris
+ */
+class Config
+{
+    private $_searchPaths;
+    private $_cascade = false;
+    private $_files = array();
+    
+    /**
+     * Create a new Config instance, optionally with an array
+     * of paths to search for configuration files.
+     *
+     * Additionally, if the second, optional boolean argument is
+     * true, all existing configuration files will be loaded, and
+     * effectively merged.
+     *
+     * @param array $searchPaths
+     * @param bool  $cascade
+     */
+    public function __construct($searchPaths = null, $cascade = false)
+    {
+        if (is_null($searchPaths)) {
+            $searchPaths = array();
+            
+            if ($userHome = getenv('HOME')) {
+                $searchPaths[] = "{$userHome}/.borisrc";
+            }
+            
+            $searchPaths[] = getcwd() . '/.borisrc';
+        }
+        
+        $this->_cascade     = $cascade;
+        $this->_searchPaths = $searchPaths;
+    }
+    
+    /**
+     * Searches for configuration files in the available
+     * search paths, and applies them to the provided
+     * boris instance.
+     *
+     * Returns true if any configuration files were found.
+     *
+     * @param  Boris\Boris $boris
+     * @return bool
+     */
+    public function apply(Boris $boris)
+    {
+        $applied = false;
+        
+        foreach ($this->_searchPaths as $path) {
+            if (is_readable($path)) {
+                $this->_loadInIsolation($path, $boris);
+                
+                $applied        = true;
+                $this->_files[] = $path;
+                
+                if (!$this->_cascade) {
+                    break;
+                }
+            }
+        }
+        
+        return $applied;
+    }
+    
+    /**
+     * Returns an array of files that were loaded
+     * for this Config
+     *
+     * @return array
+     */
+    public function loadedFiles()
+    {
+        return $this->_files;
+    }
+    
+    // -- Private Methods
+    
+    private function _loadInIsolation($path, $boris)
+    {
+        require $path;
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/lib/Boris/DumpInspector.php
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/lib/Boris/DumpInspector.php b/vendor/d11wtq/boris/lib/Boris/DumpInspector.php
new file mode 100644
index 0000000..ce884cd
--- /dev/null
+++ b/vendor/d11wtq/boris/lib/Boris/DumpInspector.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Boris;
+
+/**
+ * Passes values through var_dump() to inspect them.
+ */
+class DumpInspector implements Inspector
+{
+    public function inspect($variable)
+    {
+        ob_start();
+        var_dump($variable);
+        return sprintf(" → %s", trim(ob_get_clean()));
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/lib/Boris/EvalWorker.php
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/lib/Boris/EvalWorker.php b/vendor/d11wtq/boris/lib/Boris/EvalWorker.php
new file mode 100644
index 0000000..0792d09
--- /dev/null
+++ b/vendor/d11wtq/boris/lib/Boris/EvalWorker.php
@@ -0,0 +1,275 @@
+<?php
+
+namespace Boris;
+
+/**
+ * EvalWorker is responsible for evaluating PHP expressions in forked processes.
+ */
+class EvalWorker
+{
+    const ABNORMAL_EXIT = 255;
+    const DONE = "\0";
+    const EXITED = "\1";
+    const FAILED = "\2";
+    const READY = "\3";
+    
+    private $_socket;
+    private $_exports = array();
+    private $_startHooks = array();
+    private $_failureHooks = array();
+    private $_ppid;
+    private $_pid;
+    private $_cancelled;
+    private $_inspector;
+    private $_userExceptionHandler;
+    
+    /**
+     * Create a new worker using the given socket for communication.
+     *
+     * @param resource $socket
+     */
+    public function __construct($socket)
+    {
+        $this->_socket    = $socket;
+        $this->_inspector = new DumpInspector();
+        stream_set_blocking($socket, 0);
+    }
+    
+    /**
+     * Set local variables to be placed in the workers's scope.
+     *
+     * @param array|string $local
+     * @param mixed $value, if $local is a string
+     */
+    public function setLocal($local, $value = null)
+    {
+        if (!is_array($local)) {
+            $local = array(
+                $local => $value
+            );
+        }
+        
+        $this->_exports = array_merge($this->_exports, $local);
+    }
+    
+    /**
+     * Set hooks to run inside the worker before it starts looping.
+     *
+     * @param array $hooks
+     */
+    public function setStartHooks($hooks)
+    {
+        $this->_startHooks = $hooks;
+    }
+    
+    /**
+     * Set hooks to run inside the worker after a fatal error is caught.
+     *
+     * @param array $hooks
+     */
+    public function setFailureHooks($hooks)
+    {
+        $this->_failureHooks = $hooks;
+    }
+    
+    /**
+     * Set an Inspector object for Boris to output return values with.
+     *
+     * @param object $inspector any object the responds to inspect($v)
+     */
+    public function setInspector($inspector)
+    {
+        $this->_inspector = $inspector;
+    }
+    
+    /**
+     * Start the worker.
+     *
+     * This method never returns.
+     */
+    public function start()
+    {
+        $__scope = $this->_runHooks($this->_startHooks);
+        extract($__scope);
+        
+        $this->_write($this->_socket, self::READY);
+        
+        /* Note the naming of the local variables due to shared scope with the user here */
+        for (;;) {
+            declare (ticks = 1);
+            // don't exit on ctrl-c
+            pcntl_signal(SIGINT, SIG_IGN, true);
+            
+            $this->_cancelled = false;
+            
+            $__input = $this->_transform($this->_read($this->_socket));
+            
+            if ($__input === null) {
+                continue;
+            }
+            
+            $__response = self::DONE;
+            
+            $this->_ppid = posix_getpid();
+            $this->_pid  = pcntl_fork();
+            
+            if ($this->_pid < 0) {
+                throw new \RuntimeException('Failed to fork child labourer');
+            } elseif ($this->_pid > 0) {
+                // kill the child on ctrl-c
+                pcntl_signal(SIGINT, array(
+                    $this,
+                    'cancelOperation'
+                ), true);
+                pcntl_waitpid($this->_pid, $__status);
+                
+                if (!$this->_cancelled && $__status != (self::ABNORMAL_EXIT << 8)) {
+                    $__response = self::EXITED;
+                } else {
+                    $this->_runHooks($this->_failureHooks);
+                    $__response = self::FAILED;
+                }
+            } else {
+                // if the user has installed a custom exception handler, install a new
+                // one which calls it and then (if the custom handler didn't already exit)
+                // exits with the correct status.
+                // If not, leave the exception handler unset; we'll display
+                // an uncaught exception error and carry on.
+                $__oldexh = set_exception_handler(array(
+                    $this,
+                    'delegateExceptionHandler'
+                ));
+                if ($__oldexh && !$this->_userExceptionHandler) {
+                    $this->_userExceptionHandler = $__oldexh; // save the old handler (once)
+                } else {
+                    restore_exception_handler();
+                }
+                
+                // undo ctrl-c signal handling ready for user code execution
+                pcntl_signal(SIGINT, SIG_DFL, true);
+                $__pid = posix_getpid();
+                
+                $__result = eval($__input);
+                
+                if (posix_getpid() != $__pid) {
+                    // whatever the user entered caused a forked child
+                    // (totally valid, but we don't want that child to loop and wait for input)
+                    exit(0);
+                }
+                
+                if (preg_match('/\s*return\b/i', $__input)) {
+                    fwrite(STDOUT, sprintf("%s\n", $this->_inspector->inspect($__result)));
+                }
+                $this->_expungeOldWorker();
+            }
+            
+            $this->_write($this->_socket, $__response);
+            
+            if ($__response == self::EXITED) {
+                exit(0);
+            }
+        }
+    }
+    
+    /**
+     * While a child process is running, terminate it immediately.
+     */
+    public function cancelOperation()
+    {
+        printf("Cancelling...\n");
+        $this->_cancelled = true;
+        posix_kill($this->_pid, SIGKILL);
+        pcntl_signal_dispatch();
+    }
+    
+    /**
+     * Call the user-defined exception handler, then exit correctly.
+     */
+    public function delegateExceptionHandler($ex)
+    {
+        call_user_func($this->_userExceptionHandler, $ex);
+        exit(self::ABNORMAL_EXIT);
+    }
+    
+    // -- Private Methods
+    
+    private function _runHooks($hooks)
+    {
+        extract($this->_exports);
+        
+        foreach ($hooks as $__hook) {
+            if (is_string($__hook)) {
+                eval($__hook);
+            } elseif (is_callable($__hook)) {
+                call_user_func($__hook, $this, get_defined_vars());
+            } else {
+                throw new \RuntimeException(sprintf('Hooks must be closures or strings of PHP code. Got [%s].', gettype($__hook)));
+            }
+            
+            // hooks may set locals
+            extract($this->_exports);
+        }
+        
+        return get_defined_vars();
+    }
+    
+    private function _expungeOldWorker()
+    {
+        posix_kill($this->_ppid, SIGTERM);
+        pcntl_signal_dispatch();
+    }
+    
+    private function _write($socket, $data)
+    {
+        if (!fwrite($socket, $data)) {
+            throw new \RuntimeException('Socket error: failed to write data');
+        }
+    }
+    
+    private function _read($socket)
+    {
+        $read   = array(
+            $socket
+        );
+        $except = array(
+            $socket
+        );
+        
+        if ($this->_select($read, $except) > 0) {
+            if ($read) {
+                return stream_get_contents($read[0]);
+            } else if ($except) {
+                throw new \UnexpectedValueException("Socket error: closed");
+            }
+        }
+    }
+    
+    private function _select(&$read, &$except)
+    {
+        $write = null;
+        set_error_handler(function()
+        {
+            return true;
+        }, E_WARNING);
+        $result = stream_select($read, $write, $except, 10);
+        restore_error_handler();
+        return $result;
+    }
+    
+    private function _transform($input)
+    {
+        if ($input === null) {
+            return null;
+        }
+        
+        $transforms = array(
+            'exit' => 'exit(0)'
+        );
+        
+        foreach ($transforms as $from => $to) {
+            $input = preg_replace('/^\s*' . preg_quote($from, '/') . '\s*;?\s*$/', $to . ';', $input);
+        }
+        
+        return $input;
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/lib/Boris/ExportInspector.php
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/lib/Boris/ExportInspector.php b/vendor/d11wtq/boris/lib/Boris/ExportInspector.php
new file mode 100644
index 0000000..68aca5a
--- /dev/null
+++ b/vendor/d11wtq/boris/lib/Boris/ExportInspector.php
@@ -0,0 +1,14 @@
+<?php
+
+namespace Boris;
+
+/**
+ * Passes values through var_export() to inspect them.
+ */
+class ExportInspector implements Inspector
+{
+    public function inspect($variable)
+    {
+        return sprintf(" → %s", var_export($variable, true));
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/lib/Boris/Inspector.php
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/lib/Boris/Inspector.php b/vendor/d11wtq/boris/lib/Boris/Inspector.php
new file mode 100644
index 0000000..5715d51
--- /dev/null
+++ b/vendor/d11wtq/boris/lib/Boris/Inspector.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace Boris;
+
+/**
+ * Something that is capable of returning a useful representation of a variable.
+ */
+interface Inspector
+{
+    /**
+     * Return a debug-friendly string representation of $variable.
+     *
+     * @param mixed $variable
+     *
+     * @return string
+     */
+    public function inspect($variable);
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/lib/Boris/ReadlineClient.php
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/lib/Boris/ReadlineClient.php b/vendor/d11wtq/boris/lib/Boris/ReadlineClient.php
new file mode 100644
index 0000000..7cd8fd7
--- /dev/null
+++ b/vendor/d11wtq/boris/lib/Boris/ReadlineClient.php
@@ -0,0 +1,106 @@
+<?php
+
+namespace Boris;
+
+/**
+ * The Readline client is what the user spends their time entering text into.
+ *
+ * Input is collected and sent to {@link \Boris\EvalWorker} for processing.
+ */
+class ReadlineClient
+{
+    private $_socket;
+    private $_prompt;
+    private $_historyFile;
+    private $_clear = false;
+    
+    /**
+     * Create a new ReadlineClient using $socket for communication.
+     *
+     * @param resource $socket
+     */
+    public function __construct($socket)
+    {
+        $this->_socket = $socket;
+    }
+    
+    /**
+     * Start the client with an prompt and readline history path.
+     *
+     * This method never returns.
+     *
+     * @param string $prompt
+     * @param string $historyFile
+     */
+    public function start($prompt, $historyFile)
+    {
+        readline_read_history($historyFile);
+        
+        declare (ticks = 1);
+        pcntl_signal(SIGCHLD, SIG_IGN);
+        pcntl_signal(SIGINT, array(
+            $this,
+            'clear'
+        ), true);
+        
+        // wait for the worker to finish executing hooks
+        if (fread($this->_socket, 1) != EvalWorker::READY) {
+            throw new \RuntimeException('EvalWorker failed to start');
+        }
+        
+        $parser = new ShallowParser();
+        $buf    = '';
+        $lineno = 1;
+        
+        for (;;) {
+            $this->_clear = false;
+            $line         = readline(sprintf('[%d] %s', $lineno, ($buf == '' ? $prompt : str_pad('*> ', strlen($prompt), ' ', STR_PAD_LEFT))));
+            
+            if ($this->_clear) {
+                $buf = '';
+                continue;
+            }
+            
+            if (false === $line) {
+                $buf = 'exit(0);'; // ctrl-d acts like exit
+            }
+            
+            if (strlen($line) > 0) {
+                readline_add_history($line);
+            }
+            
+            $buf .= sprintf("%s\n", $line);
+            
+            if ($statements = $parser->statements($buf)) {
+                ++$lineno;
+                
+                $buf = '';
+                foreach ($statements as $stmt) {
+                    if (false === $written = fwrite($this->_socket, $stmt)) {
+                        throw new \RuntimeException('Socket error: failed to write data');
+                    }
+                    
+                    if ($written > 0) {
+                        $status = fread($this->_socket, 1);
+                        if ($status == EvalWorker::EXITED) {
+                            readline_write_history($historyFile);
+                            echo "\n";
+                            exit(0);
+                        } elseif ($status == EvalWorker::FAILED) {
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    
+    /**
+     * Clear the input buffer.
+     */
+    public function clear()
+    {
+        // FIXME: I'd love to have this send \r to readline so it puts the user on a blank line
+        $this->_clear = true;
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/lib/Boris/ShallowParser.php
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/lib/Boris/ShallowParser.php b/vendor/d11wtq/boris/lib/Boris/ShallowParser.php
new file mode 100644
index 0000000..75a1727
--- /dev/null
+++ b/vendor/d11wtq/boris/lib/Boris/ShallowParser.php
@@ -0,0 +1,258 @@
+<?php
+
+namespace Boris;
+
+/**
+ * The ShallowParser takes whatever is currently buffered and chunks it into individual statements.
+ */
+class ShallowParser
+{
+    private $_pairs = array('(' => ')', '{' => '}', '[' => ']', '"' => '"', "'" => "'", '//' => "\n", '#' => "\n", '/*' => '*/', '<<<' => '_heredoc_special_case_');
+    
+    private $_initials;
+    
+    public function __construct()
+    {
+        $this->_initials = '/^(' . implode('|', array_map(array(
+            $this,
+            'quote'
+        ), array_keys($this->_pairs))) . ')/';
+    }
+    
+    /**
+     * Break the $buffer into chunks, with one for each highest-level construct possible.
+     *
+     * If the buffer is incomplete, returns an empty array.
+     *
+     * @param string $buffer
+     *
+     * @return array
+     */
+    public function statements($buffer)
+    {
+        $result = $this->_createResult($buffer);
+        
+        while (strlen($result->buffer) > 0) {
+            $this->_resetResult($result);
+            
+            if ($result->state == '<<<') {
+                if (!$this->_initializeHeredoc($result)) {
+                    continue;
+                }
+            }
+            
+            $rules = array(
+                '_scanUse',
+                '_scanEscapedChar',
+                '_scanRegion',
+                '_scanStateEntrant',
+                '_scanWsp',
+                '_scanChar'
+            );
+            
+            foreach ($rules as $method) {
+                if ($this->$method($result)) {
+                    break;
+                }
+            }
+            
+            if ($result->stop) {
+                break;
+            }
+        }
+        
+        if (!empty($result->statements) && trim($result->stmt) === '' && strlen($result->buffer) == 0) {
+            $this->_combineStatements($result);
+            $this->_prepareForDebug($result);
+            return $result->statements;
+        }
+    }
+    
+    public function quote($token)
+    {
+        return preg_quote($token, '/');
+    }
+    
+    // -- Private Methods
+    
+    private function _createResult($buffer)
+    {
+        $result             = new \stdClass();
+        $result->buffer     = $buffer;
+        $result->stmt       = '';
+        $result->state      = null;
+        $result->states     = array();
+        $result->statements = array();
+        $result->stop       = false;
+        
+        return $result;
+    }
+    
+    private function _resetResult($result)
+    {
+        $result->stop       = false;
+        $result->state      = end($result->states);
+        $result->terminator = $result->state ? '/^(.*?' . preg_quote($this->_pairs[$result->state], '/') . ')/s' : null;
+    }
+    
+    private function _combineStatements($result)
+    {
+        $combined = array();
+        
+        foreach ($result->statements as $scope) {
+            if (trim($scope) == ';' || substr(trim($scope), -1) != ';') {
+                $combined[] = ((string) array_pop($combined)) . $scope;
+            } else {
+                $combined[] = $scope;
+            }
+        }
+        
+        $result->statements = $combined;
+    }
+    
+    private function _prepareForDebug($result)
+    {
+        $result->statements[] = $this->_prepareDebugStmt(array_pop($result->statements));
+    }
+    
+    private function _initializeHeredoc($result)
+    {
+        if (preg_match('/^([\'"]?)([a-z_][a-z0-9_]*)\\1/i', $result->buffer, $match)) {
+            $docId = $match[2];
+            $result->stmt .= $match[0];
+            $result->buffer = substr($result->buffer, strlen($match[0]));
+            
+            $result->terminator = '/^(.*?\n' . $docId . ');?\n/s';
+            
+            return true;
+        } else {
+            return false;
+        }
+    }
+    
+    private function _scanWsp($result)
+    {
+        if (preg_match('/^\s+/', $result->buffer, $match)) {
+            if (!empty($result->statements) && $result->stmt === '') {
+                $result->statements[] = array_pop($result->statements) . $match[0];
+            } else {
+                $result->stmt .= $match[0];
+            }
+            $result->buffer = substr($result->buffer, strlen($match[0]));
+            
+            return true;
+        } else {
+            return false;
+        }
+    }
+    
+    private function _scanEscapedChar($result)
+    {
+        if (($result->state == '"' || $result->state == "'") && preg_match('/^[^' . $result->state . ']*?\\\\./s', $result->buffer, $match)) {
+            
+            $result->stmt .= $match[0];
+            $result->buffer = substr($result->buffer, strlen($match[0]));
+            
+            return true;
+        } else {
+            return false;
+        }
+    }
+    
+    private function _scanRegion($result)
+    {
+        if (in_array($result->state, array(
+            '"',
+            "'",
+            '<<<',
+            '//',
+            '#',
+            '/*'
+        ))) {
+            if (preg_match($result->terminator, $result->buffer, $match)) {
+                $result->stmt .= $match[1];
+                $result->buffer = substr($result->buffer, strlen($match[1]));
+                array_pop($result->states);
+            } else {
+                $result->stop = true;
+            }
+            
+            return true;
+        } else {
+            return false;
+        }
+    }
+    
+    private function _scanStateEntrant($result)
+    {
+        if (preg_match($this->_initials, $result->buffer, $match)) {
+            $result->stmt .= $match[0];
+            $result->buffer   = substr($result->buffer, strlen($match[0]));
+            $result->states[] = $match[0];
+            
+            return true;
+        } else {
+            return false;
+        }
+    }
+    
+    private function _scanChar($result)
+    {
+        $chr = substr($result->buffer, 0, 1);
+        $result->stmt .= $chr;
+        $result->buffer = substr($result->buffer, 1);
+        if ($result->state && $chr == $this->_pairs[$result->state]) {
+            array_pop($result->states);
+        }
+        
+        if (empty($result->states) && ($chr == ';' || $chr == '}')) {
+            if (!$this->_isLambda($result->stmt) || $chr == ';') {
+                $result->statements[] = $result->stmt;
+                $result->stmt         = '';
+            }
+        }
+        
+        return true;
+    }
+    
+    private function _scanUse($result)
+    {
+        if (preg_match("/^use (.+?);/", $result->buffer, $use)) {
+            $result->buffer = substr($result->buffer, strlen($use[0]));
+            if (strpos($use[0], ' as ') !== false) {
+                list($class, $alias) = explode(' as ', $use[1]);
+            } else {
+                $class = $use[1];
+                $alias = substr($use[1], strrpos($use[1], '\\') + 1);
+            }
+            $result->statements[] = sprintf("class_alias('%s', '%s');", $class, $alias);
+            return true;
+        } else {
+            return false;
+        }
+    }
+    
+    private function _isLambda($input)
+    {
+        return preg_match('/^([^=]*?=\s*)?function\s*\([^\)]*\)\s*(use\s*\([^\)]*\)\s*)?\s*\{.*\}\s*;?$/is', trim($input));
+    }
+    
+    private function _isReturnable($input)
+    {
+        $input = trim($input);
+        if (substr($input, -1) == ';' && substr($input, 0, 1) != '{') {
+            return $this->_isLambda($input) || !preg_match('/^(' . 'echo|print|exit|die|goto|global|include|include_once|require|require_once|list|' . 'return|do|for|foreach|while|if|function|namespace|class|interface|abstract|switch|' . 'declare|throw|try|unset' . ')\b/i', $input);
+        } else {
+            return false;
+        }
+    }
+    
+    private function _prepareDebugStmt($input)
+    {
+        if ($this->_isReturnable($input) && !preg_match('/^\s*return/i', $input)) {
+            $input = sprintf('return %s', $input);
+        }
+        
+        return $input;
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/lib/autoload.php
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/lib/autoload.php b/vendor/d11wtq/boris/lib/autoload.php
new file mode 100644
index 0000000..f090d70
--- /dev/null
+++ b/vendor/d11wtq/boris/lib/autoload.php
@@ -0,0 +1,17 @@
+<?php
+
+/**
+ * Custom autoloader for non-composer installations.
+ */
+spl_autoload_register(function($class)
+{
+    if ($class[0] == '\\') {
+        $class = substr($class, 1);
+    }
+    
+    $path = sprintf('%s/%s.php', __DIR__, implode('/', explode('\\', $class)));
+    
+    if (is_file($path)) {
+        require_once($path);
+    }
+});

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/release.php
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/release.php b/vendor/d11wtq/boris/release.php
new file mode 100755
index 0000000..7fafeeb
--- /dev/null
+++ b/vendor/d11wtq/boris/release.php
@@ -0,0 +1,150 @@
+#!/usr/bin/env php
+<?php
+
+/**
+ * @author Chris Corbyn <ch...@w3style.co.uk>
+ *
+ * Copyright © 2013-2014 Chris Corbyn.
+ */
+
+/* Generate releases in Github */
+
+namespace Boris;
+
+require __DIR__ . '/lib/autoload.php';
+
+$args = getopt('hv:', array(
+    'help',
+    'version:'
+));
+
+if (count($args) != 1) {
+    help();
+    exit(1);
+}
+
+foreach ($args as $opt => $value) {
+    switch ($opt) {
+        case 'v':
+        case 'version':
+            version($value);
+            exit(0);
+        
+        case 'h':
+        case 'help':
+            help();
+            exit(0);
+        
+        default:
+            unknown($opt);
+            exit(1);
+    }
+}
+
+function help()
+{
+    echo <<<HELP
+Boris release generator script.
+
+Usage:
+  ./release.php --version 1.2    Create a release for v1.2
+  ./release.php --help           Display this help message
+
+HELP;
+}
+
+function version($newVersion)
+{
+    $token      = get_token();
+    $user       = get_user();
+    $repo       = get_repo();
+    $oldVersion = Boris::VERSION;
+    $phar       = "boris.phar";
+    
+    printf("Building version v%s...\n", $newVersion);
+    
+    printf("    Updating Boris::VERSION (%s) to %s...\n", $oldVersion, $newVersion);
+    `perl -pi -e 's/$oldVersion/$newVersion/' lib/Boris/Boris.php README.md`;
+    
+    printf("    Committing changes...\n");
+    `git commit -am "Version bump to $newVersion"`;
+    
+    printf("    Pushing changes upstream...\n");
+    `git push`;
+    
+    printf("    Creating tag v%s...\n", $newVersion);
+    `git tag -a "v$newVersion" -m "Auto-generated tag"`;
+    
+    printf("    Pushing tags upstream...\n");
+    `git push --tags`;
+    
+    printf("    Creating release on github...\n");
+    $response = `curl \
+     -sL \
+     -XPOST \
+     -H "Authorization: token $token" \
+     --data-binary '{"tag_name":"v$newVersion"}' \
+     https://api.github.com/repos/$user/$repo/releases`;
+    
+    $json = json_decode($response, true);
+    $id   = $json['id'];
+    
+    if (empty($id)) {
+        printf("Failed.\n");
+        printf("%s\n", $response);
+        exit(1);
+    }
+    
+    printf("    Building phar...\n");
+    `box build`;
+    
+    printf("Uploading phar to GitHub...\n");
+    `curl -XPOST \
+     -sL \
+     -H "Authorization: token $token" \
+     -H "Content-Type: application/octet-stream" \
+     --data-binary @$phar \
+     https://uploads.github.com/repos/$user/$repo/releases/$id/assets?name=$phar`;
+    
+    printf("Done.\n");
+}
+
+function get_token()
+{
+    if (getenv('GITHUB_TOKEN')) {
+        return getenv('GITHUB_TOKEN');
+    } else {
+        printf("Missing environment variable \$GITHUB_TOKEN\n");
+        exit(1);
+    }
+}
+
+function get_origin()
+{
+    $remotes = `git remote -v`;
+    if (!preg_match('/^origin\s+(\S*?.git)\s+\(push\)/m', $remotes, $matches)) {
+        printf("Unable to find origin in $remotes\n");
+        exit(1);
+    }
+    return $matches[1];
+}
+
+function get_user()
+{
+    $origin = get_origin();
+    if (!preg_match('#^.*?[/:]([^/]+)/([^/]+)\.git$#', $origin, $matches)) {
+        printf("Don't know how to parse $origin\n");
+        exit(1);
+    }
+    return $matches[1];
+}
+
+function get_repo()
+{
+    $origin = get_origin();
+    if (!preg_match('#^.*?[/:]([^/]+)/([^/]+)\.git$#', $origin, $matches)) {
+        printf("Don't know how to parse $origin\n");
+        exit(1);
+    }
+    return $matches[2];
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/LICENSE.md
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/LICENSE.md b/vendor/filp/whoops/LICENSE.md
new file mode 100644
index 0000000..17707b3
--- /dev/null
+++ b/vendor/filp/whoops/LICENSE.md
@@ -0,0 +1,19 @@
+#The MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/composer.json
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/composer.json b/vendor/filp/whoops/composer.json
new file mode 100644
index 0000000..2c9b67e
--- /dev/null
+++ b/vendor/filp/whoops/composer.json
@@ -0,0 +1,33 @@
+{
+    "name": "filp/whoops",
+    "license": "MIT",
+    "description": "php error handling for cool kids",
+    "keywords": ["library", "error", "handling", "exception", "silex-provider", "whoops", "zf2"],
+    "homepage": "https://github.com/filp/whoops",
+    "authors": [
+        {
+            "name": "Filipe Dobreira",
+            "homepage": "https://github.com/filp",
+            "role": "Developer"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0"
+    },
+    "require-dev": {
+        "mockery/mockery": "0.9.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Whoops": "src/"
+        },
+        "classmap": [
+            "src/deprecated"
+        ]
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "1.2-dev"
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Exception/ErrorException.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Exception/ErrorException.php b/vendor/filp/whoops/src/Whoops/Exception/ErrorException.php
new file mode 100644
index 0000000..d74e823
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Exception/ErrorException.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Whoops - php errors for cool kids
+ * @author Filipe Dobreira <http://github.com/filp>
+ */
+
+namespace Whoops\Exception;
+
+use ErrorException as BaseErrorException;
+
+/**
+ * Wraps ErrorException; mostly used for typing (at least now)
+ * to easily cleanup the stack trace of redundant info.
+ */
+class ErrorException extends BaseErrorException
+{
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Exception/Formatter.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Exception/Formatter.php b/vendor/filp/whoops/src/Whoops/Exception/Formatter.php
new file mode 100644
index 0000000..f14b8e2
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Exception/Formatter.php
@@ -0,0 +1,74 @@
+<?php
+/**
+ * Whoops - php errors for cool kids
+ * @author Filipe Dobreira <http://github.com/filp>
+ */
+
+namespace Whoops\Exception;
+
+
+class Formatter
+{
+    /**
+     * Returns all basic information about the exception in a simple array
+     * for further convertion to other languages
+     * @param  Inspector $inspector
+     * @param  bool      $shouldAddTrace
+     * @return array
+     */
+    public static function formatExceptionAsDataArray(Inspector $inspector, $shouldAddTrace)
+    {
+        $exception = $inspector->getException();
+        $response = array(
+            'type'    => get_class($exception),
+            'message' => $exception->getMessage(),
+            'file'    => $exception->getFile(),
+            'line'    => $exception->getLine(),
+        );
+
+        if ($shouldAddTrace) {
+            $frames    = $inspector->getFrames();
+            $frameData = array();
+
+            foreach ($frames as $frame) {
+                /** @var Frame $frame */
+                $frameData[] = array(
+                    'file'     => $frame->getFile(),
+                    'line'     => $frame->getLine(),
+                    'function' => $frame->getFunction(),
+                    'class'    => $frame->getClass(),
+                    'args'     => $frame->getArgs(),
+                );
+            }
+
+            $response['trace'] = $frameData;
+        }
+
+        return $response;
+    }
+
+    public static function formatExceptionPlain(Inspector $inspector)
+    {
+        $message = $inspector->getException()->getMessage();
+        $frames = $inspector->getFrames();
+
+        $plain = $inspector->getExceptionName();
+        $plain .= ' thrown with message "';
+        $plain .= $message;
+        $plain .= '"'."\n\n";
+
+        $plain .= "Stacktrace:\n";
+        foreach ($frames as $i => $frame) {
+            $plain .= "#". (count($frames) - $i - 1). " ";
+            $plain .= $frame->getClass() ?: '';
+            $plain .= $frame->getClass() && $frame->getFunction() ? ":" : "";
+            $plain .= $frame->getFunction() ?: '';
+            $plain .= ' in ';
+            $plain .= ($frame->getFile() ?: '<#unknown>');
+            $plain .= ':';
+            $plain .= (int) $frame->getLine(). "\n";
+        }
+
+        return $plain;
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Exception/Frame.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Exception/Frame.php b/vendor/filp/whoops/src/Whoops/Exception/Frame.php
new file mode 100644
index 0000000..5aecd37
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Exception/Frame.php
@@ -0,0 +1,269 @@
+<?php
+/**
+ * Whoops - php errors for cool kids
+ * @author Filipe Dobreira <http://github.com/filp>
+ */
+
+namespace Whoops\Exception;
+
+use InvalidArgumentException;
+use Serializable;
+
+class Frame implements Serializable
+{
+    /**
+     * @var array
+     */
+    protected $frame;
+
+    /**
+     * @var string
+     */
+    protected $fileContentsCache;
+
+    /**
+     * @var array[]
+     */
+    protected $comments = array();
+
+    /**
+     * @param array[]
+     */
+    public function __construct(array $frame)
+    {
+        $this->frame = $frame;
+    }
+
+    /**
+     * @param  bool        $shortened
+     * @return string|null
+     */
+    public function getFile($shortened = false)
+    {
+        if (empty($this->frame['file'])) {
+            return null;
+        }
+
+        $file = $this->frame['file'];
+
+        // Check if this frame occurred within an eval().
+        // @todo: This can be made more reliable by checking if we've entered
+        // eval() in a previous trace, but will need some more work on the upper
+        // trace collector(s).
+        if (preg_match('/^(.*)\((\d+)\) : (?:eval\(\)\'d|assert) code$/', $file, $matches)) {
+            $file = $this->frame['file'] = $matches[1];
+            $this->frame['line'] = (int) $matches[2];
+        }
+
+        if ($shortened && is_string($file)) {
+            // Replace the part of the path that all frames have in common, and add 'soft hyphens' for smoother line-breaks.
+            $dirname = dirname(dirname(dirname(dirname(dirname(dirname(__DIR__))))));
+            $file = str_replace($dirname, "&hellip;", $file);
+            $file = str_replace("/", "/&shy;", $file);
+        }
+
+        return $file;
+    }
+
+    /**
+     * @return int|null
+     */
+    public function getLine()
+    {
+        return isset($this->frame['line']) ? $this->frame['line'] : null;
+    }
+
+    /**
+     * @return string|null
+     */
+    public function getClass()
+    {
+        return isset($this->frame['class']) ? $this->frame['class'] : null;
+    }
+
+    /**
+     * @return string|null
+     */
+    public function getFunction()
+    {
+        return isset($this->frame['function']) ? $this->frame['function'] : null;
+    }
+
+    /**
+     * @return array
+     */
+    public function getArgs()
+    {
+        return isset($this->frame['args']) ? (array) $this->frame['args'] : array();
+    }
+
+    /**
+     * Returns the full contents of the file for this frame,
+     * if it's known.
+     * @return string|null
+     */
+    public function getFileContents()
+    {
+        if ($this->fileContentsCache === null && $filePath = $this->getFile()) {
+            // Leave the stage early when 'Unknown' is passed
+            // this would otherwise raise an exception when
+            // open_basedir is enabled.
+            if ($filePath === "Unknown") {
+                return null;
+            }
+
+            // Return null if the file doesn't actually exist.
+            if (!is_file($filePath)) {
+                return null;
+            }
+
+            $this->fileContentsCache = file_get_contents($filePath);
+        }
+
+        return $this->fileContentsCache;
+    }
+
+    /**
+     * Adds a comment to this frame, that can be received and
+     * used by other handlers. For example, the PrettyPage handler
+     * can attach these comments under the code for each frame.
+     *
+     * An interesting use for this would be, for example, code analysis
+     * & annotations.
+     *
+     * @param string $comment
+     * @param string $context Optional string identifying the origin of the comment
+     */
+    public function addComment($comment, $context = 'global')
+    {
+        $this->comments[] = array(
+            'comment' => $comment,
+            'context' => $context,
+        );
+    }
+
+    /**
+     * Returns all comments for this frame. Optionally allows
+     * a filter to only retrieve comments from a specific
+     * context.
+     *
+     * @param  string  $filter
+     * @return array[]
+     */
+    public function getComments($filter = null)
+    {
+        $comments = $this->comments;
+
+        if ($filter !== null) {
+            $comments = array_filter($comments, function ($c) use ($filter) {
+                return $c['context'] == $filter;
+            });
+        }
+
+        return $comments;
+    }
+
+    /**
+     * Returns the array containing the raw frame data from which
+     * this Frame object was built
+     *
+     * @return array
+     */
+    public function getRawFrame()
+    {
+        return $this->frame;
+    }
+
+    /**
+     * Returns the contents of the file for this frame as an
+     * array of lines, and optionally as a clamped range of lines.
+     *
+     * NOTE: lines are 0-indexed
+     *
+     * @example
+     *     Get all lines for this file
+     *     $frame->getFileLines(); // => array( 0 => '<?php', 1 => '...', ...)
+     * @example
+     *     Get one line for this file, starting at line 10 (zero-indexed, remember!)
+     *     $frame->getFileLines(9, 1); // array( 10 => '...', 11 => '...')
+     *
+     * @throws InvalidArgumentException if $length is less than or equal to 0
+     * @param  int                      $start
+     * @param  int                      $length
+     * @return string[]|null
+     */
+    public function getFileLines($start = 0, $length = null)
+    {
+        if (null !== ($contents = $this->getFileContents())) {
+            $lines = explode("\n", $contents);
+
+            // Get a subset of lines from $start to $end
+            if ($length !== null) {
+                $start  = (int) $start;
+                $length = (int) $length;
+                if ($start < 0) {
+                    $start = 0;
+                }
+
+                if ($length <= 0) {
+                    throw new InvalidArgumentException(
+                        "\$length($length) cannot be lower or equal to 0"
+                    );
+                }
+
+                $lines = array_slice($lines, $start, $length, true);
+            }
+
+            return $lines;
+        }
+    }
+
+    /**
+     * Implements the Serializable interface, with special
+     * steps to also save the existing comments.
+     *
+     * @see Serializable::serialize
+     * @return string
+     */
+    public function serialize()
+    {
+        $frame = $this->frame;
+        if (!empty($this->comments)) {
+            $frame['_comments'] = $this->comments;
+        }
+
+        return serialize($frame);
+    }
+
+    /**
+     * Unserializes the frame data, while also preserving
+     * any existing comment data.
+     *
+     * @see Serializable::unserialize
+     * @param string $serializedFrame
+     */
+    public function unserialize($serializedFrame)
+    {
+        $frame = unserialize($serializedFrame);
+
+        if (!empty($frame['_comments'])) {
+            $this->comments = $frame['_comments'];
+            unset($frame['_comments']);
+        }
+
+        $this->frame = $frame;
+    }
+
+    /**
+     * Compares Frame against one another
+     * @param  Frame $frame
+     * @return bool
+     */
+    public function equals(Frame $frame)
+    {
+        if (!$this->getFile() || $this->getFile() === 'Unknown' || !$this->getLine()) {
+            return false;
+        }
+        return $frame->getFile() === $this->getFile() && $frame->getLine() === $this->getLine();
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php b/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php
new file mode 100644
index 0000000..47fffb6
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php
@@ -0,0 +1,191 @@
+<?php
+/**
+ * Whoops - php errors for cool kids
+ * @author Filipe Dobreira <http://github.com/filp>
+ */
+
+namespace Whoops\Exception;
+
+use ArrayAccess;
+use ArrayIterator;
+use Countable;
+use IteratorAggregate;
+use Serializable;
+use UnexpectedValueException;
+
+/**
+ * Exposes a fluent interface for dealing with an ordered list
+ * of stack-trace frames.
+ */
+class FrameCollection implements ArrayAccess, IteratorAggregate, Serializable, Countable
+{
+    /**
+     * @var array[]
+     */
+    private $frames;
+
+    /**
+     * @param array $frames
+     */
+    public function __construct(array $frames)
+    {
+        $this->frames = array_map(function ($frame) {
+            return new Frame($frame);
+        }, $frames);
+    }
+
+    /**
+     * Filters frames using a callable, returns the same FrameCollection
+     *
+     * @param  callable        $callable
+     * @return FrameCollection
+     */
+    public function filter($callable)
+    {
+        $this->frames = array_filter($this->frames, $callable);
+        return $this;
+    }
+
+    /**
+     * Map the collection of frames
+     *
+     * @param  callable        $callable
+     * @return FrameCollection
+     */
+    public function map($callable)
+    {
+        // Contain the map within a higher-order callable
+        // that enforces type-correctness for the $callable
+        $this->frames = array_map(function ($frame) use ($callable) {
+            $frame = call_user_func($callable, $frame);
+
+            if (!$frame instanceof Frame) {
+                throw new UnexpectedValueException(
+                    "Callable to " . __METHOD__ . " must return a Frame object"
+                );
+            }
+
+            return $frame;
+        }, $this->frames);
+
+        return $this;
+    }
+
+    /**
+     * Returns an array with all frames, does not affect
+     * the internal array.
+     *
+     * @todo   If this gets any more complex than this,
+     *         have getIterator use this method.
+     * @see    FrameCollection::getIterator
+     * @return array
+     */
+    public function getArray()
+    {
+        return $this->frames;
+    }
+
+    /**
+     * @see IteratorAggregate::getIterator
+     * @return ArrayIterator
+     */
+    public function getIterator()
+    {
+        return new ArrayIterator($this->frames);
+    }
+
+    /**
+     * @see ArrayAccess::offsetExists
+     * @param int $offset
+     */
+    public function offsetExists($offset)
+    {
+        return isset($this->frames[$offset]);
+    }
+
+    /**
+     * @see ArrayAccess::offsetGet
+     * @param int $offset
+     */
+    public function offsetGet($offset)
+    {
+        return $this->frames[$offset];
+    }
+
+    /**
+     * @see ArrayAccess::offsetSet
+     * @param int $offset
+     */
+    public function offsetSet($offset, $value)
+    {
+        throw new \Exception(__CLASS__ . ' is read only');
+    }
+
+    /**
+     * @see ArrayAccess::offsetUnset
+     * @param int $offset
+     */
+    public function offsetUnset($offset)
+    {
+        throw new \Exception(__CLASS__ . ' is read only');
+    }
+
+    /**
+     * @see Countable::count
+     * @return int
+     */
+    public function count()
+    {
+        return count($this->frames);
+    }
+
+    /**
+     * @see Serializable::serialize
+     * @return string
+     */
+    public function serialize()
+    {
+        return serialize($this->frames);
+    }
+
+    /**
+     * @see Serializable::unserialize
+     * @param string $serializedFrames
+     */
+    public function unserialize($serializedFrames)
+    {
+        $this->frames = unserialize($serializedFrames);
+    }
+
+    /**
+     * @param Frame[] $frames Array of Frame instances, usually from $e->getPrevious()
+     */
+    public function prependFrames(array $frames)
+    {
+        $this->frames = array_merge($frames, $this->frames);
+    }
+
+    /**
+     * Gets the innermost part of stack trace that is not the same as that of outer exception
+     *
+     * @param  FrameCollection $parentFrames Outer exception frames to compare tail against
+     * @return Frame[]
+     */
+    public function topDiff(FrameCollection $parentFrames)
+    {
+        $diff = $this->frames;
+
+        $parentFrames = $parentFrames->getArray();
+        $p = count($parentFrames)-1;
+
+        for ($i = count($diff)-1; $i >= 0 && $p >= 0; $i--) {
+            /** @var Frame $tailFrame */
+            $tailFrame = $diff[$i];
+            if ($tailFrame->equals($parentFrames[$p])) {
+                unset($diff[$i]);
+            }
+            $p--;
+        }
+        return $diff;
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Exception/Inspector.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Exception/Inspector.php b/vendor/filp/whoops/src/Whoops/Exception/Inspector.php
new file mode 100644
index 0000000..06aeec3
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Exception/Inspector.php
@@ -0,0 +1,161 @@
+<?php
+/**
+ * Whoops - php errors for cool kids
+ * @author Filipe Dobreira <http://github.com/filp>
+ */
+
+namespace Whoops\Exception;
+
+use Exception;
+
+class Inspector
+{
+    /**
+     * @var Exception
+     */
+    private $exception;
+
+    /**
+     * @var \Whoops\Exception\FrameCollection
+     */
+    private $frames;
+
+    /**
+     * @var \Whoops\Exception\Inspector
+     */
+    private $previousExceptionInspector;
+
+    /**
+     * @param Exception $exception The exception to inspect
+     */
+    public function __construct(Exception $exception)
+    {
+        $this->exception = $exception;
+    }
+
+    /**
+     * @return Exception
+     */
+    public function getException()
+    {
+        return $this->exception;
+    }
+
+    /**
+     * @return string
+     */
+    public function getExceptionName()
+    {
+        return get_class($this->exception);
+    }
+
+    /**
+     * @return string
+     */
+    public function getExceptionMessage()
+    {
+        return $this->exception->getMessage();
+    }
+
+    /**
+     * Does the wrapped Exception has a previous Exception?
+     * @return bool
+     */
+    public function hasPreviousException()
+    {
+        return $this->previousExceptionInspector || $this->exception->getPrevious();
+    }
+
+    /**
+     * Returns an Inspector for a previous Exception, if any.
+     * @todo   Clean this up a bit, cache stuff a bit better.
+     * @return Inspector
+     */
+    public function getPreviousExceptionInspector()
+    {
+        if ($this->previousExceptionInspector === null) {
+            $previousException = $this->exception->getPrevious();
+
+            if ($previousException) {
+                $this->previousExceptionInspector = new Inspector($previousException);
+            }
+        }
+
+        return $this->previousExceptionInspector;
+    }
+
+    /**
+     * Returns an iterator for the inspected exception's
+     * frames.
+     * @return \Whoops\Exception\FrameCollection
+     */
+    public function getFrames()
+    {
+        if ($this->frames === null) {
+            $frames = $this->exception->getTrace();
+
+            // If we're handling an ErrorException thrown by Whoops,
+            // get rid of the last frame, which matches the handleError method,
+            // and do not add the current exception to trace. We ensure that
+            // the next frame does have a filename / linenumber, though.
+            if ($this->exception instanceof ErrorException && empty($frames[1]['line'])) {
+                $frames = array($this->getFrameFromError($this->exception));
+            } else {
+                $firstFrame = $this->getFrameFromException($this->exception);
+                array_unshift($frames, $firstFrame);
+            }
+            $this->frames = new FrameCollection($frames);
+
+            if ($previousInspector = $this->getPreviousExceptionInspector()) {
+                // Keep outer frame on top of the inner one
+                $outerFrames = $this->frames;
+                $newFrames = clone $previousInspector->getFrames();
+                // I assume it will always be set, but let's be safe
+                if (isset($newFrames[0])) {
+                    $newFrames[0]->addComment(
+                        $previousInspector->getExceptionMessage(),
+                        'Exception message:'
+                    );
+                }
+                $newFrames->prependFrames($outerFrames->topDiff($newFrames));
+                $this->frames = $newFrames;
+            }
+        }
+
+        return $this->frames;
+    }
+
+    /**
+     * Given an exception, generates an array in the format
+     * generated by Exception::getTrace()
+     * @param  Exception $exception
+     * @return array
+     */
+    protected function getFrameFromException(Exception $exception)
+    {
+        return array(
+            'file'  => $exception->getFile(),
+            'line'  => $exception->getLine(),
+            'class' => get_class($exception),
+            'args'  => array(
+                $exception->getMessage(),
+            ),
+        );
+    }
+
+    /**
+     * Given an error, generates an array in the format
+     * generated by ErrorException
+     * @param  ErrorException $exception
+     * @return array
+     */
+    protected function getFrameFromError(ErrorException $exception)
+    {
+        return array(
+            'file'  => $exception->getFile(),
+            'line'  => $exception->getLine(),
+            'class' => null,
+            'args'  => array(),
+        );
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Handler/CallbackHandler.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Handler/CallbackHandler.php b/vendor/filp/whoops/src/Whoops/Handler/CallbackHandler.php
new file mode 100644
index 0000000..cc46e70
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Handler/CallbackHandler.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Whoops - php errors for cool kids
+ * @author Filipe Dobreira <http://github.com/filp>
+ */
+
+namespace Whoops\Handler;
+
+use InvalidArgumentException;
+
+/**
+ * Wrapper for Closures passed as handlers. Can be used
+ * directly, or will be instantiated automagically by Whoops\Run
+ * if passed to Run::pushHandler
+ */
+class CallbackHandler extends Handler
+{
+    /**
+     * @var callable
+     */
+    protected $callable;
+
+    /**
+     * @throws InvalidArgumentException If argument is not callable
+     * @param  callable                 $callable
+     */
+    public function __construct($callable)
+    {
+        if (!is_callable($callable)) {
+            throw new InvalidArgumentException(
+                'Argument to ' . __METHOD__ . ' must be valid callable'
+            );
+        }
+
+        $this->callable = $callable;
+    }
+
+    /**
+     * @return int|null
+     */
+    public function handle()
+    {
+        $exception = $this->getException();
+        $inspector = $this->getInspector();
+        $run       = $this->getRun();
+        $callable  = $this->callable;
+
+        // invoke the callable directly, to get simpler stacktraces (in comparison to call_user_func).
+        // this assumes that $callable is a properly typed php-callable, which we check in __construct().
+        return $callable($exception, $inspector, $run);
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Handler/Handler.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Handler/Handler.php b/vendor/filp/whoops/src/Whoops/Handler/Handler.php
new file mode 100644
index 0000000..d7e78f1
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Handler/Handler.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * Whoops - php errors for cool kids
+ * @author Filipe Dobreira <http://github.com/filp>
+ */
+
+namespace Whoops\Handler;
+
+use Exception;
+use Whoops\Exception\Inspector;
+use Whoops\Run;
+
+/**
+ * Abstract implementation of a Handler.
+ */
+abstract class Handler implements HandlerInterface
+{
+    /**
+     * Return constants that can be returned from Handler::handle
+     * to message the handler walker.
+     */
+    const DONE         = 0x10; // returning this is optional, only exists for
+                               // semantic purposes
+    const LAST_HANDLER = 0x20;
+    const QUIT         = 0x30;
+
+    /**
+     * @var Run
+     */
+    private $run;
+
+    /**
+     * @var Inspector $inspector
+     */
+    private $inspector;
+
+    /**
+     * @var Exception $exception
+     */
+    private $exception;
+
+    /**
+     * @param Run $run
+     */
+    public function setRun(Run $run)
+    {
+        $this->run = $run;
+    }
+
+    /**
+     * @return Run
+     */
+    protected function getRun()
+    {
+        return $this->run;
+    }
+
+    /**
+     * @param Inspector $inspector
+     */
+    public function setInspector(Inspector $inspector)
+    {
+        $this->inspector = $inspector;
+    }
+
+    /**
+     * @return Inspector
+     */
+    protected function getInspector()
+    {
+        return $this->inspector;
+    }
+
+    /**
+     * @param Exception $exception
+     */
+    public function setException(Exception $exception)
+    {
+        $this->exception = $exception;
+    }
+
+    /**
+     * @return Exception
+     */
+    protected function getException()
+    {
+        return $this->exception;
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Handler/HandlerInterface.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Handler/HandlerInterface.php b/vendor/filp/whoops/src/Whoops/Handler/HandlerInterface.php
new file mode 100644
index 0000000..f50bc30
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Handler/HandlerInterface.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Whoops - php errors for cool kids
+ * @author Filipe Dobreira <http://github.com/filp>
+ */
+
+namespace Whoops\Handler;
+
+use Exception;
+use Whoops\Exception\Inspector;
+use Whoops\Run;
+
+interface HandlerInterface
+{
+    /**
+     * @return int|null A handler may return nothing, or a Handler::HANDLE_* constant
+     */
+    public function handle();
+
+    /**
+     * @param  Run  $run
+     * @return void
+     */
+    public function setRun(Run $run);
+
+    /**
+     * @param  Exception $exception
+     * @return void
+     */
+    public function setException(Exception $exception);
+
+    /**
+     * @param  Inspector $inspector
+     * @return void
+     */
+    public function setInspector(Inspector $inspector);
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php b/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php
new file mode 100644
index 0000000..b997438
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php
@@ -0,0 +1,90 @@
+<?php
+/**
+ * Whoops - php errors for cool kids
+ * @author Filipe Dobreira <http://github.com/filp>
+ */
+
+namespace Whoops\Handler;
+
+use Whoops\Exception\Formatter;
+
+/**
+ * Catches an exception and converts it to a JSON
+ * response. Additionally can also return exception
+ * frames for consumption by an API.
+ */
+class JsonResponseHandler extends Handler
+{
+    /**
+     * @var bool
+     */
+    private $returnFrames = false;
+
+    /**
+     * @var bool
+     */
+    private $onlyForAjaxRequests = false;
+
+    /**
+     * @param  bool|null  $returnFrames
+     * @return bool|$this
+     */
+    public function addTraceToOutput($returnFrames = null)
+    {
+        if (func_num_args() == 0) {
+            return $this->returnFrames;
+        }
+
+        $this->returnFrames = (bool) $returnFrames;
+        return $this;
+    }
+
+    /**
+     * @param  bool|null $onlyForAjaxRequests
+     * @return null|bool
+     */
+    public function onlyForAjaxRequests($onlyForAjaxRequests = null)
+    {
+        if (func_num_args() == 0) {
+            return $this->onlyForAjaxRequests;
+        }
+
+        $this->onlyForAjaxRequests = (bool) $onlyForAjaxRequests;
+    }
+
+    /**
+     * Check, if possible, that this execution was triggered by an AJAX request.
+     *
+     * @return bool
+     */
+    private function isAjaxRequest()
+    {
+        return (
+            !empty($_SERVER['HTTP_X_REQUESTED_WITH'])
+            && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
+    }
+
+    /**
+     * @return int
+     */
+    public function handle()
+    {
+        if ($this->onlyForAjaxRequests() && !$this->isAjaxRequest()) {
+            return Handler::DONE;
+        }
+
+        $response = array(
+            'error' => Formatter::formatExceptionAsDataArray(
+                $this->getInspector(),
+                $this->addTraceToOutput()
+            ),
+        );
+
+        if (\Whoops\Util\Misc::canSendHeaders()) {
+            header('Content-Type: application/json');
+        }
+
+        echo json_encode($response);
+        return Handler::QUIT;
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php b/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php
new file mode 100644
index 0000000..0f0d5b4
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php
@@ -0,0 +1,331 @@
+<?php
+/**
+* Whoops - php errors for cool kids
+* @author Filipe Dobreira <http://github.com/filp>
+* Plaintext handler for command line and logs.
+* @author Pierre-Yves Landuré <https://howto.biapy.com/>
+*/
+
+namespace Whoops\Handler;
+
+use InvalidArgumentException;
+use Psr\Log\LoggerInterface;
+use Whoops\Exception\Frame;
+
+/**
+* Handler outputing plaintext error messages. Can be used
+* directly, or will be instantiated automagically by Whoops\Run
+* if passed to Run::pushHandler
+*/
+class PlainTextHandler extends Handler
+{
+    const VAR_DUMP_PREFIX = '   | ';
+
+    /**
+     * @var \Psr\Log\LoggerInterface
+     */
+    protected $logger;
+
+    /**
+     * @var bool
+     */
+    private $addTraceToOutput = true;
+
+    /**
+     * @var bool|integer
+     */
+    private $addTraceFunctionArgsToOutput = false;
+
+    /**
+     * @var integer
+     */
+    private $traceFunctionArgsOutputLimit = 1024;
+
+    /**
+     * @var bool
+     */
+    private $onlyForCommandLine = false;
+
+    /**
+     * @var bool
+     */
+    private $outputOnlyIfCommandLine = true;
+
+    /**
+     * @var bool
+     */
+    private $loggerOnly = false;
+
+    /**
+     * Constructor.
+     * @throws InvalidArgumentException     If argument is not null or a LoggerInterface
+     * @param  \Psr\Log\LoggerInterface|null $logger
+     */
+    public function __construct($logger = null)
+    {
+        $this->setLogger($logger);
+    }
+
+    /**
+     * Set the output logger interface.
+     * @throws InvalidArgumentException     If argument is not null or a LoggerInterface
+     * @param  \Psr\Log\LoggerInterface|null $logger
+     */
+    public function setLogger($logger = null)
+    {
+        if (! (is_null($logger)
+            || $logger instanceof LoggerInterface)) {
+            throw new InvalidArgumentException(
+                'Argument to ' . __METHOD__ .
+                " must be a valid Logger Interface (aka. Monolog), " .
+                get_class($logger) . ' given.'
+            );
+        }
+
+        $this->logger = $logger;
+    }
+
+    /**
+     * @return \Psr\Log\LoggerInterface|null
+     */
+    public function getLogger()
+    {
+        return $this->logger;
+    }
+
+    /**
+     * Add error trace to output.
+     * @param  bool|null  $addTraceToOutput
+     * @return bool|$this
+     */
+    public function addTraceToOutput($addTraceToOutput = null)
+    {
+        if (func_num_args() == 0) {
+            return $this->addTraceToOutput;
+        }
+
+        $this->addTraceToOutput = (bool) $addTraceToOutput;
+        return $this;
+    }
+
+    /**
+     * Add error trace function arguments to output.
+     * Set to True for all frame args, or integer for the n first frame args.
+     * @param  bool|integer|null $addTraceFunctionArgsToOutput
+     * @return null|bool|integer
+     */
+    public function addTraceFunctionArgsToOutput($addTraceFunctionArgsToOutput = null)
+    {
+        if (func_num_args() == 0) {
+            return $this->addTraceFunctionArgsToOutput;
+        }
+
+        if (! is_integer($addTraceFunctionArgsToOutput)) {
+            $this->addTraceFunctionArgsToOutput = (bool) $addTraceFunctionArgsToOutput;
+        } else {
+            $this->addTraceFunctionArgsToOutput = $addTraceFunctionArgsToOutput;
+        }
+    }
+
+    /**
+     * Set the size limit in bytes of frame arguments var_dump output.
+     * If the limit is reached, the var_dump output is discarded.
+     * Prevent memory limit errors.
+     * @var integer
+     */
+    public function setTraceFunctionArgsOutputLimit($traceFunctionArgsOutputLimit)
+    {
+        $this->traceFunctionArgsOutputLimit = (integer) $traceFunctionArgsOutputLimit;
+    }
+
+    /**
+     * Get the size limit in bytes of frame arguments var_dump output.
+     * If the limit is reached, the var_dump output is discarded.
+     * Prevent memory limit errors.
+     * @return integer
+     */
+    public function getTraceFunctionArgsOutputLimit()
+    {
+        return $this->traceFunctionArgsOutputLimit;
+    }
+
+    /**
+     * Restrict error handling to command line calls.
+     * @param  bool|null $onlyForCommandLine
+     * @return null|bool
+     */
+    public function onlyForCommandLine($onlyForCommandLine = null)
+    {
+        if (func_num_args() == 0) {
+            return $this->onlyForCommandLine;
+        }
+        $this->onlyForCommandLine = (bool) $onlyForCommandLine;
+    }
+
+    /**
+     * Output the error message only if using command line.
+     * else, output to logger if available.
+     * Allow to safely add this handler to web pages.
+     * @param  bool|null $outputOnlyIfCommandLine
+     * @return null|bool
+     */
+    public function outputOnlyIfCommandLine($outputOnlyIfCommandLine = null)
+    {
+        if (func_num_args() == 0) {
+            return $this->outputOnlyIfCommandLine;
+        }
+        $this->outputOnlyIfCommandLine = (bool) $outputOnlyIfCommandLine;
+    }
+
+    /**
+     * Only output to logger.
+     * @param  bool|null $loggerOnly
+     * @return null|bool
+     */
+    public function loggerOnly($loggerOnly = null)
+    {
+        if (func_num_args() == 0) {
+            return $this->loggerOnly;
+        }
+
+        $this->loggerOnly = (bool) $loggerOnly;
+    }
+
+    /**
+     * Check, if possible, that this execution was triggered by a command line.
+     * @return bool
+     */
+    private function isCommandLine()
+    {
+        return PHP_SAPI == 'cli';
+    }
+
+    /**
+     * Test if handler can process the exception..
+     * @return bool
+     */
+    private function canProcess()
+    {
+        return $this->isCommandLine() || !$this->onlyForCommandLine();
+    }
+
+    /**
+     * Test if handler can output to stdout.
+     * @return bool
+     */
+    private function canOutput()
+    {
+        return ($this->isCommandLine() || ! $this->outputOnlyIfCommandLine())
+            && ! $this->loggerOnly();
+    }
+
+    /**
+     * Get the frame args var_dump.
+     * @param  \Whoops\Exception\Frame $frame [description]
+     * @param  integer                 $line  [description]
+     * @return string
+     */
+    private function getFrameArgsOutput(Frame $frame, $line)
+    {
+        if ($this->addTraceFunctionArgsToOutput() === false
+            || $this->addTraceFunctionArgsToOutput() < $line) {
+            return '';
+        }
+
+        // Dump the arguments:
+        ob_start();
+        var_dump($frame->getArgs());
+        if (ob_get_length() > $this->getTraceFunctionArgsOutputLimit()) {
+            // The argument var_dump is to big.
+            // Discarded to limit memory usage.
+            ob_clean();
+            return sprintf(
+                "\n%sArguments dump length greater than %d Bytes. Discarded.",
+                self::VAR_DUMP_PREFIX,
+                $this->getTraceFunctionArgsOutputLimit()
+            );
+        }
+
+        return sprintf("\n%s",
+            preg_replace('/^/m', self::VAR_DUMP_PREFIX, ob_get_clean())
+        );
+    }
+
+    /**
+     * Get the exception trace as plain text.
+     * @return string
+     */
+    private function getTraceOutput()
+    {
+        if (! $this->addTraceToOutput()) {
+            return '';
+        }
+        $inspector = $this->getInspector();
+        $frames = $inspector->getFrames();
+
+        $response = "\nStack trace:";
+
+        $line = 1;
+        foreach ($frames as $frame) {
+            /** @var Frame $frame */
+            $class = $frame->getClass();
+
+            $template = "\n%3d. %s->%s() %s:%d%s";
+            if (! $class) {
+                // Remove method arrow (->) from output.
+                $template = "\n%3d. %s%s() %s:%d%s";
+            }
+
+            $response .= sprintf(
+                $template,
+                $line,
+                $class,
+                $frame->getFunction(),
+                $frame->getFile(),
+                $frame->getLine(),
+                $this->getFrameArgsOutput($frame, $line)
+            );
+
+            $line++;
+        }
+
+        return $response;
+    }
+
+    /**
+     * @return int
+     */
+    public function handle()
+    {
+        if (! $this->canProcess()) {
+            return Handler::DONE;
+        }
+
+        $exception = $this->getException();
+
+        $response = sprintf("%s: %s in file %s on line %d%s\n",
+                get_class($exception),
+                $exception->getMessage(),
+                $exception->getFile(),
+                $exception->getLine(),
+                $this->getTraceOutput()
+            );
+
+        if ($this->getLogger()) {
+            $this->getLogger()->error($response);
+        }
+
+        if (! $this->canOutput()) {
+            return Handler::DONE;
+        }
+
+        if (class_exists('\Whoops\Util\Misc')
+            && \Whoops\Util\Misc::canSendHeaders()) {
+            header('Content-Type: text/plain');
+        }
+
+        echo $response;
+
+        return Handler::QUIT;
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php b/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php
new file mode 100644
index 0000000..83295e1
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php
@@ -0,0 +1,468 @@
+<?php
+/**
+ * Whoops - php errors for cool kids
+ * @author Filipe Dobreira <http://github.com/filp>
+ */
+
+namespace Whoops\Handler;
+
+use InvalidArgumentException;
+use RuntimeException;
+use Whoops\Exception\Formatter;
+use Whoops\Util\Misc;
+use Whoops\Util\TemplateHelper;
+
+class PrettyPageHandler extends Handler
+{
+    /**
+     * Search paths to be scanned for resources, in the reverse
+     * order they're declared.
+     *
+     * @var array
+     */
+    private $searchPaths = array();
+
+    /**
+     * Fast lookup cache for known resource locations.
+     *
+     * @var array
+     */
+    private $resourceCache = array();
+
+    /**
+     * The name of the custom css file.
+     *
+     * @var string
+     */
+    private $customCss = null;
+
+    /**
+     * @var array[]
+     */
+    private $extraTables = array();
+
+    /**
+     * @var bool
+     */
+    private $handleUnconditionally = false;
+
+    /**
+     * @var string
+     */
+    private $pageTitle = "Whoops! There was an error.";
+
+    /**
+     * A string identifier for a known IDE/text editor, or a closure
+     * that resolves a string that can be used to open a given file
+     * in an editor. If the string contains the special substrings
+     * %file or %line, they will be replaced with the correct data.
+     *
+     * @example
+     *  "txmt://open?url=%file&line=%line"
+     * @var mixed $editor
+     */
+    protected $editor;
+
+    /**
+     * A list of known editor strings
+     * @var array
+     */
+    protected $editors = array(
+        "sublime"  => "subl://open?url=file://%file&line=%line",
+        "textmate" => "txmt://open?url=file://%file&line=%line",
+        "emacs"    => "emacs://open?url=file://%file&line=%line",
+        "macvim"   => "mvim://open/?url=file://%file&line=%line",
+    );
+
+    /**
+     * Constructor.
+     */
+    public function __construct()
+    {
+        if (ini_get('xdebug.file_link_format') || extension_loaded('xdebug')) {
+            // Register editor using xdebug's file_link_format option.
+            $this->editors['xdebug'] = function ($file, $line) {
+                return str_replace(array('%f', '%l'), array($file, $line), ini_get('xdebug.file_link_format'));
+            };
+        }
+
+        // Add the default, local resource search path:
+        $this->searchPaths[] = __DIR__ . "/../Resources";
+    }
+
+    /**
+     * @return int|null
+     */
+    public function handle()
+    {
+        if (!$this->handleUnconditionally()) {
+            // Check conditions for outputting HTML:
+            // @todo: Make this more robust
+            if (php_sapi_name() === 'cli') {
+                // Help users who have been relying on an internal test value
+                // fix their code to the proper method
+                if (isset($_ENV['whoops-test'])) {
+                    throw new \Exception(
+                        'Use handleUnconditionally instead of whoops-test'
+                        .' environment variable'
+                    );
+                }
+
+                return Handler::DONE;
+            }
+        }
+
+        // @todo: Make this more dynamic
+        $helper = new TemplateHelper();
+
+        $templateFile = $this->getResource("views/layout.html.php");
+        $cssFile      = $this->getResource("css/whoops.base.css");
+        $zeptoFile    = $this->getResource("js/zepto.min.js");
+        $jsFile       = $this->getResource("js/whoops.base.js");
+
+        if ($this->customCss) {
+            $customCssFile = $this->getResource($this->customCss);
+        }
+
+        $inspector = $this->getInspector();
+        $frames    = $inspector->getFrames();
+
+        $code = $inspector->getException()->getCode();
+
+        if ($inspector->getException() instanceof \ErrorException) {
+            // ErrorExceptions wrap the php-error types within the "severity" property
+            $code = Misc::translateErrorCode($inspector->getException()->getSeverity());
+        }
+
+        // List of variables that will be passed to the layout template.
+        $vars = array(
+            "page_title" => $this->getPageTitle(),
+
+            // @todo: Asset compiler
+            "stylesheet" => file_get_contents($cssFile),
+            "zepto"      => file_get_contents($zeptoFile),
+            "javascript" => file_get_contents($jsFile),
+
+            // Template paths:
+            "header"      => $this->getResource("views/header.html.php"),
+            "frame_list"  => $this->getResource("views/frame_list.html.php"),
+            "frame_code"  => $this->getResource("views/frame_code.html.php"),
+            "env_details" => $this->getResource("views/env_details.html.php"),
+
+            "title"          => $this->getPageTitle(),
+            "name"           => explode("\\", $inspector->getExceptionName()),
+            "message"        => $inspector->getException()->getMessage(),
+            "code"           => $code,
+            "plain_exception" => Formatter::formatExceptionPlain($inspector),
+            "frames"         => $frames,
+            "has_frames"     => !!count($frames),
+            "handler"        => $this,
+            "handlers"       => $this->getRun()->getHandlers(),
+
+            "tables"      => array(
+                "Server/Request Data"   => $_SERVER,
+                "GET Data"              => $_GET,
+                "POST Data"             => $_POST,
+                "Files"                 => $_FILES,
+                "Cookies"               => $_COOKIE,
+                "Session"               => isset($_SESSION) ? $_SESSION :  array(),
+                "Environment Variables" => $_ENV,
+            ),
+        );
+
+        if (isset($customCssFile)) {
+            $vars["stylesheet"] .= file_get_contents($customCssFile);
+        }
+
+        // Add extra entries list of data tables:
+        // @todo: Consolidate addDataTable and addDataTableCallback
+        $extraTables = array_map(function ($table) {
+            return $table instanceof \Closure ? $table() : $table;
+        }, $this->getDataTables());
+        $vars["tables"] = array_merge($extraTables, $vars["tables"]);
+
+        $helper->setVariables($vars);
+        $helper->render($templateFile);
+
+        return Handler::QUIT;
+    }
+
+    /**
+     * Adds an entry to the list of tables displayed in the template.
+     * The expected data is a simple associative array. Any nested arrays
+     * will be flattened with print_r
+     * @param string $label
+     * @param array  $data
+     */
+    public function addDataTable($label, array $data)
+    {
+        $this->extraTables[$label] = $data;
+    }
+
+    /**
+     * Lazily adds an entry to the list of tables displayed in the table.
+     * The supplied callback argument will be called when the error is rendered,
+     * it should produce a simple associative array. Any nested arrays will
+     * be flattened with print_r.
+     *
+     * @throws InvalidArgumentException If $callback is not callable
+     * @param  string                   $label
+     * @param  callable                 $callback Callable returning an associative array
+     */
+    public function addDataTableCallback($label, /* callable */ $callback)
+    {
+        if (!is_callable($callback)) {
+            throw new InvalidArgumentException('Expecting callback argument to be callable');
+        }
+
+        $this->extraTables[$label] = function () use ($callback) {
+            try {
+                $result = call_user_func($callback);
+
+                // Only return the result if it can be iterated over by foreach().
+                return is_array($result) || $result instanceof \Traversable ? $result : array();
+            } catch (\Exception $e) {
+                // Don't allow failure to break the rendering of the original exception.
+                return array();
+            }
+        };
+    }
+
+    /**
+     * Returns all the extra data tables registered with this handler.
+     * Optionally accepts a 'label' parameter, to only return the data
+     * table under that label.
+     * @param  string|null      $label
+     * @return array[]|callable
+     */
+    public function getDataTables($label = null)
+    {
+        if ($label !== null) {
+            return isset($this->extraTables[$label]) ?
+                   $this->extraTables[$label] : array();
+        }
+
+        return $this->extraTables;
+    }
+
+    /**
+     * Allows to disable all attempts to dynamically decide whether to
+     * handle or return prematurely.
+     * Set this to ensure that the handler will perform no matter what.
+     * @param  bool|null $value
+     * @return bool|null
+     */
+    public function handleUnconditionally($value = null)
+    {
+        if (func_num_args() == 0) {
+            return $this->handleUnconditionally;
+        }
+
+        $this->handleUnconditionally = (bool) $value;
+    }
+
+    /**
+     * Adds an editor resolver, identified by a string
+     * name, and that may be a string path, or a callable
+     * resolver. If the callable returns a string, it will
+     * be set as the file reference's href attribute.
+     *
+     * @example
+     *  $run->addEditor('macvim', "mvim://open?url=file://%file&line=%line")
+     * @example
+     *   $run->addEditor('remove-it', function($file, $line) {
+     *       unlink($file);
+     *       return "http://stackoverflow.com";
+     *   });
+     * @param string $identifier
+     * @param string $resolver
+     */
+    public function addEditor($identifier, $resolver)
+    {
+        $this->editors[$identifier] = $resolver;
+    }
+
+    /**
+     * Set the editor to use to open referenced files, by a string
+     * identifier, or a callable that will be executed for every
+     * file reference, with a $file and $line argument, and should
+     * return a string.
+     *
+     * @example
+     *   $run->setEditor(function($file, $line) { return "file:///{$file}"; });
+     * @example
+     *   $run->setEditor('sublime');
+     *
+     * @throws InvalidArgumentException If invalid argument identifier provided
+     * @param  string|callable          $editor
+     */
+    public function setEditor($editor)
+    {
+        if (!is_callable($editor) && !isset($this->editors[$editor])) {
+            throw new InvalidArgumentException(
+                "Unknown editor identifier: $editor. Known editors:" .
+                implode(",", array_keys($this->editors))
+            );
+        }
+
+        $this->editor = $editor;
+    }
+
+    /**
+     * Given a string file path, and an integer file line,
+     * executes the editor resolver and returns, if available,
+     * a string that may be used as the href property for that
+     * file reference.
+     *
+     * @throws InvalidArgumentException If editor resolver does not return a string
+     * @param  string                   $filePath
+     * @param  int                      $line
+     * @return false|string
+     */
+    public function getEditorHref($filePath, $line)
+    {
+        if ($this->editor === null) {
+            return false;
+        }
+
+        $editor = $this->editor;
+        if (is_string($editor)) {
+            $editor = $this->editors[$editor];
+        }
+
+        if (is_callable($editor)) {
+            $editor = call_user_func($editor, $filePath, $line);
+        }
+
+        // Check that the editor is a string, and replace the
+        // %line and %file placeholders:
+        if (!is_string($editor)) {
+            throw new InvalidArgumentException(
+                __METHOD__ . " should always resolve to a string; got something else instead"
+            );
+        }
+
+        $editor = str_replace("%line", rawurlencode($line), $editor);
+        $editor = str_replace("%file", rawurlencode($filePath), $editor);
+
+        return $editor;
+    }
+
+    /**
+     * @param  string $title
+     * @return void
+     */
+    public function setPageTitle($title)
+    {
+        $this->pageTitle = (string) $title;
+    }
+
+    /**
+     * @return string
+     */
+    public function getPageTitle()
+    {
+        return $this->pageTitle;
+    }
+
+    /**
+     * Adds a path to the list of paths to be searched for
+     * resources.
+     *
+     * @throws InvalidArgumnetException If $path is not a valid directory
+     *
+     * @param  string $path
+     * @return void
+     */
+    public function addResourcePath($path)
+    {
+        if (!is_dir($path)) {
+            throw new InvalidArgumentException(
+                "'$path' is not a valid directory"
+            );
+        }
+
+        array_unshift($this->searchPaths, $path);
+    }
+
+    /**
+     * Adds a custom css file to be loaded.
+     *
+     * @param  string $name
+     * @return void
+     */
+    public function addCustomCss($name)
+    {
+        $this->customCss = $name;
+    }
+
+    /**
+     * @return array
+     */
+    public function getResourcePaths()
+    {
+        return $this->searchPaths;
+    }
+
+    /**
+     * Finds a resource, by its relative path, in all available search paths.
+     * The search is performed starting at the last search path, and all the
+     * way back to the first, enabling a cascading-type system of overrides
+     * for all resources.
+     *
+     * @throws RuntimeException If resource cannot be found in any of the available paths
+     *
+     * @param  string $resource
+     * @return string
+     */
+    protected function getResource($resource)
+    {
+        // If the resource was found before, we can speed things up
+        // by caching its absolute, resolved path:
+        if (isset($this->resourceCache[$resource])) {
+            return $this->resourceCache[$resource];
+        }
+
+        // Search through available search paths, until we find the
+        // resource we're after:
+        foreach ($this->searchPaths as $path) {
+            $fullPath = $path . "/$resource";
+
+            if (is_file($fullPath)) {
+                // Cache the result:
+                $this->resourceCache[$resource] = $fullPath;
+                return $fullPath;
+            }
+        }
+
+        // If we got this far, nothing was found.
+        throw new RuntimeException(
+            "Could not find resource '$resource' in any resource paths."
+            . "(searched: " . join(", ", $this->searchPaths). ")"
+        );
+    }
+
+    /**
+     * @deprecated
+     *
+     * @return string
+     */
+    public function getResourcesPath()
+    {
+        $allPaths = $this->getResourcePaths();
+
+        // Compat: return only the first path added
+        return end($allPaths) ?: null;
+    }
+
+    /**
+     * @deprecated
+     *
+     * @param  string $resourcesPath
+     * @return void
+     */
+    public function setResourcesPath($resourcesPath)
+    {
+        $this->addResourcePath($resourcesPath);
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Handler/SoapResponseHandler.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Handler/SoapResponseHandler.php b/vendor/filp/whoops/src/Whoops/Handler/SoapResponseHandler.php
new file mode 100644
index 0000000..2173dd7
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Handler/SoapResponseHandler.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Whoops - php errors for cool kids
+ * @author Filipe Dobreira <http://github.com/filp>
+ */
+
+namespace Whoops\Handler;
+
+
+/**
+ * Catches an exception and converts it to an Soap XML
+ * response.
+ *
+ * @author Markus Staab <http://github.com/staabm>
+ */
+class SoapResponseHandler extends Handler
+{
+    /**
+     * @return int
+     */
+    public function handle()
+    {
+        $exception = $this->getException();
+
+        echo $this->toXml($exception);
+
+        return Handler::QUIT;
+    }
+
+    /**
+     * Converts a Exception into a SoapFault XML
+     */
+    private function toXml(\Exception $exception)
+    {
+        $xml = '';
+        $xml .= '<?xml version="1.0" encoding="UTF-8"?>';
+        $xml .= '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">';
+        $xml .= '  <SOAP-ENV:Body>';
+        $xml .= '    <SOAP-ENV:Fault>';
+        $xml .= '      <faultcode>'. htmlspecialchars($exception->getCode()) .'</faultcode>';
+        $xml .= '      <faultstring>'. htmlspecialchars($exception->getMessage()) .'</faultstring>';
+        $xml .= '      <detail><trace>'. htmlspecialchars($exception->getTraceAsString()) .'</trace></detail>';
+        $xml .= '    </SOAP-ENV:Fault>';
+        $xml .= '  </SOAP-ENV:Body>';
+        $xml .= '</SOAP-ENV:Envelope>';
+
+        return $xml;
+    }
+}


[38/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/utilities.php
----------------------------------------------------------------------
diff --git a/app/libraries/utilities.php b/app/libraries/utilities.php
new file mode 100644
index 0000000..a456673
--- /dev/null
+++ b/app/libraries/utilities.php
@@ -0,0 +1,2111 @@
+<?php
+
+//Thrift classes - loaded from Vendor/Thrift
+use Thrift\Transport\TTransport;
+use Thrift\Exception\TException;
+use Thrift\Exception\TTransportException;
+use Thrift\Factory\TStringFuncFactory;
+use Thrift\Protocol\TBinaryProtocol;
+use Thrift\Transport\TSocket;
+
+//Airavata classes - loaded from app/libraries/Airavata
+use Airavata\API\AiravataClient;
+use Airavata\API\Error\InvalidRequestException;
+use Airavata\API\Error\AiravataClientException;
+use Airavata\API\Error\AiravataSystemException;
+use Airavata\API\Error\ExperimentNotFoundException;
+use Airavata\Model\Workspace\Experiment\ComputationalResourceScheduling;
+use Airavata\Model\AppCatalog\AppInterface\InputDataObjectType;
+use Airavata\Model\Workspace\Experiment\UserConfigurationData;
+use Airavata\Model\Workspace\Experiment\AdvancedOutputDataHandling;
+use Airavata\Model\Workspace\Experiment\Experiment;
+use Airavata\Model\Workspace\Experiment\ExperimentState;
+use Airavata\Model\AppCatalog\AppInterface\DataType;
+use Airavata\Model\Workspace\Project;
+use Airavata\Model\Workspace\Experiment\JobState;
+use Airavata\Model\AppCatalog\ComputeResource\JobSubmissionInterface;
+use Airavata\Model\AppCatalog\ComputeResource\JobSubmissionProtocol;
+
+
+
+class Utilities{
+/**
+ * Basic utility functions
+ */
+
+/*
+
+************* IMPORTANT ************
+
+READ :: ALL CONSTANTS ARE NOW BEING CALLED FROM app/models/Constant.php. 
+
+************* IMPORTANT ************
+*/
+private $tokenFilePath = 'tokens.xml';
+private $tokenFile = null;
+
+private $sshUser;
+private $hostName;
+private static $pathConstant;
+private static $experimentPath;
+private static $experimentDataPathAbsolute;
+
+function __construct(){
+	$this->sshUser = "root";
+	$this->hostName = $_SERVER['SERVER_NAME'];
+
+    self::$experimentDataPathAbsolute = base_path() . Constant::EXPERIMENT_DATA_ROOT;
+	self::$pathConstant = 'file://'.$this->sshUser.'@'.$this->hostName.':' . self::$experimentDataPathAbsolute;
+	self::$experimentPath = null;
+}
+
+/**
+ * Print success message
+ * @param $message
+ */
+public static function print_success_message($message)
+{
+    echo '<div class="alert alert-success">' . $message . '</div>';
+}
+
+/**
+ * Print warning message
+ * @param $message
+ */
+public static function print_warning_message($message)
+{
+    echo '<div class="alert alert-warning">' . $message . '</div>';
+}
+
+/**
+ * Print error message
+ * @param $message
+ */
+public static function print_error_message($message)
+{
+    echo '<div class="alert alert-danger">' . $message . '</div>';
+}
+
+/**
+ * Print info message
+ * @param $message
+ */
+public static function print_info_message($message)
+{
+    echo '<div class="alert alert-info">' . $message . '</div>';
+}
+
+/**
+ * Redirect to the given url
+ * @param $url
+ */
+public static function redirect($url)
+{
+    echo '<meta http-equiv="Refresh" content="0; URL=' . $url . '">';
+}
+
+/**
+ * Return true if the form has been submitted
+ * @return bool
+ */
+public static function form_submitted()
+{
+    return isset($_POST['Submit']);
+}
+
+/**
+ * Compare the submitted credentials with those stored in the database
+ * @param $username
+ * @param $password
+ * @return bool
+ */
+public static function id_matches_db($username, $password)
+{
+    $idStore = new WSISUtilities();
+
+    try
+    {
+        $idStore->connect();
+    }
+    catch (Exception $e)
+    {
+        Utilities::print_error_message('<p>Error connecting to ID store.
+            Please try again later or report a bug using the link in the Help menu</p>' .
+            '<p>' . $e->getMessage() . '</p>');
+    }
+    //checking user roles.
+    //var_dump( $idStore->updateRoleListOfUser( $username, array( "new"=>array("admin"), "deleted"=>array() ) ) );
+    //var_dump($idStore->getRoleListOfUser( $username) ); exit;
+    //var_dump( $idStore->authenticate($username, $password)); exit;
+    if($idStore->authenticate($username, $password))
+    {
+        //checking if user is an Admin and saving in Session.
+       $app_config = Utilities::read_config();
+
+        if( in_array( $app_config["admin-role"], (array)$idStore->getRoleListOfUser( $username)))
+        {
+            Session::put("admin", true);
+        }
+        return true;
+    }else{
+        return false;
+    }
+}
+
+
+/**
+ * Store username in session variables
+ * @param $username
+ */
+public static function store_id_in_session($username)
+{
+    Session::put('username', $username );
+    Session::put('loggedin', true);
+}
+
+/**
+ * Return true if the username stored in the session
+ * @return bool
+ */
+public static function id_in_session()
+{
+    if( Session::has("username") && Session::has('loggedin') )
+        return true;
+    else
+        return false;
+}
+
+/**
+ * Verify if the user is already logged in. If not, redirect to the home page.
+ */
+public static function verify_login()
+{
+    if (Utilities::id_in_session())
+    {
+        return true;
+    }
+    else
+    {
+        Utilities::print_error_message('User is not logged in!');
+        return false;
+    }
+}
+
+/**
+ * Connect to the ID store
+ */
+public static function connect_to_id_store()
+{
+    global $idStore;
+    $app_config = Utilities::read_config();
+
+    switch ($app_config["user-store"])
+    {
+        case 'WSO2':
+            $idStore = new WSISUtilities(); // WS02 Identity Server
+            break;
+        case 'XML':
+            $idStore = new XmlIdUtilities(); // XML user database
+            break;
+        case 'USER_API':
+            $idStore = new UserAPIUtilities(); // Airavata UserAPI
+            break;
+    }
+
+    try
+    {
+        $idStore->connect();
+    }
+    catch (Exception $e)
+    {
+        Utilities::print_error_message('<p>Error connecting to ID store.
+            Please try again later or report a bug using the link in the Help menu</p>' .
+            '<p>' . $e->getMessage() . '</p>');
+    }
+}
+
+/**
+ * Return an Airavata client
+ * @return AiravataClient
+ */
+public static function get_airavata_client()
+{
+    try
+    {
+        $app_config = Utilities::read_config();
+        $transport = new TSocket( $app_config["airavata-server"], $app_config["airavata-port"]);
+        $transport->setRecvTimeout( $app_config["airavata-timeout"]);
+        $transport->setSendTimeout( $app_config["airavata-timeout"]);
+
+        $protocol = new TBinaryProtocol($transport);
+        $transport->open();
+
+        $client = new AiravataClient($protocol);
+
+        if( is_object( $client))
+            return $client;
+        else
+            return Redirect::to("airavata/down");
+    }
+    catch (Exception $e)
+    {
+        /*Utilities::print_error_message('<p>There was a problem connecting to Airavata.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>' . $e->getMessage() . '</p>');
+        */
+        
+    }
+}
+
+
+
+/**
+ * Launch the experiment with the given ID
+ * @param $expId
+ */
+public static function launch_experiment($expId)
+{
+    $airavataclient = Session::get("airavataClient");
+    //global $tokenFilePath;
+    try
+    {
+        /* temporarily using hard-coded token
+        open_tokens_file($tokenFilePath);
+
+        $communityToken = $tokenFile->tokenId;
+
+
+        $token = isset($_SESSION['tokenId'])? $_SESSION['tokenId'] : $communityToken;
+
+        $airavataclient->launchExperiment($expId, $token);
+
+        $tokenString = isset($_SESSION['tokenId'])? 'personal' : 'community';
+
+        Utilities::print_success_message('Experiment launched using ' . $tokenString . ' allocation!');
+        */
+
+        $app_config = Utilities::read_config();
+        $hardCodedToken = $app_config['credential-store-token'];
+        $airavataclient->launchExperiment($expId, $hardCodedToken);
+
+        /*
+        Utilities::print_success_message('Experiment launched!');
+        Utilities::print_success_message("<p>Experiment launched!</p>" .
+            '<p>You will be redirected to the summary page shortly, or you can
+            <a href="experiment_summary.php?expId=' . $expId . '">go directly</a> to the experiment summary page.</p>');
+        redirect('experiment_summary.php?expId=' . $expId);
+        */
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem launching the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (ExperimentNotFoundException $enf)
+    {
+        Utilities::print_error_message('<p>There was a problem launching the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem launching the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem launching the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
+    }
+    catch (Exception $e)
+    {
+        Utilities::print_error_message('<p>There was a problem launching the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Exception: ' . $e->getMessage() . '</p>');
+    }
+}
+
+/**
+ * Get all projects owned by the given user
+ * @param $username
+ * @return null
+ */
+public static function get_all_user_projects($gatewayId, $username)
+{
+    $airavataclient = Session::get("airavataClient");
+    $userProjects = null;
+
+    try
+    {
+        $userProjects = $airavataclient->getAllUserProjects($gatewayId, $username);
+        //var_dump( $userProjects); exit;
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the user\'s projects.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage(). '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the user\'s projects.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata Client Exception: ' . $ace->getMessage(). '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        if ($ase->airavataErrorType == 2) // 2 = INTERNAL_ERROR
+        {
+            Utilities::print_warning_message('<p>You must create a project before you can create an experiment.
+                Click <a href="' . URL::to('/') . '/project/create">here</a> to create a project.</p>');
+        }
+        else
+        {
+            Utilities::print_error_message('<p>There was a problem getting the user\'s projects.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
+        }
+    }
+
+    return $userProjects;
+}
+
+
+/**
+ * Get all available applications
+ * @return null
+ */
+public static function get_all_applications()
+{
+    $airavataclient = Session::get("airavataClient");
+    $applications = null;
+
+    try
+    {
+        $applications = $airavataclient->getAllApplicationInterfaceNames( Session::get("gateway_id"));
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting all applications.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting all applications.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_warning_message('<p>You must create an application module, interface and deployment space before you can create an experiment.
+                Click <a href="' . URL::to('/') . '/app/module">here</a> to create an application.</p>');
+        /*
+        Utilities::print_error_message('<p>There was a problem getting all applications.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
+            */
+    }
+
+    if( count( $applications) == 0)
+        Utilities::print_warning_message('<p>You must create an application module, interface and deployment space before you can create an experiment.
+                Click <a href="' . URL::to('/') . '/app/module">here</a> to create an application.</p>');
+        
+
+    return $applications;
+}
+
+
+/**
+ * Get the interface for the application with the given ID
+ * @param $id
+ * @return null
+ */
+public static function get_application_interface($id)
+{
+    $airavataclient = Session::get("airavataClient");
+    $applicationInterface = null;
+
+    try
+    {
+        $applicationInterface = $airavataclient->getApplicationInterface($id);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the application interface.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage(). '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the application interface.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the application interface.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
+    }
+
+    return $applicationInterface;
+}
+
+
+/**
+ * Get a list of compute resources available for the given application ID
+ * @param $id
+ * @return null
+ */
+public static function get_available_app_interface_compute_resources($id)
+{
+    $airavataclient = Session::get("airavataClient");
+    $computeResources = null;
+
+    try
+    {
+        $computeResources = $airavataclient->getAvailableAppInterfaceComputeResources($id);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting compute resources.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting compute resources.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem getting compute resources.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
+    }
+
+    return $computeResources;
+}
+
+
+/**
+ * Get the ComputeResourceDescription with the given ID
+ * @param $id
+ * @return null
+ */
+public static function get_compute_resource($id)
+{
+    $airavataclient = Session::get("airavataClient");
+    $computeResource = null;
+
+    try
+    {
+        $computeResource = $airavataclient->getComputeResource($id);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the compute resource.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the compute resource.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the compute resource.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
+    }
+
+    return $computeResource;
+}
+
+
+/**
+ * List the experiment's input files
+ * @param $experiment
+ */
+public static function list_input_files($experiment)
+{
+    $applicationInputs = Utilities::get_application_inputs($experiment->applicationId);
+
+    $experimentInputs = $experiment->experimentInputs;
+
+
+    //showing experiment inputs in the order defined by the admins.
+    $order = array();
+    foreach ($experimentInputs as $index => $input)
+    {
+        $order[$index] = $input->inputOrder;
+    }
+    array_multisort($order, SORT_ASC, $experimentInputs);
+    
+    foreach ($experimentInputs as $input)
+    {
+        $matchingAppInput = null;
+
+        foreach($applicationInputs as $applicationInput)
+        {
+            if ($input->name == $applicationInput->name)
+            {
+                $matchingAppInput = $applicationInput;
+            }
+        }
+        //var_dump($matchingAppInput);
+
+        if ($matchingAppInput->type == DataType::URI)
+        {
+            $explode = explode('/', $input->value);
+            echo '<p><a target="_blank"
+                        href="' . URL::to("/") . "/../../" . Constant::EXPERIMENT_DATA_ROOT . $explode[sizeof($explode)-2] . '/' . $explode[sizeof($explode)-1] . '">' .
+                $explode[sizeof($explode)-1] . '
+                <span class="glyphicon glyphicon-new-window"></span></a></p>';
+        }
+        elseif ($matchingAppInput->type == DataType::STRING)
+        {
+            echo '<p>' . $input->name . ': ' . $input->value . '</p>';
+        }
+    }
+}
+
+
+/**
+ * Get a list of the inputs for the application with the given ID
+ * @param $id
+ * @return null
+ */
+public static function get_application_inputs($id)
+{
+    $airavataclient = Session::get("airavataClient");
+    $inputs = null;
+
+    try
+    {
+        $inputs = $airavataclient->getApplicationInputs($id);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting application inputs.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting application inputs.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem getting application inputs.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
+    }
+
+    return $inputs;
+}
+
+
+/**
+ * Get a list of the outputs for the application with the given ID
+ * @param $id
+ * @return null
+ */
+public static function get_application_outputs($id)
+{
+    $airavataclient = Session::get("airavataClient");
+    $outputs = null;
+
+    try
+    {
+        $outputs = $airavataclient->getApplicationOutputs($id);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting application outputs.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting application outputs.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem getting application outputs.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
+    }
+
+    return $outputs;
+}
+
+
+/**
+ * Get the experiment with the given ID
+ * @param $expId
+ * @return null
+ */
+public static function get_experiment($expId)
+{
+    $airavataclient = Session::get("airavataClient");
+
+    try
+    {
+        return $airavataclient->getExperiment($expId);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (ExperimentNotFoundException $enf)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
+    }
+    catch (TTransportException $tte)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>TTransportException: ' . $tte->getMessage() . '</p>');
+    }
+    catch (Exception $e)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Exception: ' . $e->getMessage() . '</p>');
+    }
+
+}
+
+/**
+ * Get the project with the given ID
+ * @param $projectId
+ * @return null
+ */
+public static function get_project($projectId)
+{
+    $airavataclient = Session::get("airavataClient");
+
+    try
+    {
+        return $airavataclient->getProject($projectId);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the project.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the project.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem getting the project.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException!<br><br>' . $ase->getMessage() . '</p>');
+    }
+
+}
+
+
+/**
+ * Create and configure a new Experiment
+ * @return Experiment
+ */
+public static function assemble_experiment()
+{
+    $utility = new Utilities();
+    $experimentInputs = array();
+    $app_config = Utilities::read_config();
+
+    $scheduling = new ComputationalResourceScheduling();
+    $scheduling->totalCPUCount = $_POST['cpu-count'];
+    $scheduling->nodeCount = $_POST['node-count'];
+    $scheduling->queueName = $_POST['queue-name'];
+    $scheduling->wallTimeLimit = $_POST['wall-time'];    
+    $scheduling->totalPhysicalMemory = $_POST['total-physical-memory'];
+    $scheduling->resourceHostId = $_POST['compute-resource'];
+
+    $userConfigData = new UserConfigurationData();
+    $userConfigData->computationalResourceScheduling = $scheduling;
+    if( isset( $_POST["userDN"]) )
+        $userConfigData->userDN = $_POST["userDN"];
+
+    $applicationInputs = Utilities::get_application_inputs($_POST['application']);
+    $experimentInputs = Utilities::process_inputs($applicationInputs, $experimentInputs);
+
+    if( Utilities::$experimentPath == null){
+        Utilities::create_experiment_folder_path();
+    }
+
+    $advHandling = new AdvancedOutputDataHandling();
+
+    $advHandling->outputDataDir = str_replace( base_path() . Constant::EXPERIMENT_DATA_ROOT, Utilities::$pathConstant , Utilities::$experimentPath);
+    $userConfigData->advanceOutputDataHandling = $advHandling;
+
+    //TODO: replace constructor with a call to airvata to get a prepopulated experiment template
+    $experiment = new Experiment();
+
+    // required
+    $experiment->projectID = $_POST['project'];
+    $experiment->userName = Session::get( 'username');
+    $experiment->name = $_POST['experiment-name'];
+
+    // optional
+    $experiment->description = $_POST['experiment-description'];
+    $experiment->applicationId = $_POST['application'];
+    $experiment->userConfigurationData = $userConfigData;
+    $experiment->experimentInputs = $experimentInputs;
+    if( isset( $_POST["enableEmailNotification"]))
+    {
+        $experiment->enableEmailNotification = intval( $_POST["enableEmailNotification"] );
+        $experiment->emailAddresses = array_unique( array_filter( $_POST["emailAddresses"], "trim") );
+    }
+
+    // adding default experiment outputs for now till prepoulated experiment template is not implemented.
+    $experiment->experimentOutputs = Utilities::get_application_outputs( $_POST["application"]);
+
+    if ($experimentInputs)
+    {
+        return $experiment;
+    }
+}
+
+/**
+ * @param $applicationInputs
+ * @param $experimentInputs
+ * @internal param $environmentPath
+ * @return array
+ */
+public static function process_inputs($applicationInputs, $experimentInputs)
+{
+    $utility = new Utilities();
+    $experimentAssemblySuccessful = true;
+    $newExperimentInputs = array();
+
+    //var_dump($_FILES);
+
+    if (sizeof($_FILES) > 0)
+    {
+        if (Utilities::file_upload_successful())
+        {
+            // construct unique path
+            Utilities::create_experiment_folder_path();
+        }
+        else
+        {
+            $experimentAssemblySuccessful = false;
+        }
+    }
+
+    //sending application inputs in the order defined by the admins.
+    $order = array();
+    foreach ($applicationInputs as $index => $input)
+    {
+        $order[$index] = $input->inputOrder;
+    }
+    array_multisort($order, SORT_ASC, $applicationInputs);
+    
+    foreach ($applicationInputs as $applicationInput)
+    {
+        $experimentInput = new InputDataObjectType();
+        $experimentInput = $applicationInput;
+        //$experimentInput->name = $applicationInput->name;
+        //$experimentInput->metaData = $applicationInput->metaData;
+
+
+        //$experimentInput->type = $applicationInput->type;
+        //$experimentInput->type = DataType::STRING;
+
+
+        if(($applicationInput->type == DataType::STRING) ||
+            ($applicationInput->type == DataType::INTEGER) ||
+            ($applicationInput->type == DataType::FLOAT))
+        {
+            if (isset($_POST[$applicationInput->name]) && (trim($_POST[$applicationInput->name]) != ''))
+            {
+                $experimentInput->value = $_POST[$applicationInput->name];
+                $experimentInput->type = $applicationInput->type;
+
+            }
+            else // use previous value
+            {
+                $index = -1;
+                for ($i = 0; $i < sizeof($experimentInputs); $i++)
+                {
+                    if ($experimentInputs[$i]->name == $applicationInput->name)
+                    {
+                        $index = $i;
+                    }
+                }
+
+                if ($index >= 0)
+                {
+                    $experimentInput->value = $experimentInputs[$index]->value;
+                    $experimentInput->type = $applicationInput->type;
+                }
+            }
+        }
+        elseif ($applicationInput->type == DataType::URI)
+        {
+            //var_dump($_FILES[$applicationInput->name]->name);
+            if ($_FILES[$applicationInput->name]['name'])
+            {
+                $file = $_FILES[$applicationInput->name];
+
+
+                //
+                // move file to experiment data directory
+                //
+                $filePath = Utilities::$experimentPath . $file['name'];
+
+                // check if file already exists
+                if (is_file($filePath))
+                {
+                    unlink($filePath);
+
+                    Utilities::print_warning_message('Uploaded file already exists! Overwriting...');
+                }
+
+                $moveFile = move_uploaded_file($file['tmp_name'], $filePath);
+
+                if ($moveFile)
+                {
+                    Utilities::print_success_message('Upload: ' . $file['name'] . '<br>' .
+                        'Type: ' . $file['type'] . '<br>' .
+                        'Size: ' . ($file['size']/1024) . ' kB');//<br>' .
+                        //'Stored in: ' . $experimentPath . $file['name']);
+                }
+                else
+                {
+                    Utilities::print_error_message('<p>Error moving uploaded file ' . $file['name'] . '!
+                    Please try again later or report a bug using the link in the Help menu.</p>');
+                    $experimentAssemblySuccessful = false;
+                }
+
+                $experimentInput->value = str_replace(base_path() . Constant::EXPERIMENT_DATA_ROOT, Utilities::$pathConstant , $filePath);
+                $experimentInput->type = $applicationInput->type;
+                
+            }
+            else
+            {
+                $index = -1;
+                for ($i = 0; $i < sizeof($experimentInputs); $i++)
+                {
+                    if ($experimentInputs[$i]->name == $applicationInput->name)
+                    {
+                        $index = $i;
+                    }
+                }
+
+                if ($index >= 0)
+                {
+                    $experimentInput->value = $experimentInputs[$index]->value;
+                    $experimentInput->type = $applicationInput->type;
+                }
+            }
+
+        }
+        else
+        {
+            Utilities::print_error_message('I cannot accept this input type yet!');
+        }
+
+
+
+
+
+
+
+        //$experimentInputs[] = $experimentInput;
+        /*
+        $index = -1;
+        for ($i = 0; $i < sizeof($experimentInputs); $i++)
+        {
+            if ($experimentInputs[$i]->key == $experimentInput->key)
+            {
+                $index = $i;
+            }
+        }
+
+        if ($index >= 0)
+        {
+            unset($experimentInputs[$index]);
+        }
+        */
+        //$experimentInputs[] = $experimentInput;
+
+
+
+
+
+        $newExperimentInputs[] = $experimentInput;
+
+
+    }
+
+    if ($experimentAssemblySuccessful)
+    {
+        return $newExperimentInputs;
+    }
+    else
+    {
+        return false;
+    }
+
+}
+
+
+public static function create_experiment_folder_path()
+{
+    do
+    {
+        Utilities::$experimentPath = base_path() . Constant::EXPERIMENT_DATA_ROOT . str_replace(' ', '', Session::get('username') ) . md5(rand() * time()) . '/';
+    }
+    while (is_dir( Utilities::$experimentPath)); // if dir already exists, try again
+    // create upload directory
+    if (!mkdir( Utilities::$experimentPath))
+    {
+        Utilities::print_error_message('<p>Error creating upload directory!
+            Please try again later or report a bug using the link in the Help menu.</p>');
+        $experimentAssemblySuccessful = false;
+    }
+}
+
+/**
+ * Check the uploaded files for errors
+ */
+public static function file_upload_successful()
+{
+    $uploadSuccessful = true;
+
+    foreach ($_FILES as $file)
+    {
+        //var_dump($file);
+        if($file['name'])
+        {
+            if ($file['error'] > 0)
+            {
+                $uploadSuccessful = false;
+                Utilities::print_error_message('<p>Error uploading file ' . $file['name'] . ' !
+                    Please try again later or report a bug using the link in the Help menu.');
+            }/*
+            elseif ($file['type'] != 'text/plain')
+            {
+                $uploadSuccessful = false;
+                Utilities::print_error_message('Uploaded file ' . $file['name'] . ' type not supported!');
+            }
+            elseif (($file['size'] / 1024) > 20)
+            {
+                $uploadSuccessful = false;
+                Utilities::print_error_message('Uploaded file ' . $file['name'] . ' must be smaller than 10 MB!');
+            }*/
+        }
+
+
+    }
+
+    return $uploadSuccessful;
+}
+
+
+/**
+ * Update the experiment with the given ID
+ * @param $expId
+ * @param $updatedExperiment
+ */
+public static function update_experiment($expId, $updatedExperiment)
+{
+    $airavataclient = Session::get("airavataClient");
+
+    try
+    {
+        $airavataclient->updateExperiment($expId, $updatedExperiment);
+
+        /*
+        Utilities::print_success_message("<p>Experiment updated!</p>" .
+            '<p>Click
+            <a href="' . URL::to('/') . '/experiment/summary?expId=' . $expId . '">here</a> to visit the experiment summary page.</p>');
+        */
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem updating the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (ExperimentNotFoundException $enf)
+    {
+        Utilities::print_error_message('<p>There was a problem updating the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem updating the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem updating the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
+    }
+
+}
+
+
+/**
+ * Clone the experiment with the given ID
+ * @param $expId
+ */
+public static function clone_experiment($expId)
+{
+    $airavataclient = Session::get("airavataClient");
+
+    try
+    {
+        //create new experiment to receive the clone
+        $experiment = $airavataclient->getExperiment($expId);
+
+        $cloneId = $airavataclient->cloneExperiment($expId, 'Clone of ' . $experiment->name);
+
+        Utilities::print_success_message("<p>Experiment cloned!</p>" .
+            '<p>You will be redirected to the edit page shortly, or you can
+            <a href="edit_experiment.php?expId=' . $cloneId . '">go directly</a> to the edit experiment page.</p>');
+        //redirect('edit_experiment.php?expId=' . $cloneId);
+        return $cloneId;
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem cloning the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (ExperimentNotFoundException $enf)
+    {
+        Utilities::print_error_message('<p>There was a problem cloning the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem cloning the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem cloning the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
+    }
+    catch (TTransportException $tte)
+    {
+        Utilities::print_error_message('<p>There was a problem cloning the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>TTransportException: ' . $tte->getMessage() . '</p>');
+    }
+}
+
+/**
+ * Cancel the experiment with the given ID
+ * @param $expId
+ */
+public static function cancel_experiment($expId)
+{
+    $airavataclient = Session::get("airavataClient");
+    $app_config = Utilities::read_config();
+
+
+
+    try
+    {
+        $airavataclient->terminateExperiment($expId, $app_config["credential-store-token"]);
+
+        Utilities::print_success_message("Experiment canceled!");
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('<p>There was a problem canceling the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
+    }
+    catch (ExperimentNotFoundException $enf)
+    {
+        Utilities::print_error_message('<p>There was a problem canceling the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('<p>There was a problem canceling the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('<p>There was a problem canceling the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
+    }
+    catch (TTransportException $tte)
+    {
+        Utilities::print_error_message('<p>There was a problem canceling the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>TTransportException: ' . $tte->getMessage() . '</p>');
+    }
+    catch (Exception $e)
+    {
+        Utilities::print_error_message('<p>There was a problem canceling the experiment.
+            Please try again later or submit a bug report using the link in the Help menu.</p>' .
+            '<p>Exception: ' . $e->getMessage() . '</p>');
+    }
+}
+
+
+/**
+ * Create a select input and populate it with project options from the database
+ */
+public static function create_project_select($projectId = null, $editable = true)
+{
+    $editable? $disabled = '' : $disabled = 'disabled';
+    $userProjects = Utilities::get_all_user_projects( Session::get("gateway_id"), Session::get('username') );
+
+    echo '<select class="form-control" name="project" id="project" required ' . $disabled . '>';
+    if (sizeof($userProjects) > 0)
+    {
+        foreach ($userProjects as $project)
+        {
+            if ($project->projectID == $projectId)
+            {
+                $selected = 'selected';
+            }
+            else
+            {
+                $selected = '';
+            }
+
+            echo '<option value="' . $project->projectID . '" ' . $selected . '>' . $project->name . '</option>';
+        }
+    }
+    echo '</select>';
+    if( sizeof($userProjects) == 0 )
+    {
+        Utilities::print_warning_message('<p>You must create a project before you can create an experiment.
+                Click <a href="' . URL::to('/') . '/project/create">here</a> to create a project.</p>');
+    }
+}
+
+
+/**
+ * Create a select input and populate it with applications options
+ * @param null $id
+ * @param bool $editable
+ */
+public static function create_application_select($id = null, $editable = true)
+{
+    $disabled = $editable? '' : 'disabled';
+
+    $applicationIds = Utilities::get_all_applications();
+
+    echo '<select class="form-control" name="application" id="application" required ' . $disabled . '>';
+
+    if( count( $applicationIds))
+    {
+        foreach ( (array) $applicationIds as $applicationId => $applicationName)
+        {
+            $selected = ($applicationId == $id) ? 'selected' : '';
+    
+            echo '<option value="' . $applicationId . '" ' . $selected . '>' . $applicationName . '</option>';
+        }
+    }
+
+    echo '</select>';
+}
+
+
+/**
+ * Create a select input and populate it with compute resources
+ * available for the given application ID
+ * @param $applicationId
+ * @param $resourceHostId
+ */
+public static function create_compute_resources_select($applicationId, $resourceHostId)
+{
+    $computeResources = Utilities::get_available_app_interface_compute_resources($applicationId);
+    
+    if( count( $computeResources) > 0)
+    {
+    	echo '<select class="form-control" name="compute-resource" id="compute-resource">';
+	    foreach ($computeResources as $id => $name)
+	    {
+	        $selected = ($resourceHostId == $id)? ' selected' : '';
+
+	        echo '<option value="' . $id . '"' . $selected . '>' .
+	                $name . '</option>';
+
+	    }
+
+    	echo '</select>';
+    }
+    else
+    {
+    	echo "<h4>No Compute Resources exist at the moment.";
+    }
+
+}
+
+
+/**
+ * Create form inputs to accept the inputs to the given application
+ * @param $id
+ * @param $isRequired
+ * @internal param $required
+ */
+public static function create_inputs($id, $isRequired)
+{
+    $inputs = Utilities::get_application_inputs($id);
+
+    $required = $isRequired? ' required' : '';
+
+    //var_dump( $inputs);  echo "<br/>after sort<br/>";
+    //arranging inputs in ascending order.
+    foreach ($inputs as $index => $input)
+    {
+        $order[$index] = $input->inputOrder;
+    }
+    array_multisort($order, SORT_ASC, $inputs);
+    //var_dump( $inputs); exit;
+    foreach ($inputs as $input)
+    {
+        switch ($input->type)
+        {
+            case DataType::STRING:
+                echo '<div class="form-group">
+                    <label for="experiment-input">' . $input->name . '</label>
+                    <input value="' . $input->value . '" type="text" class="form-control" name="' . $input->name .
+                    '" id="' . $input->name .
+                    '" placeholder="' . $input->userFriendlyDescription . '"' . $required . '>
+                    </div>';
+                break;
+            case DataType::INTEGER:
+            echo '<div class="form-group">
+                    <label for="experiment-input">' . $input->name . '</label>
+                    <input value="' . $input->value . '" type="number" class="form-control" name="' . $input->name .
+                    '" id="' . $input->name .
+                    '" placeholder="' . $input->userFriendlyDescription . '"' . $required . '>
+                    </div>';
+                break;
+            case DataType::FLOAT:
+                echo '<div class="form-group">
+                    <label for="experiment-input">' . $input->name . '</label>
+                    <input value="' . $input->value . '" type="number" step="0.01" class="form-control" name="' . $input->name .
+                    '" id="' . $input->name .
+                    '" placeholder="' . $input->userFriendlyDescription . '"' . $required . '>
+                    </div>';
+                break;
+            case DataType::URI:
+                echo '<div class="form-group">
+                    <label for="experiment-input">' . $input->name . '</label>
+                    <input class="file-input" type="file" name="' . $input->name .
+                    '" id="' . $input->name . '" ' . $required . '>
+                    <p class="help-block">' . $input->userFriendlyDescription . '</p>
+                    </div>';
+                break;
+            default:
+                Utilities::print_error_message('Input data type not supported!
+                    Please file a bug report using the link in the Help menu.');
+                break;
+        }
+    }
+}
+
+
+/**
+ * Create navigation bar
+ * Used for all pages
+ */
+public static function create_nav_bar()
+{
+	$menus = array();
+/*
+	if( Session::has('loggedin'))
+	{
+	    $menus = array
+	    (
+	        'Project' => array
+	        (
+	            array('label' => 'Create Project', 'url' => URL::to('/') . '/project/create'),
+	            array('label' => 'Search Projects', 'url' => URL::to('/') . '/project/search')
+	        ),
+	        'Experiment' => array
+	        (
+	            array('label' => 'Create Experiment', 'url' => URL::to('/') . '/experiment/create'),
+	            array('label' => 'Search Experiments', 'url' => URL::to('/') . '/experiment/search')
+	        ),
+	        'Compute Resource' => array
+	        (
+	            array('label' => 'Register', 'url' => URL::to('/') . '/cr/create'),
+	            array('label' => 'Browse', 'url' => URL::to('/') . '/cr/browse')
+	        ),
+	        'App Catalog' => array
+	        (
+	            array('label' => 'Module', 'url' => URL::to('/') . '/app/module'),
+	            array('label' => 'Interface', 'url' => URL::to('/') . '/app/interface'),
+	            array('label' => 'Deployment', 'url' => URL::to('/') . '/app/deployment')
+	        ),
+	        'Help' => array
+	        (
+	            array('label' => 'Report Issue', 'url' => '#'),
+	            array('label' => 'Request Feature', 'url' => '#')
+	        )
+	    );
+	}
+*/
+	if( Session::has('loggedin'))
+	{
+	    $menus = array
+	    (
+	        'Project' => array
+	        (
+	            array('label' => 'Create', 'url' => URL::to('/') . '/project/create', "nav-active" => "project"),
+	            array('label' => 'Search', 'url' => URL::to('/') . '/project/search', "nav-active"=> "project")
+	        ),
+	        'Experiment' => array
+	        (
+	            array('label' => 'Create', 'url' => URL::to('/') . '/experiment/create', "nav-active" => "experiment"),
+	            array('label' => 'Search', 'url' => URL::to('/') . '/experiment/search', "nav-active" => "experiment")
+	        )
+	    );
+
+	    if( Session::has("admin"))
+	    {
+	    	$menus['Compute Resource'] = array
+	        (
+	            array('label' => 'Register', 'url' => URL::to('/') . '/cr/create', "nav-active" => "compute-resource"),
+	            array('label' => 'Browse', 'url' => URL::to('/') . '/cr/browse', "nav-active" => "compute-resource")
+	        );
+	        $menus['App Catalog'] = array
+	        (
+	            array('label' => 'Module', 'url' => URL::to('/') . '/app/module', "nav-active" => "app-catalog"),
+	            array('label' => 'Interface', 'url' => URL::to('/') . '/app/interface', "nav-active" => "app-catalog"),
+	            array('label' => 'Deployment', 'url' => URL::to('/') . '/app/deployment', "nav-active" => "app-catalog")
+	        );
+            /*
+            $menus['Gateway Profile'] = array
+            (
+
+                array('label' => 'Register', 'url' => URL::to('/') . '/gp/create', "nav-active" => "gateway-profile"),
+                array('label' => 'Browse', 'url' => URL::to('/') . '/gp/browse', "nav-active" => "gateway-profile")
+            );
+            */
+               
+	    }
+        
+        $menus['Help'] = array
+        (
+            array('label' => 'Report Issue', 'url' => '#', "nav-active", ""),
+            array('label' => 'Request Feature', 'url' => '#', "nav-active", "")
+        );
+	}
+
+    $selfExplode = explode('/', $_SERVER['PHP_SELF']);
+
+
+
+    // nav bar and left-aligned content
+
+    echo '<nav class="navbar navbar-inverse navbar-static-top" role="navigation">
+            <div class="container-fluid">
+                <!-- Brand and toggle get grouped for better mobile display -->
+                <div class="navbar-header">
+                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+                       <span class="sr-only">Toggle navigation</span>
+                       <span class="icon-bar"></span>
+                       <span class="icon-bar"></span>
+                       <span class="icon-bar"></span>
+                    </button>
+                    <a class="navbar-brand" href="' . URL::to('home') . '" title="PHP Gateway with Airavata">PGA</a>
+                </div>
+
+                <!-- Collect the nav links, forms, and other content for toggling -->
+                <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
+                    <ul class="nav navbar-nav">';
+
+
+    foreach ($menus as $label => $options)
+    {
+        Session::has('loggedin') ? $disabled = '' : $disabled = ' class="disabled"';
+
+        $active = "";
+        if( Session::has("nav-active") && isset( $options[0]['nav-active'] ) )
+        {
+	        if( $options[0]['nav-active'] == Session::get("nav-active"))
+	        	$active = " active ";
+        }
+        echo '<li class="dropdown ' . $active . '">
+                <a href="#" class="dropdown-toggle" data-toggle="dropdown">' . $label . '<span class="caret"></span></a>
+                <ul class="dropdown-menu" role="menu">';
+
+        if( Session::has('loggedin'))
+        {
+	        foreach ($options as $option)
+	        {
+	            $id = strtolower(str_replace(' ', '-', $option['label']));
+
+	            echo '<li' . $disabled . '><a href="' . $option['url'] . '" id=' . $id . '>' . $option['label'] . '</a></li>';
+	        }
+	    }
+
+        echo '</ul>
+        </li>';
+    }
+
+
+    echo '</ul>
+
+        <ul class="nav navbar-nav navbar-right">';
+
+    // right-aligned content
+
+    if ( Session::has('loggedin') )
+    {
+        $active = "";
+        if( Session::has("nav-active") )
+        {
+            if( "user-console" == Session::get("nav-active"))
+                $active = " active ";
+        }
+        if( Session::has("admin"))
+            echo '<li><a href="' . URL::to("/") . '/admin/dashboard"><span class="glyphicon glyphicon-user"></span> Dashboard</a></li>';
+        else
+            echo '<li><a href="' . URL::to("/") . '/user/profile"><span class="glyphicon glyphicon-user"></span> Profile</a></li>';
+
+        echo '<li class="dropdown ' . $active . '">
+
+                <a href="#" class="dropdown-toggle" data-toggle="dropdown">' . Session::get("username") . ' <span class="caret"></span></a>';
+        echo '<ul class="dropdown-menu" role="menu">';
+
+        echo '<li><a href="' . URL::to('/') . '/logout"><span class="glyphicon glyphicon-log-out"></span> Log out</a></li>';
+        echo    '</ul></li></ul>';
+    }
+    else
+    {
+        echo '<li><a href="' . URL::to('/') . '/create"><span class="glyphicon glyphicon-user"></span> Create account</a></li>';
+        echo '<li><a href="' . URL::to('/') . '/login"><span class="glyphicon glyphicon-log-in"></span> Log in</a></li>';
+        echo '</ul>';
+
+    }
+
+    echo '</div><!-- /.navbar-collapse -->
+    </div><!-- /.container-fluid -->
+    </nav>';
+}
+
+/**
+* Add attributes to the HTTP header.
+*/
+public static function create_http_header()
+{
+   header( 'Cache-Control: no-store, no-cache, must-revalidate' );
+   header( 'Cache-Control: post-check=0, pre-check=0', false );
+   header( 'Pragma: no-cache' );
+}
+
+/**
+ * Open the XML file containing the community token
+ * @param $tokenFilePath
+ * @throws Exception
+ */
+public static function open_tokens_file($tokenFilePath)
+{
+    if (file_exists( $tokenFilePath ))
+    {
+        $tokenFile = simplexml_load_file( $tokenFilePath );
+    }
+    else
+    {
+        throw new Exception('Error: Cannot connect to tokens database!');
+    }
+
+
+    if (!$tokenFile)
+    {
+        throw new Exception('Error: Cannot open tokens database!');
+    }
+}
+
+
+/**
+ * Write the new token to the XML file
+ * @param $tokenId
+ */
+public static function write_new_token($tokenId)
+{    // write new tokenId to tokens file
+    $tokenFile->tokenId = $tokenId;
+
+    //Format XML to save indented tree rather than one line
+    $dom = new DOMDocument('1.0');
+    $dom->preserveWhiteSpace = false;
+    $dom->formatOutput = true;
+    $dom->loadXML( $tokenFile->asXML());
+    $dom->save( $tokenFilePath );
+}
+
+
+//moved from create project view.
+
+public static function create_project()
+{
+    
+    $airavataclient = Session::get("airavataClient");
+    
+    $project = new Project();
+    $project->owner = Session::get('username');
+    $project->name = $_POST['project-name'];
+    $project->description = $_POST['project-description'];
+
+
+    $projectId = null;
+
+    try
+    {
+        $projectId = $airavataclient->createProject( Session::get("gateway_id"), $project);
+
+        if ($projectId)
+        {
+            Utilities::print_success_message("<p>Project {$_POST['project-name']} created!</p>" .
+                '<p>You will be redirected to the summary page shortly, or you can
+                <a href="project/summary?projId=' . $projectId . '">go directly</a> to the project summary page.</p>');
+        }
+        else
+        {
+            Utilities::print_error_message("Error creating project {$_POST['project-name']}!");
+        }
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('AiravataSystemException!<br><br>' . $ase->getMessage());
+    }
+
+    return $projectId;
+}
+
+/**
+ * Get experiments in project
+ * @param $projectId
+ * @return array|null
+ */
+public static function get_experiments_in_project($projectId)
+{
+    $airavataclient = Session::get("airavataClient");
+
+    $experiments = array();
+
+    try
+    {
+        $experiments = $airavataclient->getAllExperimentsInProject($projectId);
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('AiravataSystemException!<br><br>' . $ase->getMessage());
+    }
+    catch (TTransportException $tte)
+    {
+        Utilities::print_error_message('TTransportException!<br><br>' . $tte->getMessage());
+    }
+
+    return $experiments;
+}
+
+public static function update_project($projectId, $projectDetails)
+{
+    $airavataclient = Session::get("airavataClient");
+
+    $updatedProject = new Project();
+    $updatedProject->owner = $projectDetails["owner"];
+    $updatedProject->name = $projectDetails["name"];
+    $updatedProject->description = $projectDetails["description"];
+
+    try
+    {
+        $airavataclient->updateProject($projectId, $updatedProject);
+
+        //Utilities::print_success_message('Project updated! Click <a href="project_summary.php?projId=' . $projectId . '">here</a> to view the project summary.');
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
+    }
+    catch (ProjectNotFoundException $pnfe)
+    {
+        Utilities::print_error_message('ProjectNotFoundException!<br><br>' . $pnfe->getMessage());
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('AiravataSystemException!<br><br>' . $ase->getMessage());
+    }
+}
+
+
+/**
+ * Create a new experiment from the values submitted in the form
+ * @return null
+ */
+public static function create_experiment()
+{
+    $airavataclient = Session::get("airavataClient");
+
+    $experiment = Utilities::assemble_experiment();
+    $expId = null;
+
+    try
+    {
+        if($experiment)
+        {
+            $expId = $airavataclient->createExperiment( Session::get("gateway_id"), $experiment);
+        }
+
+        if ($expId)
+        {
+            /*
+            Utilities::print_success_message("Experiment {$_POST['experiment-name']} created!" .
+                ' <a href="experiment_summary.php?expId=' . $expId . '">Go to experiment summary page</a>');
+            */
+        }
+        else
+        {
+            Utilities::print_error_message("Error creating experiment {$_POST['experiment-name']}!");
+        }
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
+    }
+    catch (AiravataSystemException $ase)
+    {
+        Utilities::print_error_message('AiravataSystemException!<br><br>' . $ase->getMessage());
+    }
+
+    return $expId;
+}
+
+/*
+ * Required in Experiment Sumamry page.
+ *
+*/
+
+public static function list_output_files($experiment, $expStatus)
+{   
+
+    $expStatusVal = array_search($expStatus, ExperimentState::$__names);
+
+    if($expStatusVal == ExperimentState::COMPLETED )
+    {
+        $utility = new Utilities();
+        $experimentOutputs = $experiment->experimentOutputs;
+
+        foreach ((array)$experimentOutputs as $output)
+        {   
+            if ($output->type == DataType::URI || $output->type == DataType::STDOUT || $output->type == DataType::STDERR )
+            {
+                $explode = explode('/', $output->value);
+                //echo '<p>' . $output->key .  ': <a href="' . $output->value . '">' . $output->value . '</a></p>';
+                $outputPath = str_replace(Utilities::$experimentDataPathAbsolute, Constant::EXPERIMENT_DATA_ROOT, $output->value);
+                $outputPathArray = explode("/", $outputPath);
+
+                echo '<p>' . $output->name  . ' : ' . '<a target="_blank"
+                            href="' . URL::to("/") . "/.." . str_replace(Utilities::$experimentDataPathAbsolute, Constant::EXPERIMENT_DATA_ROOT, $output->value) . '">' . 
+                        $outputPathArray[ sizeof( $outputPathArray) - 1] . ' <span class="glyphicon glyphicon-new-window"></span></a></p>';
+            }
+            elseif ($output->type == DataType::STRING)
+            {
+                echo '<p>' . $output->value . '</p>';
+            }
+        }
+    }
+    else
+        echo "Experiment hasn't completed. Experiment Status is : " . $expStatus;
+}
+
+public static function get_experiment_values( $experiment, $project, $forSearch = false)
+{
+    $airavataclient = Session::get("airavataClient");
+    //var_dump( $experiment); exit;
+    $expVal = array();
+    $expVal["experimentStatusString"] = "";
+    $expVal["experimentTimeOfStateChange"] = "";
+    $expVal["experimentCreationTime"] = "";
+
+    if( $experiment->experimentStatus != null)
+    {
+        $experimentStatus = $experiment->experimentStatus;
+        $experimentState = $experimentStatus->experimentState;
+        $experimentStatusString = ExperimentState::$__names[$experimentState];
+        $expVal["experimentStatusString"] = $experimentStatusString;
+        $expVal["experimentTimeOfStateChange"] = date('Y-m-d H:i:s', $experimentStatus->timeOfStateChange/1000); // divide by 1000 since timeOfStateChange is in ms
+        $expVal["experimentCreationTime"] = date('Y-m-d H:i:s', $experiment->creationTime/1000); // divide by 1000 since creationTime is in ms
+    }
+    $jobStatus = $airavataclient->getJobStatuses($experiment->experimentID);
+
+    if ($jobStatus)
+    {
+        $jobName = array_keys($jobStatus);
+        $jobState = JobState::$__names[$jobStatus[$jobName[0]]->jobState];
+    }
+    else
+    {
+        $jobState = null;
+    }
+
+    $expVal["jobState"] = $jobState;
+    
+    if(! $forSearch)
+    {
+        $userConfigData = $experiment->userConfigurationData;
+        $scheduling = $userConfigData->computationalResourceScheduling;
+        $expVal['scheduling'] = $scheduling;
+        $expVal["computeResource"] = Utilities::get_compute_resource($scheduling->resourceHostId);
+    }
+    $expVal["applicationInterface"] = Utilities::get_application_interface($experiment->applicationId);
+
+
+    switch ($experimentStatusString)
+    {
+        case 'CREATED':
+        case 'VALIDATED':
+        case 'SCHEDULED':
+        case 'CANCELED':
+        case 'FAILED':
+            $expVal["editable"] = true;
+            break;
+        default:
+            $expVal["editable"] = false;
+            break;
+    }
+
+    switch ($experimentStatusString)
+    {
+        case 'CREATED':
+        case 'VALIDATED':
+        case 'SCHEDULED':
+        case 'LAUNCHED':
+        case 'EXECUTING':
+            $expVal["cancelable"] = true;
+            break;
+        default:
+            $expVal["cancelable"] = false;
+            break;
+    }
+
+    return $expVal;
+
+}
+
+public static function get_projsearch_results( $searchKey, $searchValue)
+{
+    $airavataclient = Session::get("airavataClient");;
+
+    $projects = array();
+
+    try
+    {
+        switch ( $searchKey)
+        {
+            case 'project-name':
+                $projects = $airavataclient->searchProjectsByProjectName( Session::get("gateway_id"), Session::get("username"), $searchValue);
+                break;
+            case 'project-description':
+                $projects = $airavataclient->searchProjectsByProjectDesc( Session::get("gateway_id"), Session::get("username"), $searchValue);
+                break;
+        }
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
+    }
+    catch (AiravataSystemException $ase)
+    {
+        if ($ase->airavataErrorType == 2) // 2 = INTERNAL_ERROR
+        {
+            Utilities::print_info_message('<p>You have not created any projects yet, so no results will be returned!</p>
+                                <p>Click <a href="create_project.php">here</a> to create a new project.</p>');
+        }
+        else
+        {
+            Utilities::print_error_message('There was a problem with Airavata. Please try again later, or report a bug using the link in the Help menu.');
+            //print_error_message('AiravataSystemException!<br><br>' . $ase->airavataErrorType . ': ' . $ase->getMessage());
+        }
+    }
+    catch (TTransportException $tte)
+    {
+        Utilities::print_error_message('TTransportException!<br><br>' . $tte->getMessage());
+    }
+
+    return $projects;
+}
+
+
+/**
+ * Create options for the search key select input
+ * @param $values
+ * @param $labels
+ * @param $disabled
+ */
+public static function create_options($values, $labels, $disabled)
+{
+    for ($i = 0; $i < sizeof($values); $i++)
+    {
+        $selected = '';
+
+        // if option was previously selected, mark it as selected
+        if (isset($_POST['search-key']))
+        {
+            if ($values[$i] == $_POST['search-key'])
+            {
+                $selected = 'selected';
+            }
+        }
+
+        echo '<option value="' . $values[$i] . '" ' . $disabled[$i] . ' ' . $selected . '>' . $labels[$i] . '</option>';
+    }
+}
+
+/**
+ * Get results of the user's search of experiments
+ * @return array|null
+ */
+public static function get_expsearch_results( $inputs)
+{
+    $airavataclient = Session::get("airavataClient");
+    $experiments = array();
+
+    try
+    {
+        switch ( $inputs["search-key"])
+        {
+            case 'experiment-name':
+                $experiments = $airavataclient->searchExperimentsByName(Session::get('gateway_id'), Session::get('username'), $inputs["search-value"]);
+                break;
+            case 'experiment-description':
+                $experiments = $airavataclient->searchExperimentsByDesc(Session::get('gateway_id'), Session::get('username'), $inputs["search-value"]);
+                break;
+            case 'application':
+                $experiments = $airavataclient->searchExperimentsByApplication(Session::get('gateway_id'), Session::get('username'), $inputs["search-value"]);
+                break;
+            case 'creation-time':
+                $experiments = $airavataclient->searchExperimentsByCreationTime(Session::get('gateway_id'), Session::get('username'), strtotime( $inputs["from-date"])*1000, strtotime( $inputs["to-date"])*1000 );
+                break;
+            case '':
+        }
+    }
+    catch (InvalidRequestException $ire)
+    {
+        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
+    }
+    catch (AiravataClientException $ace)
+    {
+        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
+    }
+    catch (AiravataSystemException $ase)
+    {
+        if ($ase->airavataErrorType == 2) // 2 = INTERNAL_ERROR
+        {
+            Utilities::print_info_message('<p>You have not created any experiments yet, so no results will be returned!</p>
+                                <p>Click <a href="create_experiment.php">here</a> to create an experiment, or
+                                <a href="create_project.php">here</a> to create a new project.</p>');
+        }
+        else
+        {
+            Utilities::print_error_message('There was a problem with Airavata. Please try again later or report a bug using the link in the Help menu.');
+            //print_error_message('AiravataSystemException!<br><br>' . $ase->airavataErrorType . ': ' . $ase->getMessage());
+        }
+    }
+    catch (TTransportException $tte)
+    {
+        Utilities::print_error_message('TTransportException!<br><br>' . $tte->getMessage());
+    }
+
+    //get values of all experiments
+    $expContainer = array();
+    $expNum = 0;
+    foreach( $experiments as $experiment)
+    {
+        $expValue = Utilities::get_experiment_values( $experiment, Utilities::get_project($experiment->projectID), true );
+        $expContainer[$expNum]['experiment'] = $experiment;
+        if( $expValue["experimentStatusString"] == "FAILED")
+            $expValue["editable"] = false;
+        $expContainer[$expNum]['expValue'] = $expValue;
+        $expNum++;
+    }
+
+    return $expContainer;
+}
+
+public static function getExpStates(){
+    return ExperimentState::$__names;
+}
+
+
+public static function apply_changes_to_experiment($experiment, $input)
+{
+    $experiment->name = $input['experiment-name'];
+    $experiment->description = rtrim($input['experiment-description']);
+    $experiment->projectID = $input['project'];
+    //$experiment->applicationId = $_POST['application'];
+
+    $userConfigDataUpdated = $experiment->userConfigurationData;
+    $schedulingUpdated = $userConfigDataUpdated->computationalResourceScheduling;
+
+    $schedulingUpdated->resourceHostId = $input['compute-resource'];
+    $schedulingUpdated->nodeCount = $input['node-count'];
+    $schedulingUpdated->queueName = $_POST['queue-name'];
+    $schedulingUpdated->totalCPUCount = $input['cpu-count'];
+    //$schedulingUpdated->numberOfThreads = $input['threads'];
+    $schedulingUpdated->wallTimeLimit = $input['wall-time'];
+    //$schedulingUpdated->totalPhysicalMemory = $input['memory'];
+
+    /*
+    switch ($_POST['compute-resource'])
+    {
+        case 'trestles.sdsc.edu':
+            $schedulingUpdated->ComputationalProjectAccount = 'sds128';
+            break;
+        case 'stampede.tacc.xsede.org':
+        case 'lonestar.tacc.utexas.edu':
+            $schedulingUpdated->ComputationalProjectAccount = 'TG-STA110014S';
+            break;
+        default:
+            $schedulingUpdated->ComputationalProjectAccount = 'admin';
+    }
+    */
+
+    $userConfigDataUpdated->computationalResourceScheduling = $schedulingUpdated;
+    if( isset( $input["userDN"]) )
+        $userConfigDataUpdated->userDN = $input["userDN"];
+
+    $experiment->userConfigurationData = $userConfigDataUpdated;
+
+    $applicationInputs = Utilities::get_application_inputs($experiment->applicationId);
+
+    $experimentInputs = $experiment->experimentInputs; // get current inputs
+    //var_dump($experimentInputs);
+    $experimentInputs = Utilities::process_inputs($applicationInputs, $experimentInputs); // get new inputs
+    //var_dump($experimentInputs);
+
+    if ($experimentInputs)
+    {
+        $experiment->experimentInputs = $experimentInputs;
+        //var_dump($experiment);
+        return $experiment;
+    }
+}
+
+public static function read_config( $fileName = null){
+    $wsis_config = null;
+
+    if( $fileName == null)
+        $fileName = "app_config.ini";
+    try {
+        if (file_exists( app_path() . "/config/" . $fileName ) ) {
+
+            try
+            {
+                $wsis_config = parse_ini_file( app_path() . "/config/" . $fileName );
+            }
+
+            catch( \Exception $e)
+            {
+                print_r( $e); exit;
+            }
+        } 
+        else 
+        {
+            throw new Exception("Error: Cannot open file!");
+        }
+
+        if (!$wsis_config) 
+        {
+            throw new Exception('Error: Unable to read the file!');
+        }
+    }catch (Exception $e) {
+        throw new Exception('Unable to instantiate the client. Try editing the file.', 0, NULL);
+    }
+    return $wsis_config;
+
+}
+
+public static function get_job_details( $experimentId){
+    $airavataclient = Session::get("airavataClient");
+    return $airavataclient->getJobDetails( $experimentId);
+}
+
+public static function get_transfer_details( $experimentId){
+    $airavataclient = Session::get("airavataClient");
+    return $airavataclient->getDataTransferDetails( $experimentId);
+}
+
+}
+
+?>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/wsis_config.ini
----------------------------------------------------------------------
diff --git a/app/libraries/wsis_config.ini b/app/libraries/wsis_config.ini
new file mode 100755
index 0000000..6afe638
--- /dev/null
+++ b/app/libraries/wsis_config.ini
@@ -0,0 +1,27 @@
+;Tenant admin's username
+;admin-username = "test@testphprg.scigap.org"
+;Super Tenant Admin's username
+admin-username = "scigap_admin"
+
+;Tenant admin's password
+;admin-password = "testadmin@scigap.org"
+;Super Tenant Admin's username
+admin-password = "sci9067@min"
+
+;Identity server domain
+server = "idp.scigap.org"
+
+;Identity server web services endpoint
+service-url = "https://idp.scigap.org:7443/services/"
+
+;Gateway Domain Name 
+gateway-id = "airavata.org"
+
+;Path the to server certificate file
+cafile-path = "/resources/security/idp_scigap_org.pem"
+
+;Enable HTTPS server verification
+verify-peer = true
+
+;Allow self signed server certificates
+allow-self-signed = false
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/wsis_utilities.php
----------------------------------------------------------------------
diff --git a/app/libraries/wsis_utilities.php b/app/libraries/wsis_utilities.php
new file mode 100755
index 0000000..fbf90f8
--- /dev/null
+++ b/app/libraries/wsis_utilities.php
@@ -0,0 +1,364 @@
+<?php
+
+require_once 'id_utilities.php';
+require_once 'WSISClient.php';
+
+//$GLOBALS['WSIS_ROOT'] = './lib/WSIS/';
+//require_once $GLOBALS['WSIS_ROOT'] . 'WSISClient.php';
+
+/**
+ * Utilities for ID management with a WSO2 IS 4.6.0
+ */
+
+class WSISUtilities implements IdUtilities{
+    /**
+     * wso2 IS client
+     * 
+     * @var WSISClient
+     * @access private
+     */
+    private $wsis_client;
+
+    /**
+     * Connect to the identity store.
+     * @return mixed|void
+     */
+    public function connect() { 
+   
+        $wsis_config = Utilities::read_config();    
+        if(substr($wsis_config['service-url'], -1) !== "/"){
+            $wsis_config['service-url'] = $wsis_config['service-url'] . "/";
+        }
+        
+        if(!substr($wsis_config['cafile-path'], 0) !== "/"){
+            $wsis_config['cafile-path'] = "/" . $wsis_config['cafile-path'];
+        }
+        $wsis_config['cafile-path'] = app_path() . $wsis_config['cafile-path'];            
+        
+        /*
+        if( Session::has("username"))
+        {
+            $username = Session::get("username");
+            $password = Session::get("password");
+        }
+        else
+        {
+            $username = $_POST["username"];
+            $password = $_POST["password"];
+        }
+        */
+        $username = $wsis_config['admin-username'];
+        $password = $wsis_config['admin-password'];
+        
+        $this->wsis_client = new WSISClient(
+                $username,
+                $password,
+                $wsis_config['server'],
+                $wsis_config['service-url'],
+                $wsis_config['cafile-path'],
+                $wsis_config['verify-peer'],
+                $wsis_config['allow-self-signed']
+        );    
+    }
+
+    /**
+     * Return true if the given username exists in the identity server.
+     * @param $username
+     * @return bool
+     */
+    public function username_exists($username) {
+        try{
+            //$this->wsis_client = new WSISClient( $username);
+            return $this->wsis_client->username_exists($username);
+        } catch (Exception $ex) {
+            print_r( $ex);
+            throw new Exception("Unable to check whether username exists", 0, NULL);
+        }
+        
+    }
+
+    /**
+     * authenticate a given user
+     * @param $username
+     * @param $password
+     * @return boolean
+     */
+    public function authenticate($username, $password) {
+        try{
+            return $this->wsis_client->authenticate($username, $password);
+        } catch (Exception $ex) {
+            var_dump( $ex);
+            throw new Exception("Unable to authenticate user", 0, NULL);
+        }        
+    }
+
+    /**
+     * Add a new user to the identity server.
+     * @param $username
+     * @param $password
+     * @return void
+     */
+    public function add_user($username, $password, $first_name, $last_name, $email, $organization,
+            $address, $country,$telephone, $mobile, $im, $url) {
+        try{
+            $this->wsis_client->addUser($username, $password, $first_name . " " . $last_name);
+        } catch (Exception $ex) {
+            var_dump($ex);
+            throw new Exception("Unable to add new user", 0, NULL);
+        }        
+    }
+
+    /**
+     * Get the user profile
+     * @param $username
+     * @return mixed|void
+     */
+    public function get_user_profile($username)
+    {
+        // TODO: Implement get_user_profile() method.
+    }
+
+    /**
+     * Update the user profile
+     *
+     * @param $username
+     * @param $first_name
+     * @param $last_name
+     * @param $email
+     * @param $organization
+     * @param $address
+     * @param $country
+     * @param $telephone
+     * @param $mobile
+     * @param $im
+     * @param $url
+     * @return mixed
+     */
+    public function update_user_profile($username, $first_name, $last_name, $email, $organization, $address,
+                                        $country, $telephone, $mobile, $im, $url)
+    {
+        // TODO: Implement update_user_profile() method.
+    }
+
+    /**
+     * Function to update user password
+     *
+     * @param $username
+     * @param $current_password
+     * @param $new_password
+     * @return mixed
+     */
+    public function change_password($username, $current_password, $new_password)
+    {
+        // TODO: Implement change_password() method.
+    }
+
+    /**
+     * Function to remove an existing user
+     *
+     * @param $username
+     * @return void
+     */
+    public function remove_user($username)
+    {
+        // TODO: Implement remove_user() method.
+    }
+
+    /**
+     * Function to check whether a user has permission for a particular permission string(api method).
+     *
+     * @param $username
+     * @param $permission_string
+     * @return bool
+     */
+    public function checkPermissionForUser($username, $permission_string)
+    {
+        // TODO: Implement checkPermissionForUser() method.
+    }
+
+    /**
+     * Function to get all the permissions that a particular user has.
+     *
+     * @param $username
+     * @return mixed
+     */
+    public function getUserPermissions($username)
+    {
+        // TODO: Implement getUserPermissions() method.
+    }
+
+    /**
+     * Function to check whether a role is existing 
+     *
+     * @param string $roleName 
+     * @return IsExistingRoleResponse
+     */
+    public function isExistingRole( $roleName){
+        try{
+            return $this->wsis_client->is_existing_role( $roleName);
+        } catch (Exception $ex) {
+            var_dump($ex);
+            throw new Exception("Unable to check if role exists.", 0, $ex);
+        }    
+    }
+
+    /**
+     * Function to add new role by providing the role name.
+     * 
+     * @param string $roleName
+     */
+    public function addRole($roleName){
+        try{
+            return $this->wsis_client->add_role( $roleName);
+        } catch (Exception $ex) {
+            var_dump( $ex);
+            throw new Exception("Unable to add role.", 0, $ex);
+        }        
+    }
+
+    /**
+     * Function to delete existing role
+     * 
+     * @param string $roleName
+     * @return void
+     * @throws Exception
+     */
+    public function deleteRole($roleName) {
+        try {
+            $this->wsis_client->delete_role($roleName);
+        } catch (Exception $ex) {
+            throw new Exception("Unable to delete role", 0, $ex);
+        }
+    }
+
+    /**
+     * Function to get the entire list of roles in the application
+     *
+     * @return mixed
+     */
+    public function getRoleNames()
+    {
+        try{
+            return $this->wsis_client->get_all_roles();
+        } catch (Exception $ex) {
+            var_dump($ex);
+            throw new Exception("Unable to get roles.", 0, NULL);
+        }        
+    }
+
+    /**
+     * Function to get the role list of a user
+     *
+     * @param $username
+     * @return mixed
+     */
+    public function getRoleListOfUser($username)
+    {
+        try{
+            return $this->wsis_client->get_user_roles( $username);
+        } catch (Exception $ex) {
+            var_dump($ex);
+            throw new Exception("Unable to get roles.", 0, NULL);
+        }  
+    }
+
+    /**
+     * Function to get the user list of a particular role
+     *
+     * @param $role
+     * @return mixed
+     */
+    public function getUserListOfRole($role)
+    {
+        try{
+            return $this->wsis_client->get_userlist_of_role( $role);
+        } catch (Exception $ex) {
+            var_dump( $ex); exit;
+            throw new Exception("Unable to get users.", 0, NULL);
+        }
+    }
+
+    /**
+     * Function to add a role to a user
+     *
+     * @param $username
+     * @param $role
+     * @return void
+     */
+    public function addUserToRole($username, $role)
+    {
+        // TODO: Implement addUserToRole() method.
+    }
+
+    /**
+     * Function to role from user
+     *
+     * @param $username
+     * @param $role
+     * @return void
+     */
+
+    /**
+     * Function to update role list of user 
+     *
+     * @param UpdateRoleListOfUser $parameters
+     * @return void
+     */
+    public function updateRoleListOfUser($username, $roles)
+    {
+        try{
+            return $this->wsis_client->update_user_roles( $username, $roles);
+        } catch (Exception $ex) {
+            var_dump($ex); exit;
+            throw new Exception("Unable to update User roles.", 0, NULL);
+        }  
+    }
+    public function removeUserFromRole($username, $role)
+    {
+        // TODO: Implement removeUserFromRole() method.
+    }
+
+    /**
+     * Function to list users
+     *
+     * @param void
+     * @return void
+     */
+    public function listUsers(){
+        try {
+            return $this->wsis_client->list_users();
+        } catch (Exception $ex) {
+    
+            throw new Exception( "Unable to list users", 0, $ex);
+        }
+    }
+
+    /**
+     * Function to get the tenant id
+     *
+     * @param GetTenantId $parameters
+     * @return GetTenantIdResponse
+     */
+    public function getTenantId(){
+        try {
+            return $this->wsis_client->get_tenant_id();
+        } catch (Exception $ex) {
+            var_dump( $ex->debug_message); 
+            throw new Exception("Unable to get the Tenant Id.", 0, $ex);
+        }
+    }
+    /**
+    * Function create a new Tenant
+    *
+    * @param Tenant $parameters
+    * @return void
+    */
+    public function createTenant( $inputs){
+        try {
+            return $this->wsis_client->create_tenant( $inputs);
+        } catch (Exception $ex) {
+            var_dump( $ex); 
+            //throw new Exception("Unable to create Tenant.", 0, $ex);
+        }
+    }
+}


[54/57] airavata-php-gateway git commit: AIRAVATA-1695 Queues are now selected dynamically

Posted by nd...@apache.org.
AIRAVATA-1695 Queues are now selected dynamically


Project: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/commit/a88b5d69
Tree: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/tree/a88b5d69
Diff: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/diff/a88b5d69

Branch: refs/heads/master
Commit: a88b5d69ee31460be4607fd38ee285d44a482acc
Parents: 01413d6
Author: nipunhere <ni...@gmail.com>
Authored: Fri May 1 17:14:48 2015 -0400
Committer: nipunhere <ni...@gmail.com>
Committed: Fri May 1 17:14:48 2015 -0400

----------------------------------------------------------------------
 app/controllers/ComputeResource.php             |  238 --
 app/controllers/ExperimentController.php        |   43 +-
 app/controllers/ResourceController.php          |  238 ++
 app/libraries/Utilities.php                     | 2098 +++++++++++++++++
 app/libraries/utilities.php                     | 2111 ------------------
 app/routes.php                                  |   22 +-
 app/views/experiment/create-complete.blade.php  |   17 +-
 app/views/layout/basic.blade.php                |   14 +
 app/views/partials/experiment-inputs.blade.php  |   52 +-
 .../partials/experiment-queue-block.blade.php   |  107 +
 10 files changed, 2538 insertions(+), 2402 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a88b5d69/app/controllers/ComputeResource.php
----------------------------------------------------------------------
diff --git a/app/controllers/ComputeResource.php b/app/controllers/ComputeResource.php
deleted file mode 100755
index 6644c73..0000000
--- a/app/controllers/ComputeResource.php
+++ /dev/null
@@ -1,238 +0,0 @@
-<?php
-
-class ComputeResource extends BaseController{
-	
-	/**
-	*    Instantiate a new Compute Resource Controller Instance
-	**/
-
-	public function __construct()
-	{
-		$this->beforeFilter('verifyadmin');
-		Session::put("nav-active", "compute-resource");
-
-	}
-
-	public function createView(){
-			return View::make("resource/create");
-	}
-
-	public function createSubmit(){
-
-		$hostAliases = Input::get("hostaliases");
-		$ips = Input::get("ips");
-		$computeDescription = array( 
-									"hostName"=> trim( Input::get("hostname") ),
-									"hostAliases"=> array_unique( array_filter( $hostAliases) ),
-									"ipAddresses"=> array_unique( array_filter( $ips) ),
-									"resourceDescription"=>Input::get("description") 
-									);
-		$computeResource = CRUtilities::register_or_update_compute_resource( $computeDescription);
-		
-		return Redirect::to( "cr/edit?crId=" . $computeResource->computeResourceId);
-	}
-
-	public function editView(){
-		
-		$data = CRUtilities::getEditCRData();
-		$computeResourceId = "";
-		if( Input::has("crId"))
-			$computeResourceId = Input::get("crId");
-		else if( Session::has("computeResource"))
-		{
-			$computeResource = Session::get("computeResource");
-			$computeResourceId = $computeResource->computeResourceId;
-		}
-
-		if( $computeResourceId != "")
-		{
-			$computeResource = Utilities::get_compute_resource(  $computeResourceId);
-			$jobSubmissionInterfaces = array();
-			$dataMovementInterfaces = array();
-			$addedJSP = array();
-			$addedDMI = array();
-			//var_dump( $computeResource->jobSubmissionInterfaces); exit;
-			if( count( $computeResource->jobSubmissionInterfaces) )
-			{
-				foreach( $computeResource->jobSubmissionInterfaces as $JSI )
-				{
-					$jobSubmissionInterfaces[] = CRUtilities::getJobSubmissionDetails( $JSI->jobSubmissionInterfaceId, $JSI->jobSubmissionProtocol);
-					$addedJSP[] = $JSI->jobSubmissionProtocol;
-				}
-			}
-			//var_dump( CRUtilities::getJobSubmissionDetails( $data["computeResource"]->jobSubmissionInterfaces[0]->jobSubmissionInterfaceId, 1) ); exit;
-			if( count( $computeResource->dataMovementInterfaces) )
-			{
-				foreach( $computeResource->dataMovementInterfaces as $DMI )
-				{
-					$dataMovementInterfaces[] = CRUtilities::getDataMovementDetails( $DMI->dataMovementInterfaceId, $DMI->dataMovementProtocol);
-					$addedDMI[] = $DMI->dataMovementProtocol;
-				}
-			}
-
-			$data["computeResource"] = $computeResource;
-			$data["jobSubmissionInterfaces"] = $jobSubmissionInterfaces;
-			$data["dataMovementInterfaces"] = $dataMovementInterfaces;
-			$data["addedJSP"] = $addedJSP;
-			$data["addedDMI"] = $addedDMI;
-			//var_dump($data["jobSubmissionInterfaces"]); exit;
-			return View::make("resource/edit", $data);
-		}
-		else
-			return View::make("resource/browse")->with("login-alert", "Unable to retrieve this Compute Resource. Please report this error to devs.");
-
-	}
-		
-	public function editSubmit(){
-
-		$tabName = "";
-		if( Input::get("cr-edit") == "resDesc") /* Modify compute Resource description */
-		{
-			$computeDescription = Utilities::get_compute_resource(  Input::get("crId"));
-			$computeDescription->hostName = trim( Input::get("hostname") );
-			$computeDescription->hostAliases = array_unique( array_filter( Input::get("hostaliases") ) );
-			$computeDescription->ipAddresses = array_unique( array_filter( Input::get("ips") ) );
-			$computeDescription->resourceDescription = Input::get("description");
-			$computeDescription->maxMemoryPerNode = Input::get("maxMemoryPerNode");
-			//var_dump( $computeDescription); exit;
-
-			$computeResource = CRUtilities::register_or_update_compute_resource( $computeDescription, true);
-
-			$tabName =  "#tab-desc";
-		}
-		if( Input::get("cr-edit") == "queue") /* Add / Modify a Queue */
-		{
-			$queue = array( "queueName"			=>Input::get("qname"),
-							"queueDescription"	=>Input::get("qdesc"),
-							"maxRunTime"		=>Input::get( "qmaxruntime"),
-							"maxNodes"			=>Input::get("qmaxnodes"),
-							"maxProcessors"		=>Input::get("qmaxprocessors"),
-							"maxJobsInQueue"	=>Input::get("qmaxjobsinqueue"),
-							"maxMemory"			=>Input::get("qmaxmemoryinqueue")
-						);
-
-			$computeDescription = Utilities::get_compute_resource(  Input::get("crId"));
-			$computeDescription->batchQueues[] = CRUtilities::createQueueObject( $queue);
-			$computeResource = CRUtilities::register_or_update_compute_resource( $computeDescription, true);
-			//var_dump( $computeResource); exit;
-			$tabName = "#tab-queues";
-		}
-		else if( Input::get("cr-edit") == "delete-queue" )
-		{
-			CRUtilities::deleteQueue( Input::get("crId"), Input::get("queueName") );
-			$tabName = "#tab-queues";
-		} 
-		else if( Input::get("cr-edit") == "fileSystems")
-		{
-			$computeDescription = Utilities::get_compute_resource(  Input::get("crId"));
-			$computeDescription->fileSystems = array_filter( Input::get("fileSystems"), "trim");
-			$computeResource = CRUtilities::register_or_update_compute_resource( $computeDescription, true);
-
-			$tabName = "#tab-filesystem";
-		}
-		else if( Input::get("cr-edit") == "jsp" ||  Input::get("cr-edit") == "edit-jsp" ) /* Add / Modify a Job Submission Interface */
-		{		
-			$update = false;	
-			if( Input::get("cr-edit") == "edit-jsp")
-				$update = true;
-
-			$jobSubmissionInterface = CRUtilities::create_or_update_JSIObject( Input::all(), $update );
-
-			$tabName = "#tab-jobSubmission";
-		}
-		else if( Input::get("cr-edit") == "jsi-priority") 
-		{
-			$inputs = Input::all();
-			$computeDescription = Utilities::get_compute_resource(  Input::get("crId"));
-			foreach( $computeDescription->jobSubmissionInterfaces as $index => $jsi)
-			{
-				foreach( $inputs["jsi-id"] as $idIndex => $jsiId)
-				{
-					if( $jsiId == $jsi->jobSubmissionInterfaceId )
-					{
-						$computeDescription->jobSubmissionInterfaces[$index]->priorityOrder = $inputs["jsi-priority"][$idIndex];
-						break;
-					}
-				}
-			}
-			$computeResource = CRUtilities::register_or_update_compute_resource( $computeDescription, true);
-
-			return 1; //currently done by ajax.
-		}
-		else if( Input::get("cr-edit") == "dmp" ||  Input::get("cr-edit") == "edit-dmi" ) /* Add / Modify a Data Movement Interface */
-		{
-			$update = false;	
-			if( Input::get("cr-edit") == "edit-dmi")
-				$update = true;
-			$dataMovementInterface = CRUtilities::create_or_update_DMIObject( Input::all(), $update );
-
-			$tabName = "#tab-dataMovement";
-		}
-		else if( Input::get("cr-edit") == "dmi-priority") 
-		{
-			$inputs = Input::all();
-			$computeDescription = Utilities::get_compute_resource(  Input::get("crId"));
-			foreach( $computeDescription->dataMovementInterfaces as $index => $dmi)
-			{
-				foreach( $inputs["dmi-id"] as $idIndex => $dmiId)
-				{
-					if( $dmiId == $dmi->dataMovementInterfaceId )
-					{
-						$computeDescription->dataMovementInterfaces[$index]->priorityOrder = $inputs["dmi-priority"][$idIndex];
-						break;
-					}
-				}
-			}
-			$computeResource = CRUtilities::register_or_update_compute_resource( $computeDescription, true);
-
-			return 1; //currently done by ajax.
-		}
-
-		return Redirect::to("cr/edit?crId=" . Input::get("crId") . $tabName );
-	}
-
-	public function deleteActions(){
-
-		$result = CRUtilities::deleteActions( Input::all() );
-		if( Input::has("jsiId"))
-		{
-			return Redirect::to("cr/edit?crId=" . Input::get("crId"). "#tab-jobSubmission")
-							->with("message", "Job Submission Interface was deleted successfully");
-		}
-		if( Input::has("dmiId"))
-		{
-			return Redirect::to("cr/edit?crId=" . Input::get("crId"). "#tab-dataMovement")
-							->with( "message", "Data Movement Protocol was deleted successfully");
-		}
-		elseif( Input::has("del-crId") )
-		{
-			return Redirect::to("cr/browse")->with("message", "The Compute Resource has been successfully deleted.");
-		}
-		else
-			return $result;
-	}
-
-	public function browseView(){
-		$data = CRUtilities::getBrowseCRData();
-		$allCRs = $data["crObjects"];
-		$appDeployments = $data["appDeployments"];
-
-		$connectedDeployments = array();
-		foreach( (array)$allCRs as $crId => $crName)
-		{
-			$connectedDeployments[ $crId] = 0;
-			foreach( (array)$appDeployments as $deploymentObject)
-			{
-				if( $crId == $deploymentObject->computeHostId)
-					$connectedDeployments[$crId]++;
-			}
-		}
-		return View::make("resource/browse", array(
-												"allCRs" => $allCRs,
-												"connectedDeployments" => $connectedDeployments
-												));
-
-	}
-}
-
-?>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a88b5d69/app/controllers/ExperimentController.php
----------------------------------------------------------------------
diff --git a/app/controllers/ExperimentController.php b/app/controllers/ExperimentController.php
index 69abd00..0968d81 100755
--- a/app/controllers/ExperimentController.php
+++ b/app/controllers/ExperimentController.php
@@ -26,7 +26,16 @@ class ExperimentController extends BaseController {
 		{
 			Session::put( 'exp_create_continue', true);
 			
+			$computeResources = Utilities::create_compute_resources_select($_POST['application'], null);
+
 			$app_config = Utilities::read_config();
+
+			$queueDefaults = array( "queueName" => $app_config["queue-name"],
+						        	"nodeCount" => $app_config["node-count"],
+						        	"cpuCount" => $app_config["total-cpu-count"],
+						        	"wallTimeLimit" => $app_config["wall-time-limit"]
+							);
+
 			$experimentInputs = array( 
 								"disabled" => ' disabled',
 						        "experimentName" => $_POST['experiment-name'],
@@ -36,11 +45,10 @@ class ExperimentController extends BaseController {
 						        "allowedFileSize" => $app_config["server-allowed-file-size"],
 						        "echo" => ($_POST['application'] == 'Echo')? ' selected' : '',
 						        "wrf" => ($_POST['application'] == 'WRF')? ' selected' : '',
-						        "queueName" => $app_config["queue-name"],
-						        "nodeCount" => $app_config["node-count"],
-						        "cpuCount" => $app_config["total-cpu-count"],
-						        "wallTimeLimit" => $app_config["wall-time-limit"],
-						        "advancedOptions" => $app_config["advanced-experiment-options"]
+						        "queueDefaults" => $queueDefaults,
+						        "advancedOptions" => $app_config["advanced-experiment-options"],
+						        "computeResources" => $computeResources,
+						        "resourceHostId" => null
 					        );
 			return View::make( "experiment/create-complete", array( "expInputs" => $experimentInputs) );
 		}
@@ -166,11 +174,17 @@ class ExperimentController extends BaseController {
 	public function editView()
 	{
 		$app_config = Utilities::read_config();
+		$queueDefaults = array( "queueName" => $app_config["queue-name"],
+						        "nodeCount" => $app_config["node-count"],
+						        "cpuCount" => $app_config["total-cpu-count"],
+						        "wallTimeLimit" => $app_config["wall-time-limit"]
+							);
+
 		$experiment = Utilities::get_experiment($_GET['expId']);
 		$project = Utilities::get_project($experiment->projectID);
 
 		$expVal = Utilities::get_experiment_values( $experiment, $project);
-
+		$computeResources = Utilities::create_compute_resources_select($experiment->applicationId, $expVal['scheduling']->resourceHostId);
 		$experimentInputs = array(	
 								"disabled" => ' ',
 						        "experimentName" => $experiment->name,
@@ -178,10 +192,13 @@ class ExperimentController extends BaseController {
 						        "application" => $experiment->applicationId,
 						      	"allowedFileSize" => $app_config["server-allowed-file-size"],
 								'experiment' => $experiment,
+								"queueDefaults" => $queueDefaults,
 								'project' => $project,
 								'expVal' => $expVal,
 								'cloning' => true,
-						        'advancedOptions' => $app_config["advanced-experiment-options"]
+						        'advancedOptions' => $app_config["advanced-experiment-options"],
+						        'computeResources' => $computeResources,
+						        "resourceHostId" => $expVal['scheduling']->resourceHostId
 								);
 		return View::make("experiment/edit", array("expInputs" => $experimentInputs) );
 	}
@@ -227,6 +244,18 @@ class ExperimentController extends BaseController {
 												));
 	}
 
+	public function getQueueView()
+	{
+		$queues = Utilities::getQueueDatafromResourceId( Input::get("crId"));
+		$app_config = Utilities::read_config();
+		$queueDefaults = array( "queueName" => $app_config["queue-name"],
+						        "nodeCount" => $app_config["node-count"],
+						        "cpuCount" => $app_config["total-cpu-count"],
+						        "wallTimeLimit" => $app_config["wall-time-limit"]
+							);
+		return View::make("partials/experiment-queue-block", array( "queues" => $queues, "queueDefaults" => $queueDefaults) );
+	}
+
 }
 
 ?>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a88b5d69/app/controllers/ResourceController.php
----------------------------------------------------------------------
diff --git a/app/controllers/ResourceController.php b/app/controllers/ResourceController.php
new file mode 100755
index 0000000..d11d918
--- /dev/null
+++ b/app/controllers/ResourceController.php
@@ -0,0 +1,238 @@
+<?php
+
+class ResourceController extends BaseController{
+	
+	/**
+	*    Instantiate a new Compute Resource Controller Instance
+	**/
+
+	public function __construct()
+	{
+		$this->beforeFilter('verifyadmin');
+		Session::put("nav-active", "compute-resource");
+
+	}
+
+	public function createView(){
+			return View::make("resource/create");
+	}
+
+	public function createSubmit(){
+
+		$hostAliases = Input::get("hostaliases");
+		$ips = Input::get("ips");
+		$computeDescription = array( 
+									"hostName"=> trim( Input::get("hostname") ),
+									"hostAliases"=> array_unique( array_filter( $hostAliases) ),
+									"ipAddresses"=> array_unique( array_filter( $ips) ),
+									"resourceDescription"=>Input::get("description") 
+									);
+		$computeResource = CRUtilities::register_or_update_compute_resource( $computeDescription);
+		
+		return Redirect::to( "cr/edit?crId=" . $computeResource->computeResourceId);
+	}
+
+	public function editView(){
+		
+		$data = CRUtilities::getEditCRData();
+		$computeResourceId = "";
+		if( Input::has("crId"))
+			$computeResourceId = Input::get("crId");
+		else if( Session::has("computeResource"))
+		{
+			$computeResource = Session::get("computeResource");
+			$computeResourceId = $computeResource->computeResourceId;
+		}
+
+		if( $computeResourceId != "")
+		{
+			$computeResource = Utilities::get_compute_resource(  $computeResourceId);
+			$jobSubmissionInterfaces = array();
+			$dataMovementInterfaces = array();
+			$addedJSP = array();
+			$addedDMI = array();
+			//var_dump( $computeResource->jobSubmissionInterfaces); exit;
+			if( count( $computeResource->jobSubmissionInterfaces) )
+			{
+				foreach( $computeResource->jobSubmissionInterfaces as $JSI )
+				{
+					$jobSubmissionInterfaces[] = CRUtilities::getJobSubmissionDetails( $JSI->jobSubmissionInterfaceId, $JSI->jobSubmissionProtocol);
+					$addedJSP[] = $JSI->jobSubmissionProtocol;
+				}
+			}
+			//var_dump( CRUtilities::getJobSubmissionDetails( $data["computeResource"]->jobSubmissionInterfaces[0]->jobSubmissionInterfaceId, 1) ); exit;
+			if( count( $computeResource->dataMovementInterfaces) )
+			{
+				foreach( $computeResource->dataMovementInterfaces as $DMI )
+				{
+					$dataMovementInterfaces[] = CRUtilities::getDataMovementDetails( $DMI->dataMovementInterfaceId, $DMI->dataMovementProtocol);
+					$addedDMI[] = $DMI->dataMovementProtocol;
+				}
+			}
+
+			$data["computeResource"] = $computeResource;
+			$data["jobSubmissionInterfaces"] = $jobSubmissionInterfaces;
+			$data["dataMovementInterfaces"] = $dataMovementInterfaces;
+			$data["addedJSP"] = $addedJSP;
+			$data["addedDMI"] = $addedDMI;
+			//var_dump($data["jobSubmissionInterfaces"]); exit;
+			return View::make("resource/edit", $data);
+		}
+		else
+			return View::make("resource/browse")->with("login-alert", "Unable to retrieve this Compute Resource. Please report this error to devs.");
+
+	}
+		
+	public function editSubmit(){
+
+		$tabName = "";
+		if( Input::get("cr-edit") == "resDesc") /* Modify compute Resource description */
+		{
+			$computeDescription = Utilities::get_compute_resource(  Input::get("crId"));
+			$computeDescription->hostName = trim( Input::get("hostname") );
+			$computeDescription->hostAliases = array_unique( array_filter( Input::get("hostaliases") ) );
+			$computeDescription->ipAddresses = array_unique( array_filter( Input::get("ips") ) );
+			$computeDescription->resourceDescription = Input::get("description");
+			$computeDescription->maxMemoryPerNode = Input::get("maxMemoryPerNode");
+			//var_dump( $computeDescription); exit;
+
+			$computeResource = CRUtilities::register_or_update_compute_resource( $computeDescription, true);
+
+			$tabName =  "#tab-desc";
+		}
+		if( Input::get("cr-edit") == "queue") /* Add / Modify a Queue */
+		{
+			$queue = array( "queueName"			=>Input::get("qname"),
+							"queueDescription"	=>Input::get("qdesc"),
+							"maxRunTime"		=>Input::get( "qmaxruntime"),
+							"maxNodes"			=>Input::get("qmaxnodes"),
+							"maxProcessors"		=>Input::get("qmaxprocessors"),
+							"maxJobsInQueue"	=>Input::get("qmaxjobsinqueue"),
+							"maxMemory"			=>Input::get("qmaxmemoryinqueue")
+						);
+
+			$computeDescription = Utilities::get_compute_resource(  Input::get("crId"));
+			$computeDescription->batchQueues[] = CRUtilities::createQueueObject( $queue);
+			$computeResource = CRUtilities::register_or_update_compute_resource( $computeDescription, true);
+			//var_dump( $computeResource); exit;
+			$tabName = "#tab-queues";
+		}
+		else if( Input::get("cr-edit") == "delete-queue" )
+		{
+			CRUtilities::deleteQueue( Input::get("crId"), Input::get("queueName") );
+			$tabName = "#tab-queues";
+		} 
+		else if( Input::get("cr-edit") == "fileSystems")
+		{
+			$computeDescription = Utilities::get_compute_resource(  Input::get("crId"));
+			$computeDescription->fileSystems = array_filter( Input::get("fileSystems"), "trim");
+			$computeResource = CRUtilities::register_or_update_compute_resource( $computeDescription, true);
+
+			$tabName = "#tab-filesystem";
+		}
+		else if( Input::get("cr-edit") == "jsp" ||  Input::get("cr-edit") == "edit-jsp" ) /* Add / Modify a Job Submission Interface */
+		{		
+			$update = false;	
+			if( Input::get("cr-edit") == "edit-jsp")
+				$update = true;
+
+			$jobSubmissionInterface = CRUtilities::create_or_update_JSIObject( Input::all(), $update );
+
+			$tabName = "#tab-jobSubmission";
+		}
+		else if( Input::get("cr-edit") == "jsi-priority") 
+		{
+			$inputs = Input::all();
+			$computeDescription = Utilities::get_compute_resource(  Input::get("crId"));
+			foreach( $computeDescription->jobSubmissionInterfaces as $index => $jsi)
+			{
+				foreach( $inputs["jsi-id"] as $idIndex => $jsiId)
+				{
+					if( $jsiId == $jsi->jobSubmissionInterfaceId )
+					{
+						$computeDescription->jobSubmissionInterfaces[$index]->priorityOrder = $inputs["jsi-priority"][$idIndex];
+						break;
+					}
+				}
+			}
+			$computeResource = CRUtilities::register_or_update_compute_resource( $computeDescription, true);
+
+			return 1; //currently done by ajax.
+		}
+		else if( Input::get("cr-edit") == "dmp" ||  Input::get("cr-edit") == "edit-dmi" ) /* Add / Modify a Data Movement Interface */
+		{
+			$update = false;	
+			if( Input::get("cr-edit") == "edit-dmi")
+				$update = true;
+			$dataMovementInterface = CRUtilities::create_or_update_DMIObject( Input::all(), $update );
+
+			$tabName = "#tab-dataMovement";
+		}
+		else if( Input::get("cr-edit") == "dmi-priority") 
+		{
+			$inputs = Input::all();
+			$computeDescription = Utilities::get_compute_resource(  Input::get("crId"));
+			foreach( $computeDescription->dataMovementInterfaces as $index => $dmi)
+			{
+				foreach( $inputs["dmi-id"] as $idIndex => $dmiId)
+				{
+					if( $dmiId == $dmi->dataMovementInterfaceId )
+					{
+						$computeDescription->dataMovementInterfaces[$index]->priorityOrder = $inputs["dmi-priority"][$idIndex];
+						break;
+					}
+				}
+			}
+			$computeResource = CRUtilities::register_or_update_compute_resource( $computeDescription, true);
+
+			return 1; //currently done by ajax.
+		}
+
+		return Redirect::to("cr/edit?crId=" . Input::get("crId") . $tabName );
+	}
+
+	public function deleteActions(){
+
+		$result = CRUtilities::deleteActions( Input::all() );
+		if( Input::has("jsiId"))
+		{
+			return Redirect::to("cr/edit?crId=" . Input::get("crId"). "#tab-jobSubmission")
+							->with("message", "Job Submission Interface was deleted successfully");
+		}
+		if( Input::has("dmiId"))
+		{
+			return Redirect::to("cr/edit?crId=" . Input::get("crId"). "#tab-dataMovement")
+							->with( "message", "Data Movement Protocol was deleted successfully");
+		}
+		elseif( Input::has("del-crId") )
+		{
+			return Redirect::to("cr/browse")->with("message", "The Compute Resource has been successfully deleted.");
+		}
+		else
+			return $result;
+	}
+
+	public function browseView(){
+		$data = CRUtilities::getBrowseCRData();
+		$allCRs = $data["crObjects"];
+		$appDeployments = $data["appDeployments"];
+
+		$connectedDeployments = array();
+		foreach( (array)$allCRs as $crId => $crName)
+		{
+			$connectedDeployments[ $crId] = 0;
+			foreach( (array)$appDeployments as $deploymentObject)
+			{
+				if( $crId == $deploymentObject->computeHostId)
+					$connectedDeployments[$crId]++;
+			}
+		}
+		return View::make("resource/browse", array(
+												"allCRs" => $allCRs,
+												"connectedDeployments" => $connectedDeployments
+												));
+
+	}
+}
+
+?>
\ No newline at end of file


[08/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/QueueManager.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/QueueManager.php b/vendor/laravel/framework/src/Illuminate/Queue/QueueManager.php
new file mode 100755
index 0000000..2231327
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/QueueManager.php
@@ -0,0 +1,223 @@
+<?php namespace Illuminate\Queue;
+
+use Closure;
+
+class QueueManager {
+
+	/**
+	 * The application instance.
+	 *
+	 * @var \Illuminate\Foundation\Application
+	 */
+	protected $app;
+
+	/**
+	 * The array of resolved queue connections.
+	 *
+	 * @var array
+	 */
+	protected $connections = array();
+
+	/**
+	 * Create a new queue manager instance.
+	 *
+	 * @param  \Illuminate\Foundation\Application  $app
+	 * @return void
+	 */
+	public function __construct($app)
+	{
+		$this->app = $app;
+	}
+
+	/**
+	 * Register an event listener for the daemon queue loop.
+	 *
+	 * @param  mixed  $callback
+	 * @return void
+	 */
+	public function looping($callback)
+	{
+		$this->app['events']->listen('illuminate.queue.looping', $callback);
+	}
+
+	/**
+	 * Register an event listener for the failed job event.
+	 *
+	 * @param  mixed  $callback
+	 * @return void
+	 */
+	public function failing($callback)
+	{
+		$this->app['events']->listen('illuminate.queue.failed', $callback);
+	}
+
+	/**
+	 * Register an event listener for the daemon queue stopping.
+	 *
+	 * @param  mixed  $callback
+	 * @return void
+	 */
+	public function stopping($callback)
+	{
+		$this->app['events']->listen('illuminate.queue.stopping', $callback);
+	}
+
+	/**
+	 * Determine if the driver is connected.
+	 *
+	 * @param  string  $name
+	 * @return bool
+	 */
+	public function connected($name = null)
+	{
+		return isset($this->connections[$name ?: $this->getDefaultDriver()]);
+	}
+
+	/**
+	 * Resolve a queue connection instance.
+	 *
+	 * @param  string  $name
+	 * @return \Illuminate\Queue\QueueInterface
+	 */
+	public function connection($name = null)
+	{
+		$name = $name ?: $this->getDefaultDriver();
+
+		// If the connection has not been resolved yet we will resolve it now as all
+		// of the connections are resolved when they are actually needed so we do
+		// not make any unnecessary connection to the various queue end-points.
+		if ( ! isset($this->connections[$name]))
+		{
+			$this->connections[$name] = $this->resolve($name);
+
+			$this->connections[$name]->setContainer($this->app);
+
+			$this->connections[$name]->setEncrypter($this->app['encrypter']);
+		}
+
+		return $this->connections[$name];
+	}
+
+	/**
+	 * Resolve a queue connection.
+	 *
+	 * @param  string  $name
+	 * @return \Illuminate\Queue\QueueInterface
+	 */
+	protected function resolve($name)
+	{
+		$config = $this->getConfig($name);
+
+		return $this->getConnector($config['driver'])->connect($config);
+	}
+
+	/**
+	 * Get the connector for a given driver.
+	 *
+	 * @param  string  $driver
+	 * @return \Illuminate\Queue\Connectors\ConnectorInterface
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	protected function getConnector($driver)
+	{
+		if (isset($this->connectors[$driver]))
+		{
+			return call_user_func($this->connectors[$driver]);
+		}
+
+		throw new \InvalidArgumentException("No connector for [$driver]");
+	}
+
+	/**
+	 * Add a queue connection resolver.
+	 *
+	 * @param  string    $driver
+	 * @param  \Closure  $resolver
+	 * @return void
+	 */
+	public function extend($driver, Closure $resolver)
+	{
+		return $this->addConnector($driver, $resolver);
+	}
+
+	/**
+	 * Add a queue connection resolver.
+	 *
+	 * @param  string    $driver
+	 * @param  \Closure  $resolver
+	 * @return void
+	 */
+	public function addConnector($driver, Closure $resolver)
+	{
+		$this->connectors[$driver] = $resolver;
+	}
+
+	/**
+	 * Get the queue connection configuration.
+	 *
+	 * @param  string  $name
+	 * @return array
+	 */
+	protected function getConfig($name)
+	{
+		return $this->app['config']["queue.connections.{$name}"];
+	}
+
+	/**
+	 * Get the name of the default queue connection.
+	 *
+	 * @return string
+	 */
+	public function getDefaultDriver()
+	{
+		return $this->app['config']['queue.default'];
+	}
+
+	/**
+	 * Set the name of the default queue connection.
+	 *
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function setDefaultDriver($name)
+	{
+		$this->app['config']['queue.default'] = $name;
+	}
+
+	/**
+	 * Get the full name for the given connection.
+	 *
+	 * @param  string  $connection
+	 * @return string
+	 */
+	public function getName($connection = null)
+	{
+		return $connection ?: $this->getDefaultDriver();
+	}
+
+	/**
+	* Determine if the application is in maintenance mode.
+	*
+	* @return bool
+	*/
+	public function isDownForMaintenance()
+	{
+		return $this->app->isDownForMaintenance();
+	}
+
+	/**
+	 * Dynamically pass calls to the default connection.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 */
+	public function __call($method, $parameters)
+	{
+		$callable = array($this->connection(), $method);
+
+		return call_user_func_array($callable, $parameters);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/QueueServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/QueueServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Queue/QueueServiceProvider.php
new file mode 100755
index 0000000..64733ca
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/QueueServiceProvider.php
@@ -0,0 +1,305 @@
+<?php namespace Illuminate\Queue;
+
+use IlluminateQueueClosure;
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Queue\Console\WorkCommand;
+use Illuminate\Queue\Console\ListenCommand;
+use Illuminate\Queue\Console\RestartCommand;
+use Illuminate\Queue\Connectors\SqsConnector;
+use Illuminate\Queue\Console\SubscribeCommand;
+use Illuminate\Queue\Connectors\SyncConnector;
+use Illuminate\Queue\Connectors\IronConnector;
+use Illuminate\Queue\Connectors\RedisConnector;
+use Illuminate\Queue\Connectors\BeanstalkdConnector;
+use Illuminate\Queue\Failed\DatabaseFailedJobProvider;
+
+class QueueServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->registerManager();
+
+		$this->registerWorker();
+
+		$this->registerListener();
+
+		$this->registerSubscriber();
+
+		$this->registerFailedJobServices();
+
+		$this->registerQueueClosure();
+	}
+
+	/**
+	 * Register the queue manager.
+	 *
+	 * @return void
+	 */
+	protected function registerManager()
+	{
+		$this->app->bindShared('queue', function($app)
+		{
+			// Once we have an instance of the queue manager, we will register the various
+			// resolvers for the queue connectors. These connectors are responsible for
+			// creating the classes that accept queue configs and instantiate queues.
+			$manager = new QueueManager($app);
+
+			$this->registerConnectors($manager);
+
+			return $manager;
+		});
+	}
+
+	/**
+	 * Register the queue worker.
+	 *
+	 * @return void
+	 */
+	protected function registerWorker()
+	{
+		$this->registerWorkCommand();
+
+		$this->registerRestartCommand();
+
+		$this->app->bindShared('queue.worker', function($app)
+		{
+			return new Worker($app['queue'], $app['queue.failer'], $app['events']);
+		});
+	}
+
+	/**
+	 * Register the queue worker console command.
+	 *
+	 * @return void
+	 */
+	protected function registerWorkCommand()
+	{
+		$this->app->bindShared('command.queue.work', function($app)
+		{
+			return new WorkCommand($app['queue.worker']);
+		});
+
+		$this->commands('command.queue.work');
+	}
+
+	/**
+	 * Register the queue listener.
+	 *
+	 * @return void
+	 */
+	protected function registerListener()
+	{
+		$this->registerListenCommand();
+
+		$this->app->bindShared('queue.listener', function($app)
+		{
+			return new Listener($app['path.base']);
+		});
+	}
+
+	/**
+	 * Register the queue listener console command.
+	 *
+	 * @return void
+	 */
+	protected function registerListenCommand()
+	{
+		$this->app->bindShared('command.queue.listen', function($app)
+		{
+			return new ListenCommand($app['queue.listener']);
+		});
+
+		$this->commands('command.queue.listen');
+	}
+
+	/**
+	 * Register the queue restart console command.
+	 *
+	 * @return void
+	 */
+	public function registerRestartCommand()
+	{
+		$this->app->bindShared('command.queue.restart', function()
+		{
+			return new RestartCommand;
+		});
+
+		$this->commands('command.queue.restart');
+	}
+
+	/**
+	 * Register the push queue subscribe command.
+	 *
+	 * @return void
+	 */
+	protected function registerSubscriber()
+	{
+		$this->app->bindShared('command.queue.subscribe', function()
+		{
+			return new SubscribeCommand;
+		});
+
+		$this->commands('command.queue.subscribe');
+	}
+
+	/**
+	 * Register the connectors on the queue manager.
+	 *
+	 * @param  \Illuminate\Queue\QueueManager  $manager
+	 * @return void
+	 */
+	public function registerConnectors($manager)
+	{
+		foreach (array('Sync', 'Beanstalkd', 'Redis', 'Sqs', 'Iron') as $connector)
+		{
+			$this->{"register{$connector}Connector"}($manager);
+		}
+	}
+
+	/**
+	 * Register the Sync queue connector.
+	 *
+	 * @param  \Illuminate\Queue\QueueManager  $manager
+	 * @return void
+	 */
+	protected function registerSyncConnector($manager)
+	{
+		$manager->addConnector('sync', function()
+		{
+			return new SyncConnector;
+		});
+	}
+
+	/**
+	 * Register the Beanstalkd queue connector.
+	 *
+	 * @param  \Illuminate\Queue\QueueManager  $manager
+	 * @return void
+	 */
+	protected function registerBeanstalkdConnector($manager)
+	{
+		$manager->addConnector('beanstalkd', function()
+		{
+			return new BeanstalkdConnector;
+		});
+	}
+
+	/**
+	 * Register the Redis queue connector.
+	 *
+	 * @param  \Illuminate\Queue\QueueManager  $manager
+	 * @return void
+	 */
+	protected function registerRedisConnector($manager)
+	{
+		$app = $this->app;
+
+		$manager->addConnector('redis', function() use ($app)
+		{
+			return new RedisConnector($app['redis']);
+		});
+	}
+
+	/**
+	 * Register the Amazon SQS queue connector.
+	 *
+	 * @param  \Illuminate\Queue\QueueManager  $manager
+	 * @return void
+	 */
+	protected function registerSqsConnector($manager)
+	{
+		$manager->addConnector('sqs', function()
+		{
+			return new SqsConnector;
+		});
+	}
+
+	/**
+	 * Register the IronMQ queue connector.
+	 *
+	 * @param  \Illuminate\Queue\QueueManager  $manager
+	 * @return void
+	 */
+	protected function registerIronConnector($manager)
+	{
+		$app = $this->app;
+
+		$manager->addConnector('iron', function() use ($app)
+		{
+			return new IronConnector($app['encrypter'], $app['request']);
+		});
+
+		$this->registerIronRequestBinder();
+	}
+
+	/**
+	 * Register the request rebinding event for the Iron queue.
+	 *
+	 * @return void
+	 */
+	protected function registerIronRequestBinder()
+	{
+		$this->app->rebinding('request', function($app, $request)
+		{
+			if ($app['queue']->connected('iron'))
+			{
+				$app['queue']->connection('iron')->setRequest($request);
+			}
+		});
+	}
+
+	/**
+	 * Register the failed job services.
+	 *
+	 * @return void
+	 */
+	protected function registerFailedJobServices()
+	{
+		$this->app->bindShared('queue.failer', function($app)
+		{
+			$config = $app['config']['queue.failed'];
+
+			return new DatabaseFailedJobProvider($app['db'], $config['database'], $config['table']);
+		});
+	}
+
+	/**
+	 * Register the Illuminate queued closure job.
+	 *
+	 * @return void
+	 */
+	protected function registerQueueClosure()
+	{
+		$this->app->bindShared('IlluminateQueueClosure', function($app)
+		{
+			return new IlluminateQueueClosure($app['encrypter']);
+		});
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array(
+			'queue', 'queue.worker', 'queue.listener', 'queue.failer',
+			'command.queue.work', 'command.queue.listen', 'command.queue.restart',
+			'command.queue.subscribe',
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/README.md
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/README.md b/vendor/laravel/framework/src/Illuminate/Queue/README.md
new file mode 100644
index 0000000..e6a715b
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/README.md
@@ -0,0 +1,34 @@
+## Illuminate Queue
+
+The Laravel Queue component provides a unified API across a variety of different queue services. Queues allow you to defer the processing of a time consuming task, such as sending an e-mail, until a later time, thus drastically speeding up the web requests to your application.
+
+### Usage Instructions
+
+First, create a new Queue `Capsule` manager instance. Similar to the "Capsule" provided for the Eloquent ORM, the queue Capsule aims to make configuring the library for usage outside of the Laravel framework as easy as possible.
+
+```PHP
+use Illuminate\Queue\Capsule\Manager as Queue;
+
+$queue = new Queue;
+
+$queue->addConnection([
+    'driver' => 'beanstalkd',
+    'host' => 'localhost',
+    'queue' => 'default',
+]);
+
+// Make this Capsule instance available globally via static methods... (optional)
+$queue->setAsGlobal();
+```
+
+Once the Capsule instance has been registered. You may use it like so:
+
+```PHP
+// As an instance...
+$queue->push('SendEmail', array('message' => $message));
+
+// If setAsGlobal has been called...
+Queue::push('SendEmail', array('message' => $message));
+```
+
+For further documentation on using the queue, consult the [Laravel framework documentation](http://laravel.com/docs).

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php b/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php
new file mode 100644
index 0000000..d127888
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php
@@ -0,0 +1,319 @@
+<?php namespace Illuminate\Queue;
+
+use Illuminate\Redis\Database;
+use Illuminate\Queue\Jobs\RedisJob;
+
+class RedisQueue extends Queue implements QueueInterface {
+
+	/**
+	* The Redis database instance.
+	*
+	 * @var \Illuminate\Redis\Database
+	 */
+	protected $redis;
+
+	/**
+	 * The connection name.
+	 *
+	 * @var string
+	 */
+	protected $connection;
+
+	/**
+	 * The name of the default queue.
+	 *
+	 * @var string
+	 */
+	protected $default;
+
+	/**
+	 * The expiration time of a job.
+	 *
+	 * @var int|null
+	 */
+	protected $expire = 60;
+
+	/**
+	 * Create a new Redis queue instance.
+	 *
+	 * @param  \Illuminate\Redis\Database  $redis
+	 * @param  string  $default
+	 * @param  string  $connection
+	 * @return void
+	 */
+	public function __construct(Database $redis, $default = 'default', $connection = null)
+	{
+		$this->redis = $redis;
+		$this->default = $default;
+		$this->connection = $connection;
+	}
+
+	/**
+	 * Push a new job onto the queue.
+	 *
+	 * @param  string  $job
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @return void
+	 */
+	public function push($job, $data = '', $queue = null)
+	{
+		return $this->pushRaw($this->createPayload($job, $data), $queue);
+	}
+
+	/**
+	 * Push a raw payload onto the queue.
+	 *
+	 * @param  string  $payload
+	 * @param  string  $queue
+	 * @param  array   $options
+	 * @return mixed
+	 */
+	public function pushRaw($payload, $queue = null, array $options = array())
+	{
+		$this->getConnection()->rpush($this->getQueue($queue), $payload);
+
+		return array_get(json_decode($payload, true), 'id');
+	}
+
+	/**
+	 * Push a new job onto the queue after a delay.
+	 *
+	 * @param  \DateTime|int  $delay
+	 * @param  string  $job
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @return void
+	 */
+	public function later($delay, $job, $data = '', $queue = null)
+	{
+		$payload = $this->createPayload($job, $data);
+
+		$delay = $this->getSeconds($delay);
+
+		$this->getConnection()->zadd($this->getQueue($queue).':delayed', $this->getTime() + $delay, $payload);
+
+		return array_get(json_decode($payload, true), 'id');
+	}
+
+	/**
+	 * Release a reserved job back onto the queue.
+	 *
+	 * @param  string  $queue
+	 * @param  string  $payload
+	 * @param  int  $delay
+	 * @param  int  $attempts
+	 * @return void
+	 */
+	public function release($queue, $payload, $delay, $attempts)
+	{
+		$payload = $this->setMeta($payload, 'attempts', $attempts);
+
+		$this->getConnection()->zadd($this->getQueue($queue).':delayed', $this->getTime() + $delay, $payload);
+	}
+
+	/**
+	 * Pop the next job off of the queue.
+	 *
+	 * @param  string  $queue
+	 * @return \Illuminate\Queue\Jobs\Job|null
+	 */
+	public function pop($queue = null)
+	{
+		$original = $queue ?: $this->default;
+
+		$queue = $this->getQueue($queue);
+
+		if ( ! is_null($this->expire))
+		{
+			$this->migrateAllExpiredJobs($queue);
+		}
+
+		$job = $this->getConnection()->lpop($queue);
+
+		if ( ! is_null($job))
+		{
+			$this->getConnection()->zadd($queue.':reserved', $this->getTime() + $this->expire, $job);
+
+			return new RedisJob($this->container, $this, $job, $original);
+		}
+	}
+
+	/**
+	 * Delete a reserved job from the queue.
+	 *
+	 * @param  string  $queue
+	 * @param  string  $job
+	 * @return void
+	 */
+	public function deleteReserved($queue, $job)
+	{
+		$this->getConnection()->zrem($this->getQueue($queue).':reserved', $job);
+	}
+
+	/**
+	 * Migrate all of the waiting jobs in the queue.
+	 *
+	 * @param  string  $queue
+	 * @return void
+	 */
+	protected function migrateAllExpiredJobs($queue)
+	{
+		$this->migrateExpiredJobs($queue.':delayed', $queue);
+
+		$this->migrateExpiredJobs($queue.':reserved', $queue);
+	}
+
+	/**
+	 * Migrate the delayed jobs that are ready to the regular queue.
+	 *
+	 * @param  string  $from
+	 * @param  string  $to
+	 * @return void
+	 */
+	public function migrateExpiredJobs($from, $to)
+	{
+		$options = ['cas' => true, 'watch' => $from, 'retry' => 10];
+
+		$this->getConnection()->transaction($options, function ($transaction) use ($from, $to)
+		{
+			// First we need to get all of jobs that have expired based on the current time
+			// so that we can push them onto the main queue. After we get them we simply
+			// remove them from this "delay" queues. All of this within a transaction.
+			$jobs = $this->getExpiredJobs(
+				$transaction, $from, $time = $this->getTime()
+			);
+
+			// If we actually found any jobs, we will remove them from the old queue and we
+			// will insert them onto the new (ready) "queue". This means they will stand
+			// ready to be processed by the queue worker whenever their turn comes up.
+			if (count($jobs) > 0)
+			{
+				$this->removeExpiredJobs($transaction, $from, $time);
+
+				$this->pushExpiredJobsOntoNewQueue($transaction, $to, $jobs);
+			}
+		});
+	}
+
+	/**
+	 * Get the expired jobs from a given queue.
+	 *
+	 * @param  \Predis\Transaction\MultiExec  $transaction
+	 * @param  string  $from
+	 * @param  int  $time
+	 * @return array
+	 */
+	protected function getExpiredJobs($transaction, $from, $time)
+	{
+		return $transaction->zrangebyscore($from, '-inf', $time);
+	}
+
+	/**
+	 * Remove the expired jobs from a given queue.
+	 *
+	 * @param  \Predis\Transaction\MultiExec  $transaction
+	 * @param  string  $from
+	 * @param  int  $time
+	 * @return void
+	 */
+	protected function removeExpiredJobs($transaction, $from, $time)
+	{
+		$transaction->multi();
+
+		$transaction->zremrangebyscore($from, '-inf', $time);
+	}
+
+	/**
+	 * Push all of the given jobs onto another queue.
+	 *
+	 * @param  \Predis\Transaction\MultiExec  $transaction
+	 * @param  string  $to
+	 * @param  array  $jobs
+	 * @return void
+	 */
+	protected function pushExpiredJobsOntoNewQueue($transaction, $to, $jobs)
+	{
+		call_user_func_array([$transaction, 'rpush'], array_merge([$to], $jobs));
+	}
+
+	/**
+	 * Create a payload string from the given job and data.
+	 *
+	 * @param  string  $job
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @return string
+	 */
+	protected function createPayload($job, $data = '', $queue = null)
+	{
+		$payload = parent::createPayload($job, $data);
+
+		$payload = $this->setMeta($payload, 'id', $this->getRandomId());
+
+		return $this->setMeta($payload, 'attempts', 1);
+	}
+
+	/**
+	 * Get a random ID string.
+	 *
+	 * @return string
+	 */
+	protected function getRandomId()
+	{
+		return str_random(32);
+	}
+
+	/**
+	 * Get the queue or return the default.
+	 *
+	 * @param  string|null  $queue
+	 * @return string
+	 */
+	protected function getQueue($queue)
+	{
+		return 'queues:'.($queue ?: $this->default);
+	}
+
+	/**
+	 * Get the connection for the queue.
+	 *
+	 * @return \Predis\ClientInterface
+	 */
+	protected function getConnection()
+	{
+		return $this->redis->connection($this->connection);
+	}
+
+	/**
+	 * Get the underlying Redis instance.
+	 *
+	 * @return \Illuminate\Redis\Database
+	 */
+	public function getRedis()
+	{
+		return $this->redis;
+	}
+
+	/**
+	 * Get the expiration time in seconds.
+	 *
+	 * @return int|null
+	 */
+	public function getExpire()
+	{
+		return $this->expire;
+	}
+
+	/**
+	 * Set the expiration time in seconds.
+	 *
+	 * @param  int|null  $seconds
+	 * @return void
+	 */
+	public function setExpire($seconds)
+	{
+		$this->expire = $seconds;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/SqsQueue.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/SqsQueue.php b/vendor/laravel/framework/src/Illuminate/Queue/SqsQueue.php
new file mode 100755
index 0000000..e78fb60
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/SqsQueue.php
@@ -0,0 +1,126 @@
+<?php namespace Illuminate\Queue;
+
+use Aws\Sqs\SqsClient;
+use Illuminate\Queue\Jobs\SqsJob;
+
+class SqsQueue extends Queue implements QueueInterface {
+
+	/**
+	 * The Amazon SQS instance.
+	 *
+	 * @var \Aws\Sqs\SqsClient
+	 */
+	protected $sqs;
+
+	/**
+	 * The name of the default tube.
+	 *
+	 * @var string
+	 */
+	protected $default;
+
+	/**
+	 * Create a new Amazon SQS queue instance.
+	 *
+	 * @param  \Aws\Sqs\SqsClient  $sqs
+	 * @param  string  $default
+	 * @return void
+	 */
+	public function __construct(SqsClient $sqs, $default)
+	{
+		$this->sqs = $sqs;
+		$this->default = $default;
+	}
+
+	/**
+	 * Push a new job onto the queue.
+	 *
+	 * @param  string  $job
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @return mixed
+	 */
+	public function push($job, $data = '', $queue = null)
+	{
+		return $this->pushRaw($this->createPayload($job, $data), $queue);
+	}
+
+	/**
+	 * Push a raw payload onto the queue.
+	 *
+	 * @param  string  $payload
+	 * @param  string  $queue
+	 * @param  array   $options
+	 * @return mixed
+	 */
+	public function pushRaw($payload, $queue = null, array $options = array())
+	{
+		$response = $this->sqs->sendMessage(array('QueueUrl' => $this->getQueue($queue), 'MessageBody' => $payload));
+
+		return $response->get('MessageId');
+	}
+
+	/**
+	 * Push a new job onto the queue after a delay.
+	 *
+	 * @param  \DateTime|int  $delay
+	 * @param  string  $job
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @return mixed
+	 */
+	public function later($delay, $job, $data = '', $queue = null)
+	{
+		$payload = $this->createPayload($job, $data);
+
+		$delay = $this->getSeconds($delay);
+
+		return $this->sqs->sendMessage(array(
+
+			'QueueUrl' => $this->getQueue($queue), 'MessageBody' => $payload, 'DelaySeconds' => $delay,
+
+		))->get('MessageId');
+	}
+
+	/**
+	 * Pop the next job off of the queue.
+	 *
+	 * @param  string  $queue
+	 * @return \Illuminate\Queue\Jobs\Job|null
+	 */
+	public function pop($queue = null)
+	{
+		$queue = $this->getQueue($queue);
+
+		$response = $this->sqs->receiveMessage(
+			array('QueueUrl' => $queue, 'AttributeNames' => array('ApproximateReceiveCount'))
+		);
+
+		if (count($response['Messages']) > 0)
+		{
+			return new SqsJob($this->container, $this->sqs, $queue, $response['Messages'][0]);
+		}
+	}
+
+	/**
+	 * Get the queue or return the default.
+	 *
+	 * @param  string|null  $queue
+	 * @return string
+	 */
+	public function getQueue($queue)
+	{
+		return $queue ?: $this->default;
+	}
+
+	/**
+	 * Get the underlying SQS instance.
+	 *
+	 * @return \Aws\Sqs\SqsClient
+	 */
+	public function getSqs()
+	{
+		return $this->sqs;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/SyncQueue.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/SyncQueue.php b/vendor/laravel/framework/src/Illuminate/Queue/SyncQueue.php
new file mode 100755
index 0000000..8da5bab
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/SyncQueue.php
@@ -0,0 +1,67 @@
+<?php namespace Illuminate\Queue;
+
+class SyncQueue extends Queue implements QueueInterface {
+
+	/**
+	 * Push a new job onto the queue.
+	 *
+	 * @param  string  $job
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @return mixed
+	 */
+	public function push($job, $data = '', $queue = null)
+	{
+		$this->resolveJob($job, json_encode($data))->fire();
+
+		return 0;
+	}
+
+	/**
+	 * Push a raw payload onto the queue.
+	 *
+	 * @param  string  $payload
+	 * @param  string  $queue
+	 * @param  array   $options
+	 * @return mixed
+	 */
+	public function pushRaw($payload, $queue = null, array $options = array())
+	{
+		//
+	}
+
+	/**
+	 * Push a new job onto the queue after a delay.
+	 *
+	 * @param  \DateTime|int  $delay
+	 * @param  string  $job
+	 * @param  mixed   $data
+	 * @param  string  $queue
+	 * @return mixed
+	 */
+	public function later($delay, $job, $data = '', $queue = null)
+	{
+		return $this->push($job, $data, $queue);
+	}
+
+	/**
+	 * Pop the next job off of the queue.
+	 *
+	 * @param  string  $queue
+	 * @return \Illuminate\Queue\Jobs\Job|null
+	 */
+	public function pop($queue = null) {}
+
+	/**
+	 * Resolve a Sync job instance.
+	 *
+	 * @param  string  $job
+	 * @param  string  $data
+	 * @return \Illuminate\Queue\Jobs\SyncJob
+	 */
+	protected function resolveJob($job, $data)
+	{
+		return new Jobs\SyncJob($this->container, $job, $data);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/Worker.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Worker.php b/vendor/laravel/framework/src/Illuminate/Queue/Worker.php
new file mode 100755
index 0000000..239908a
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/Worker.php
@@ -0,0 +1,362 @@
+<?php namespace Illuminate\Queue;
+
+use Illuminate\Queue\Jobs\Job;
+use Illuminate\Events\Dispatcher;
+use Illuminate\Cache\Repository as CacheRepository;
+use Illuminate\Queue\Failed\FailedJobProviderInterface;
+
+class Worker {
+
+	/**
+	 * The queue manager instance.
+	 *
+	 * @var \Illuminate\Queue\QueueManager
+	 */
+	protected $manager;
+
+	/**
+	 * The failed job provider implementation.
+	 *
+	 * @var \Illuminate\Queue\Failed\FailedJobProviderInterface
+	 */
+	protected $failer;
+
+	/**
+	 * The event dispatcher instance.
+	 *
+	 * @var \Illuminate\Events\Dispatcher
+	 */
+	protected $events;
+
+	/**
+	 * The cache repository implementation.
+	 *
+	 * @var \Illuminate\Cache\Repository
+	 */
+	protected $cache;
+
+	/**
+	 * The exception handler instance.
+	 *
+	 * @var \Illuminate\Exception\Handler
+	 */
+	protected $exceptions;
+
+	/**
+	 * Create a new queue worker.
+	 *
+	 * @param  \Illuminate\Queue\QueueManager  $manager
+	 * @param  \Illuminate\Queue\Failed\FailedJobProviderInterface  $failer
+	 * @param  \Illuminate\Events\Dispatcher  $events
+	 * @return void
+	 */
+	public function __construct(QueueManager $manager,
+                                FailedJobProviderInterface $failer = null,
+                                Dispatcher $events = null)
+	{
+		$this->failer = $failer;
+		$this->events = $events;
+		$this->manager = $manager;
+	}
+
+	/**
+	 * Listen to the given queue in a loop.
+	 *
+	 * @param  string  $connectionName
+	 * @param  string  $queue
+	 * @param  int     $delay
+	 * @param  int     $memory
+	 * @param  int     $sleep
+	 * @param  int     $maxTries
+	 * @return array
+	 */
+	public function daemon($connectionName, $queue = null, $delay = 0, $memory = 128, $sleep = 3, $maxTries = 0)
+	{
+		$lastRestart = $this->getTimestampOfLastQueueRestart();
+
+		while (true)
+		{
+			if ($this->daemonShouldRun())
+			{
+				$this->runNextJobForDaemon(
+					$connectionName, $queue, $delay, $sleep, $maxTries
+				);
+			}
+			else
+			{
+				$this->sleep($sleep);
+			}
+
+			if ($this->memoryExceeded($memory) || $this->queueShouldRestart($lastRestart))
+			{
+				$this->stop();
+			}
+		}
+	}
+
+	/**
+	 * Run the next job for the daemon worker.
+	 *
+	 * @param  string  $connectionName
+	 * @param  string  $queue
+	 * @param  int  $delay
+	 * @param  int  $sleep
+	 * @param  int  $maxTries
+	 * @return void
+	 */
+	protected function runNextJobForDaemon($connectionName, $queue, $delay, $sleep, $maxTries)
+	{
+		try
+		{
+			$this->pop($connectionName, $queue, $delay, $sleep, $maxTries);
+		}
+		catch (\Exception $e)
+		{
+			if ($this->exceptions) $this->exceptions->handleException($e);
+		}
+	}
+
+	/**
+	 * Determine if the daemon should process on this iteration.
+	 *
+	 * @return bool
+	 */
+	protected function daemonShouldRun()
+	{
+		if ($this->manager->isDownForMaintenance())
+		{
+			return false;
+		}
+
+		return $this->events->until('illuminate.queue.looping') !== false;
+	}
+
+	/**
+	 * Listen to the given queue.
+	 *
+	 * @param  string  $connectionName
+	 * @param  string  $queue
+	 * @param  int     $delay
+	 * @param  int     $sleep
+	 * @param  int     $maxTries
+	 * @return array
+	 */
+	public function pop($connectionName, $queue = null, $delay = 0, $sleep = 3, $maxTries = 0)
+	{
+		$connection = $this->manager->connection($connectionName);
+
+		$job = $this->getNextJob($connection, $queue);
+
+		// If we're able to pull a job off of the stack, we will process it and
+		// then immediately return back out. If there is no job on the queue
+		// we will "sleep" the worker for the specified number of seconds.
+		if ( ! is_null($job))
+		{
+			return $this->process(
+				$this->manager->getName($connectionName), $job, $maxTries, $delay
+			);
+		}
+
+		$this->sleep($sleep);
+
+		return ['job' => null, 'failed' => false];
+	}
+
+	/**
+	 * Get the next job from the queue connection.
+	 *
+	 * @param  \Illuminate\Queue\Queue  $connection
+	 * @param  string  $queue
+	 * @return \Illuminate\Queue\Jobs\Job|null
+	 */
+	protected function getNextJob($connection, $queue)
+	{
+		if (is_null($queue)) return $connection->pop();
+
+		foreach (explode(',', $queue) as $queue)
+		{
+			if ( ! is_null($job = $connection->pop($queue))) return $job;
+		}
+	}
+
+	/**
+	 * Process a given job from the queue.
+	 *
+	 * @param  string  $connection
+	 * @param  \Illuminate\Queue\Jobs\Job  $job
+	 * @param  int  $maxTries
+	 * @param  int  $delay
+	 * @return void
+	 *
+	 * @throws \Exception
+	 */
+	public function process($connection, Job $job, $maxTries = 0, $delay = 0)
+	{
+		if ($maxTries > 0 && $job->attempts() > $maxTries)
+		{
+			return $this->logFailedJob($connection, $job);
+		}
+
+		try
+		{
+			// First we will fire off the job. Once it is done we will see if it will
+			// be auto-deleted after processing and if so we will go ahead and run
+			// the delete method on the job. Otherwise we will just keep moving.
+			$job->fire();
+
+			if ($job->autoDelete()) $job->delete();
+
+			return ['job' => $job, 'failed' => false];
+		}
+
+		catch (\Exception $e)
+		{
+			// If we catch an exception, we will attempt to release the job back onto
+			// the queue so it is not lost. This will let is be retried at a later
+			// time by another listener (or the same one). We will do that here.
+			if ( ! $job->isDeleted()) $job->release($delay);
+
+			throw $e;
+		}
+	}
+
+	/**
+	 * Log a failed job into storage.
+	 *
+	 * @param  string  $connection
+	 * @param  \Illuminate\Queue\Jobs\Job  $job
+	 * @return array
+	 */
+	protected function logFailedJob($connection, Job $job)
+	{
+		if ($this->failer)
+		{
+			$this->failer->log($connection, $job->getQueue(), $job->getRawBody());
+
+			$job->delete();
+
+			$this->raiseFailedJobEvent($connection, $job);
+		}
+
+		return ['job' => $job, 'failed' => true];
+	}
+
+	/**
+	 * Raise the failed queue job event.
+	 *
+	 * @param  string  $connection
+	 * @param  \Illuminate\Queue\Jobs\Job  $job
+	 * @return void
+	 */
+	protected function raiseFailedJobEvent($connection, Job $job)
+	{
+		if ($this->events)
+		{
+			$data = json_decode($job->getRawBody(), true);
+
+			$this->events->fire('illuminate.queue.failed', array($connection, $job, $data));
+		}
+	}
+
+	/**
+	 * Determine if the memory limit has been exceeded.
+	 *
+	 * @param  int   $memoryLimit
+	 * @return bool
+	 */
+	public function memoryExceeded($memoryLimit)
+	{
+		return (memory_get_usage() / 1024 / 1024) >= $memoryLimit;
+	}
+
+	/**
+	 * Stop listening and bail out of the script.
+	 *
+	 * @return void
+	 */
+	public function stop()
+	{
+		$this->events->fire('illuminate.queue.stopping');
+
+		die;
+	}
+
+	/**
+	 * Sleep the script for a given number of seconds.
+	 *
+	 * @param  int   $seconds
+	 * @return void
+	 */
+	public function sleep($seconds)
+	{
+		sleep($seconds);
+	}
+
+	/**
+	 * Get the last queue restart timestamp, or null.
+	 *
+	 * @return int|null
+	 */
+	protected function getTimestampOfLastQueueRestart()
+	{
+		if ($this->cache)
+		{
+			return $this->cache->get('illuminate:queue:restart');
+		}
+	}
+
+	/**
+	 * Determine if the queue worker should restart.
+	 *
+	 * @param  int|null  $lastRestart
+	 * @return bool
+	 */
+	protected function queueShouldRestart($lastRestart)
+	{
+		return $this->getTimestampOfLastQueueRestart() != $lastRestart;
+	}
+
+	/**
+	 * Set the exception handler to use in Daemon mode.
+	 *
+	 * @param  \Illuminate\Exception\Handler  $handler
+	 * @return void
+	 */
+	public function setDaemonExceptionHandler($handler)
+	{
+		$this->exceptions = $handler;
+	}
+
+	/**
+	 * Set the cache repository implementation.
+	 *
+	 * @param  \Illuminate\Cache\Repository  $cache
+	 * @return void
+	 */
+	public function setCache(CacheRepository $cache)
+	{
+		$this->cache = $cache;
+	}
+
+	/**
+	 * Get the queue manager instance.
+	 *
+	 * @return \Illuminate\Queue\QueueManager
+	 */
+	public function getManager()
+	{
+		return $this->manager;
+	}
+
+	/**
+	 * Set the queue manager instance.
+	 *
+	 * @param  \Illuminate\Queue\QueueManager  $manager
+	 * @return void
+	 */
+	public function setManager(QueueManager $manager)
+	{
+		$this->manager = $manager;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Queue/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Queue/composer.json b/vendor/laravel/framework/src/Illuminate/Queue/composer.json
new file mode 100755
index 0000000..045a0a3
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Queue/composer.json
@@ -0,0 +1,44 @@
+{
+    "name": "illuminate/queue",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/console": "4.2.*",
+        "illuminate/container": "4.2.*",
+        "illuminate/http": "4.2.*",
+        "illuminate/support": "4.2.*",
+        "symfony/process": "2.5.*",
+        "nesbot/carbon": "~1.0"
+    },
+    "require-dev": {
+        "illuminate/cache": "4.2.*",
+        "illuminate/events": "4.2.*",
+        "aws/aws-sdk-php": "~2.6",
+        "iron-io/iron_mq": "~1.5",
+        "pda/pheanstalk": "~2.1"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Queue": ""
+        },
+        "classmap": [
+            "IlluminateQueueClosure.php"
+        ]
+    },
+    "target-dir": "Illuminate/Queue",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "suggest": {
+        "illuminate/redis": "Allows use of the Redis queue driver."
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Redis/Database.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Database.php b/vendor/laravel/framework/src/Illuminate/Redis/Database.php
new file mode 100755
index 0000000..1d10caa
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Redis/Database.php
@@ -0,0 +1,98 @@
+<?php namespace Illuminate\Redis;
+
+use Predis\Client;
+
+class Database {
+
+	/**
+	 * The host address of the database.
+	 *
+	 * @var array
+	 */
+	protected $clients;
+
+	/**
+	 * Create a new Redis connection instance.
+	 *
+	 * @param  array  $servers
+	 * @return void
+	 */
+	public function __construct(array $servers = array())
+	{
+		if (isset($servers['cluster']) && $servers['cluster'])
+		{
+			$this->clients = $this->createAggregateClient($servers);
+		}
+		else
+		{
+			$this->clients = $this->createSingleClients($servers);
+		}
+	}
+
+	/**
+	 * Create a new aggregate client supporting sharding.
+	 *
+	 * @param  array  $servers
+	 * @return array
+	 */
+	protected function createAggregateClient(array $servers)
+	{
+		$servers = array_except($servers, array('cluster'));
+
+		return array('default' => new Client(array_values($servers)));
+	}
+
+	/**
+	 * Create an array of single connection clients.
+	 *
+	 * @param  array  $servers
+	 * @return array
+	 */
+	protected function createSingleClients(array $servers)
+	{
+		$clients = array();
+
+		foreach ($servers as $key => $server)
+		{
+			$clients[$key] = new Client($server);
+		}
+
+		return $clients;
+	}
+
+	/**
+	 * Get a specific Redis connection instance.
+	 *
+	 * @param  string  $name
+	 * @return \Predis\ClientInterface
+	 */
+	public function connection($name = 'default')
+	{
+		return $this->clients[$name ?: 'default'];
+	}
+
+	/**
+	 * Run a command against the Redis database.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 */
+	public function command($method, array $parameters = array())
+	{
+		return call_user_func_array(array($this->clients['default'], $method), $parameters);
+	}
+
+	/**
+	 * Dynamically make a Redis command.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 */
+	public function __call($method, $parameters)
+	{
+		return $this->command($method, $parameters);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Redis/RedisServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Redis/RedisServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Redis/RedisServiceProvider.php
new file mode 100755
index 0000000..947d365
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Redis/RedisServiceProvider.php
@@ -0,0 +1,37 @@
+<?php namespace Illuminate\Redis;
+
+use Illuminate\Support\ServiceProvider;
+
+class RedisServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('redis', function($app)
+		{
+			return new Database($app['config']['database.redis']);
+		});
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('redis');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Redis/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Redis/composer.json b/vendor/laravel/framework/src/Illuminate/Redis/composer.json
new file mode 100755
index 0000000..4cbef76
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Redis/composer.json
@@ -0,0 +1,27 @@
+{
+    "name": "illuminate/redis",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/support": "4.2.*",
+        "predis/predis": "0.8.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Redis": ""
+        }
+    },
+    "target-dir": "Illuminate/Redis",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Remote/Connection.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Remote/Connection.php b/vendor/laravel/framework/src/Illuminate/Remote/Connection.php
new file mode 100644
index 0000000..18042da
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Remote/Connection.php
@@ -0,0 +1,262 @@
+<?php namespace Illuminate\Remote;
+
+use Closure;
+use Illuminate\Filesystem\Filesystem;
+use Symfony\Component\Console\Output\NullOutput;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class Connection implements ConnectionInterface {
+
+	/**
+	 * The SSH gateway implementation.
+	 *
+	 * @var \Illuminate\Remote\GatewayInterface
+	 */
+	protected $gateway;
+
+	/**
+	 * The name of the connection.
+	 *
+	 * @var string
+	 */
+	protected $name;
+
+	/**
+	 * The host name of the server.
+	 *
+	 * @var string
+	 */
+	protected $host;
+
+	/**
+	 * The username for the connection.
+	 *
+	 * @var string
+	 */
+	protected $username;
+
+	/**
+	 * All of the defined tasks.
+	 *
+	 * @var array
+	 */
+	protected $tasks = array();
+
+	/**
+	 * The output implementation for the connection.
+	 *
+	 * @var \Symfony\Component\Console\Output\OutputInterface
+	 */
+	protected $output;
+
+	/**
+	 * Create a new SSH connection instance.
+	 *
+	 * @param  string  $name
+	 * @param  string  $host
+	 * @param  string  $username
+	 * @param  array   $auth
+	 * @param  \Illuminate\Remote\GatewayInterface
+	 * @param
+	 */
+	public function __construct($name, $host, $username, array $auth, GatewayInterface $gateway = null)
+	{
+		$this->name = $name;
+		$this->host = $host;
+		$this->username = $username;
+		$this->gateway = $gateway ?: new SecLibGateway($host, $auth, new Filesystem);
+	}
+
+	/**
+	 * Define a set of commands as a task.
+	 *
+	 * @param  string  $task
+	 * @param  string|array  $commands
+	 * @return void
+	 */
+	public function define($task, $commands)
+	{
+		$this->tasks[$task] = $commands;
+	}
+
+	/**
+	 * Run a task against the connection.
+	 *
+	 * @param  string  $task
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function task($task, Closure $callback = null)
+	{
+		if (isset($this->tasks[$task]))
+		{
+			return $this->run($this->tasks[$task], $callback);
+		}
+	}
+
+	/**
+	 * Run a set of commands against the connection.
+	 *
+	 * @param  string|array  $commands
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function run($commands, Closure $callback = null)
+	{
+		// First, we will initialize the SSH gateway, and then format the commands so
+		// they can be run. Once we have the commands formatted and the server is
+		// ready to go we will just fire off these commands against the server.
+		$gateway = $this->getGateway();
+
+		$callback = $this->getCallback($callback);
+
+		$gateway->run($this->formatCommands($commands));
+
+		// After running the commands against the server, we will continue to ask for
+		// the next line of output that is available, and write it them out using
+		// our callback. Once we hit the end of output, we'll bail out of here.
+		while (true)
+		{
+			if (is_null($line = $gateway->nextLine())) break;
+
+			call_user_func($callback, $line, $this);
+		}
+	}
+
+	/**
+	 * Download the contents of a remote file.
+	 *
+	 * @param  string  $remote
+	 * @param  string  $local
+	 * @return void
+	 */
+	public function get($remote, $local)
+	{
+		$this->getGateway()->get($remote, $local);
+	}
+
+	/**
+	 * Get the contents of a remote file.
+	 *
+	 * @param  string  $remote
+	 * @return string
+	 */
+	public function getString($remote)
+	{
+		return $this->getGateway()->getString($remote);
+	}
+
+	/**
+	 * Upload a local file to the server.
+	 *
+	 * @param  string  $local
+	 * @param  string  $remote
+	 * @return void
+	 */
+	public function put($local, $remote)
+	{
+		$this->getGateway()->put($local, $remote);
+	}
+
+	/**
+	 * Upload a string to to the given file on the server.
+	 *
+	 * @param  string  $remote
+	 * @param  string  $contents
+	 * @return void
+	 */
+	public function putString($remote, $contents)
+	{
+		$this->getGateway()->putString($remote, $contents);
+	}
+
+	/**
+	 * Display the given line using the default output.
+	 *
+	 * @param  string  $line
+	 * @return void
+	 */
+	public function display($line)
+	{
+		$server = $this->username.'@'.$this->host;
+
+		$lead = '<comment>['.$server.']</comment> <info>('.$this->name.')</info>';
+
+		$this->getOutput()->writeln($lead.' '.$line);
+	}
+
+	/**
+	 * Format the given command set.
+	 *
+	 * @param  string|array  $commands
+	 * @return string
+	 */
+	protected function formatCommands($commands)
+	{
+		return is_array($commands) ? implode(' && ', $commands) : $commands;
+	}
+
+	/**
+	 * Get the display callback for the connection.
+	 *
+	 * @param  \Closure|null  $callback
+	 * @return \Closure
+	 */
+	protected function getCallback($callback)
+	{
+		if ( ! is_null($callback)) return $callback;
+
+		return function($line) { $this->display($line); };
+	}
+
+	/**
+	 * Get the exit status of the last command.
+	 *
+	 * @return int|bool
+	 */
+	public function status()
+	{
+		return $this->gateway->status();
+	}
+
+	/**
+	 * Get the gateway implementation.
+	 *
+	 * @return \Illuminate\Remote\GatewayInterface
+	 *
+	 * @throws \RuntimeException
+	 */
+	public function getGateway()
+	{
+		if ( ! $this->gateway->connected() && ! $this->gateway->connect($this->username))
+		{
+			throw new \RuntimeException("Unable to connect to remote server.");
+		}
+
+		return $this->gateway;
+	}
+
+	/**
+	 * Get the output implementation for the connection.
+	 *
+	 * @return \Symfony\Component\Console\Output\OutputInterface
+	 */
+	public function getOutput()
+	{
+		if (is_null($this->output)) $this->output = new NullOutput;
+
+		return $this->output;
+	}
+
+	/**
+	 * Set the output implementation.
+	 *
+	 * @param  \Symfony\Component\Console\Output\OutputInterface  $output
+	 * @return void
+	 */
+	public function setOutput(OutputInterface $output)
+	{
+		$this->output = $output;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Remote/ConnectionInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Remote/ConnectionInterface.php b/vendor/laravel/framework/src/Illuminate/Remote/ConnectionInterface.php
new file mode 100644
index 0000000..0b46ab3
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Remote/ConnectionInterface.php
@@ -0,0 +1,52 @@
+<?php namespace Illuminate\Remote;
+
+use Closure;
+
+interface ConnectionInterface {
+
+	/**
+	 * Define a set of commands as a task.
+	 *
+	 * @param  string  $task
+	 * @param  string|array  $commands
+	 * @return void
+	 */
+	public function define($task, $commands);
+
+	/**
+	 * Run a task against the connection.
+	 *
+	 * @param  string  $task
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function task($task, Closure $callback = null);
+
+	/**
+	 * Run a set of commands against the connection.
+	 *
+	 * @param  string|array  $commands
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function run($commands, Closure $callback = null);
+
+	/**
+	 * Upload a local file to the server.
+	 *
+	 * @param  string  $local
+	 * @param  string  $remote
+	 * @return void
+	 */
+	public function put($local, $remote);
+
+	/**
+	 * Upload a string to to the given file on the server.
+	 *
+	 * @param  string  $remote
+	 * @param  string  $contents
+	 * @return void
+	 */
+	public function putString($remote, $contents);
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Remote/GatewayInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Remote/GatewayInterface.php b/vendor/laravel/framework/src/Illuminate/Remote/GatewayInterface.php
new file mode 100644
index 0000000..38094c3
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Remote/GatewayInterface.php
@@ -0,0 +1,60 @@
+<?php namespace Illuminate\Remote;
+
+interface GatewayInterface {
+
+	/**
+	 * Connect to the SSH server.
+	 *
+	 * @param  string  $username
+	 * @return void
+	 */
+	public function connect($username);
+
+	/**
+	 * Determine if the gateway is connected.
+	 *
+	 * @return bool
+	 */
+	public function connected();
+
+	/**
+	 * Run a command against the server (non-blocking).
+	 *
+	 * @param  string  $command
+	 * @return void
+	 */
+	public function run($command);
+
+	/**
+	 * Upload a local file to the server.
+	 *
+	 * @param  string  $local
+	 * @param  string  $remote
+	 * @return void
+	 */
+	public function put($local, $remote);
+
+	/**
+	 * Upload a string to to the given file on the server.
+	 *
+	 * @param  string  $remote
+	 * @param  string  $contents
+	 * @return void
+	 */
+	public function putString($remote, $contents);
+
+	/**
+	 * Get the next line of output from the server.
+	 *
+	 * @return string|null
+	 */
+	public function nextLine();
+
+	/**
+	 * Get the exit status of the last command.
+	 *
+	 * @return int|bool
+	 */
+	public function status();
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Remote/MultiConnection.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Remote/MultiConnection.php b/vendor/laravel/framework/src/Illuminate/Remote/MultiConnection.php
new file mode 100644
index 0000000..be026dd
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Remote/MultiConnection.php
@@ -0,0 +1,100 @@
+<?php namespace Illuminate\Remote;
+
+use Closure;
+
+class MultiConnection implements ConnectionInterface {
+
+	/**
+	 * All of the active server connections.
+	 *
+	 * @var array
+	 */
+	protected $connections;
+
+	/**
+	 * The array of connections.
+	 *
+	 * @param  array  $connections
+	 * @return void
+	 */
+	public function __construct(array $connections)
+	{
+		$this->connections = $connections;
+	}
+
+	/**
+	 * Define a set of commands as a task.
+	 *
+	 * @param  string  $task
+	 * @param  string|array  $commands
+	 * @return void
+	 */
+	public function define($task, $commands)
+	{
+		foreach ($this->connections as $connection)
+		{
+			$connection->define($task, $commands);
+		}
+	}
+
+	/**
+	 * Run a task against the connection.
+	 *
+	 * @param  string  $task
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function task($task, Closure $callback = null)
+	{
+		foreach ($this->connections as $connection)
+		{
+			$connection->task($task, $callback);
+		}
+	}
+
+	/**
+	 * Run a set of commands against the connection.
+	 *
+	 * @param  string|array  $commands
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function run($commands, Closure $callback = null)
+	{
+		foreach ($this->connections as $connection)
+		{
+			$connection->run($commands, $callback);
+		}
+	}
+
+	/**
+	 * Upload a local file to the server.
+	 *
+	 * @param  string  $local
+	 * @param  string  $remote
+	 * @return void
+	 */
+	public function put($local, $remote)
+	{
+		foreach ($this->connections as $connection)
+		{
+			$connection->put($local, $remote);
+		}
+	}
+
+	/**
+	 * Upload a string to to the given file on the server.
+	 *
+	 * @param  string  $remote
+	 * @param  string  $contents
+	 * @return void
+	 */
+	public function putString($remote, $contents)
+	{
+		foreach ($this->connections as $connection)
+		{
+			$connection->putString($remote, $contents);
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Remote/RemoteManager.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Remote/RemoteManager.php b/vendor/laravel/framework/src/Illuminate/Remote/RemoteManager.php
new file mode 100644
index 0000000..0ad96ce
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Remote/RemoteManager.php
@@ -0,0 +1,199 @@
+<?php namespace Illuminate\Remote;
+
+use Symfony\Component\Console\Output\NullOutput;
+use Symfony\Component\Console\Output\ConsoleOutput;
+
+class RemoteManager {
+
+	/**
+	 * The application instance.
+	 *
+	 * @var \Illuminate\Foundation\Application
+	 */
+	protected $app;
+
+	/**
+	 * Create a new remote manager instance.
+	 *
+	 * @param  \Illuminate\Foundation\Application  $app
+	 * @return void
+	 */
+	public function __construct($app)
+	{
+		$this->app = $app;
+	}
+
+	/**
+	 * Get a remote connection instance.
+	 *
+	 * @param  string|array|mixed  $name
+	 * @return \Illuminate\Remote\ConnectionInterface
+	 */
+	public function into($name)
+	{
+		if (is_string($name) || is_array($name))
+		{
+			return $this->connection($name);
+		}
+
+		return $this->connection(func_get_args());
+	}
+
+	/**
+	 * Get a remote connection instance.
+	 *
+	 * @param  string|array  $name
+	 * @return \Illuminate\Remote\ConnectionInterface
+	 */
+	public function connection($name = null)
+	{
+		if (is_array($name)) return $this->multiple($name);
+
+		return $this->resolve($name ?: $this->getDefaultConnection());
+	}
+
+	/**
+	 * Get a connection group instance by name.
+	 *
+	 * @param  string  $name
+	 * @return \Illuminate\Remote\ConnectionInterface
+	 */
+	public function group($name)
+	{
+		return $this->connection($this->app['config']['remote.groups.'.$name]);
+	}
+
+	/**
+	 * Resolve a multiple connection instance.
+	 *
+	 * @param  array  $names
+	 * @return \Illuminate\Remote\MultiConnection
+	 */
+	public function multiple(array $names)
+	{
+		return new MultiConnection(array_map(array($this, 'resolve'), $names));
+	}
+
+	/**
+	 * Resolve a remote connection instance.
+	 *
+	 * @param  string  $name
+	 * @return \Illuminate\Remote\Connection
+	 */
+	public function resolve($name)
+	{
+		return $this->makeConnection($name, $this->getConfig($name));
+	}
+
+	/**
+	 * Make a new connection instance.
+	 *
+	 * @param  string  $name
+	 * @param  array   $config
+	 * @return \Illuminate\Remote\Connection
+	 */
+	protected function makeConnection($name, array $config)
+	{
+		$this->setOutput($connection = new Connection(
+
+			$name, $config['host'], $config['username'], $this->getAuth($config)
+
+		));
+
+		return $connection;
+	}
+
+	/**
+	 * Set the output implementation on the connection.
+	 *
+	 * @param  \Illuminate\Remote\Connection  $connection
+	 * @return void
+	 */
+	protected function setOutput(Connection $connection)
+	{
+		$output = php_sapi_name() == 'cli' ? new ConsoleOutput : new NullOutput;
+
+		$connection->setOutput($output);
+	}
+
+	/**
+	 * Format the appropriate authentication array payload.
+	 *
+	 * @param  array  $config
+	 * @return array
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	protected function getAuth(array $config)
+	{
+		if (isset($config['agent']) && $config['agent'] === true)
+		{
+			return array('agent' => true);
+		}
+		elseif (isset($config['key']) && trim($config['key']) != '')
+		{
+			return array('key' => $config['key'], 'keyphrase' => $config['keyphrase']);
+		}
+		elseif (isset($config['keytext']) && trim($config['keytext']) != '')
+		{
+			return array('keytext' => $config['keytext']);
+		}
+		elseif (isset($config['password']))
+		{
+			return array('password' => $config['password']);
+		}
+
+		throw new \InvalidArgumentException('Password / key is required.');
+	}
+
+	/**
+	 * Get the configuration for a remote server.
+	 *
+	 * @param  string  $name
+	 * @return array
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	protected function getConfig($name)
+	{
+		$config = $this->app['config']['remote.connections.'.$name];
+
+		if ( ! is_null($config)) return $config;
+
+		throw new \InvalidArgumentException("Remote connection [$name] not defined.");
+	}
+
+	/**
+	 * Get the default connection name.
+	 *
+	 * @return string
+	 */
+	public function getDefaultConnection()
+	{
+		return $this->app['config']['remote.default'];
+	}
+
+	/**
+	 * Set the default connection name.
+	 *
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function setDefaultConnection($name)
+	{
+		$this->app['config']['remote.default'] = $name;
+	}
+
+	/**
+	 * Dynamically pass methods to the default connection.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 */
+	public function __call($method, $parameters)
+	{
+		return call_user_func_array(array($this->connection(), $method), $parameters);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Remote/RemoteServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Remote/RemoteServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Remote/RemoteServiceProvider.php
new file mode 100644
index 0000000..0bceea9
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Remote/RemoteServiceProvider.php
@@ -0,0 +1,37 @@
+<?php namespace Illuminate\Remote;
+
+use Illuminate\Support\ServiceProvider;
+
+class RemoteServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('remote', function($app)
+		{
+			return new RemoteManager($app);
+		});
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('remote');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Remote/SecLibGateway.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Remote/SecLibGateway.php b/vendor/laravel/framework/src/Illuminate/Remote/SecLibGateway.php
new file mode 100644
index 0000000..c473019
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Remote/SecLibGateway.php
@@ -0,0 +1,321 @@
+<?php namespace Illuminate\Remote;
+
+use Illuminate\Filesystem\Filesystem;
+use Net_SFTP, Crypt_RSA, System_SSH_Agent;
+
+class SecLibGateway implements GatewayInterface {
+
+	/**
+	 * The host name of the server.
+	 *
+	 * @var string
+	 */
+	protected $host;
+
+	/**
+	 * The SSH port on the server.
+	 *
+	 * @var int
+	 */
+	protected $port = 22;
+
+	/**
+	 * The authentication credential set.
+	 *
+	 * @var array
+	 */
+	protected $auth;
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * The SecLib connection instance.
+	 *
+	 * @var \Net_SFTP
+	 */
+	protected $connection;
+
+	/**
+	 * Create a new gateway implementation.
+	 *
+	 * @param  string  $host
+	 * @param  array   $auth
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @return void
+	 */
+	public function __construct($host, array $auth, Filesystem $files)
+	{
+		$this->auth = $auth;
+		$this->files = $files;
+		$this->setHostAndPort($host);
+	}
+
+	/**
+	 * Set the host and port from a full host string.
+	 *
+	 * @param  string  $host
+	 * @return void
+	 */
+	protected function setHostAndPort($host)
+	{
+		if ( ! str_contains($host, ':'))
+		{
+			$this->host = $host;
+		}
+		else
+		{
+			list($this->host, $this->port) = explode(':', $host);
+
+			$this->port = (int) $this->port;
+		}
+	}
+
+	/**
+	 * Connect to the SSH server.
+	 *
+	 * @param  string  $username
+	 * @return bool
+	 */
+	public function connect($username)
+	{
+		return $this->getConnection()->login($username, $this->getAuthForLogin());
+	}
+
+	/**
+	 * Determine if the gateway is connected.
+	 *
+	 * @return bool
+	 */
+	public function connected()
+	{
+		return $this->getConnection()->isConnected();
+	}
+
+	/**
+	 * Run a command against the server (non-blocking).
+	 *
+	 * @param  string  $command
+	 * @return void
+	 */
+	public function run($command)
+	{
+		$this->getConnection()->exec($command, false);
+	}
+
+	/**
+	 * Download the contents of a remote file.
+	 *
+	 * @param  string  $remote
+	 * @param  string  $local
+	 * @return void
+	 */
+	public function get($remote, $local)
+	{
+		$this->getConnection()->get($remote, $local);
+	}
+
+	/**
+	 * Get the contents of a remote file.
+	 *
+	 * @param  string  $remote
+	 * @return string
+	 */
+	public function getString($remote)
+	{
+		return $this->getConnection()->get($remote);
+	}
+
+	/**
+	 * Upload a local file to the server.
+	 *
+	 * @param  string  $local
+	 * @param  string  $remote
+	 * @return void
+	 */
+	public function put($local, $remote)
+	{
+		$this->getConnection()->put($remote, $local, NET_SFTP_LOCAL_FILE);
+	}
+
+	/**
+	 * Upload a string to to the given file on the server.
+	 *
+	 * @param  string  $remote
+	 * @param  string  $contents
+	 * @return void
+	 */
+	public function putString($remote, $contents)
+	{
+		$this->getConnection()->put($remote, $contents);
+	}
+
+	/**
+	 * Get the next line of output from the server.
+	 *
+	 * @return string|null
+	 */
+	public function nextLine()
+	{
+		$value = $this->getConnection()->_get_channel_packet(NET_SSH2_CHANNEL_EXEC);
+
+		return $value === true ? null : $value;
+	}
+
+	/**
+	 * Get the authentication object for login.
+	 *
+	 * @return \Crypt_RSA|\System_SSH_Agent|string
+	 * @throws \InvalidArgumentException
+	 */
+	protected function getAuthForLogin()
+	{
+		if ($this->useAgent()) return $this->getAgent();
+
+		// If a "key" was specified in the auth credentials, we will load it into a
+		// secure RSA key instance, which will be used to connect to the servers
+		// in place of a password, and avoids the developer specifying a pass.
+		elseif ($this->hasRsaKey())
+		{
+			return $this->loadRsaKey($this->auth);
+		}
+
+		// If a plain password was set on the auth credentials, we will just return
+		// that as it can be used to connect to the server. This will be used if
+		// there is no RSA key and it gets specified in the credential arrays.
+		elseif (isset($this->auth['password']))
+		{
+			return $this->auth['password'];
+		}
+
+		throw new \InvalidArgumentException('Password / key is required.');
+	}
+
+	/**
+	 * Determine if an RSA key is configured.
+	 *
+	 * @return bool
+	 */
+	protected function hasRsaKey()
+	{
+		$hasKey = (isset($this->auth['key']) && trim($this->auth['key']) != '');
+
+		return $hasKey || (isset($this->auth['keytext']) && trim($this->auth['keytext']) != '');
+	}
+
+	/**
+	 * Load the RSA key instance.
+	 *
+	 * @param  array  $auth
+	 * @return \Crypt_RSA
+	 */
+	protected function loadRsaKey(array $auth)
+	{
+		with($key = $this->getKey($auth))->loadKey($this->readRsaKey($auth));
+
+		return $key;
+	}
+
+	/**
+	 * Read the contents of the RSA key.
+	 *
+	 * @param  array  $auth
+	 * @return string
+	 */
+	protected function readRsaKey(array $auth)
+	{
+		if (isset($auth['key'])) return $this->files->get($auth['key']);
+
+		return $auth['keytext'];
+	}
+
+	/**
+	 * Create a new RSA key instance.
+	 *
+	 * @param  array  $auth
+	 * @return \Crypt_RSA
+	 */
+	protected function getKey(array $auth)
+	{
+		with($key = $this->getNewKey())->setPassword(array_get($auth, 'keyphrase'));
+
+		return $key;
+	}
+
+	/**
+	 * Determine if the SSH Agent should provide an RSA key.
+	 *
+	 * @return bool
+	 */
+	protected function useAgent()
+	{
+		return isset($this->auth['agent']) && $this->auth['agent'] === true;
+	}
+
+	/**
+	 * Get a new SSH Agent instance.
+	 *
+	 * @return \System_SSH_Agent
+	 */
+	public function getAgent()
+	{
+		return new System_SSH_Agent;
+	}
+
+	/**
+	 * Get a new RSA key instance.
+	 *
+	 * @return \Crypt_RSA
+	 */
+	public function getNewKey()
+	{
+		return new Crypt_RSA;
+	}
+
+	/**
+	 * Get the exit status of the last command.
+	 *
+	 * @return int|bool
+	 */
+	public function status()
+	{
+		return $this->getConnection()->getExitStatus();
+	}
+
+	/**
+	 * Get the host used by the gateway.
+	 *
+	 * @return string
+	 */
+	public function getHost()
+	{
+		return $this->host;
+	}
+
+	/**
+	 * Get the port used by the gateway.
+	 *
+	 * @return int
+	 */
+	public function getPort()
+	{
+		return $this->port;
+	}
+
+	/**
+	 * Get the underlying Net_SFTP connection.
+	 *
+	 * @return \Net_SFTP
+	 */
+	public function getConnection()
+	{
+		if ($this->connection) return $this->connection;
+
+		return $this->connection = new Net_SFTP($this->host, $this->port);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Remote/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Remote/composer.json b/vendor/laravel/framework/src/Illuminate/Remote/composer.json
new file mode 100644
index 0000000..f7bb904
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Remote/composer.json
@@ -0,0 +1,31 @@
+{
+    "name": "illuminate/remote",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/filesystem": "4.2.*",
+        "illuminate/support": "4.2.*",
+        "phpseclib/phpseclib": "0.3.*"
+    },
+    "require-dev": {
+        "illuminate/console": "4.2.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Remote": ""
+        }
+    },
+    "target-dir": "Illuminate/Remote",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Console/MakeControllerCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Console/MakeControllerCommand.php b/vendor/laravel/framework/src/Illuminate/Routing/Console/MakeControllerCommand.php
new file mode 100755
index 0000000..9ebb844
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Console/MakeControllerCommand.php
@@ -0,0 +1,181 @@
+<?php namespace Illuminate\Routing\Console;
+
+use Illuminate\Console\Command;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputArgument;
+use Illuminate\Routing\Generators\ControllerGenerator;
+
+class MakeControllerCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'controller:make';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Create a new resourceful controller';
+
+	/**
+	 * The controller generator instance.
+	 *
+	 * @var \Illuminate\Routing\Generators\ControllerGenerator
+	 */
+	protected $generator;
+
+	/**
+	 * The path to the controller directory.
+	 *
+	 * @var string
+	 */
+	protected $path;
+
+	/**
+	 * Create a new make controller command instance.
+	 *
+	 * @param  \Illuminate\Routing\Generators\ControllerGenerator  $generator
+	 * @param  string  $path
+	 * @return void
+	 */
+	public function __construct(ControllerGenerator $generator, $path)
+	{
+		parent::__construct();
+
+		$this->path = $path;
+		$this->generator = $generator;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$this->generateController();
+	}
+
+	/**
+	 * Generate a new resourceful controller file.
+	 *
+	 * @return void
+	 */
+	protected function generateController()
+	{
+		// Once we have the controller and resource that we are going to be generating
+		// we will grab the path and options. We allow the developers to include or
+		// exclude given methods from the resourceful controllers we're building.
+		$controller = $this->input->getArgument('name');
+
+		$path = $this->getPath();
+
+		$options = $this->getBuildOptions();
+
+		// Finally, we're ready to generate the actual controller file on disk and let
+		// the developer start using it. The controller will be stored in the right
+		// place based on the namespace of this controller specified by commands.
+		$this->generator->make($controller, $path, $options);
+
+		$this->info('Controller created successfully!');
+	}
+
+	/**
+	 * Get the path in which to store the controller.
+	 *
+	 * @return string
+	 */
+	protected function getPath()
+	{
+		if ( ! is_null($this->input->getOption('path')))
+		{
+			return $this->laravel['path.base'].'/'.$this->input->getOption('path');
+		}
+		elseif ($bench = $this->input->getOption('bench'))
+		{
+			return $this->getWorkbenchPath($bench);
+		}
+
+		return $this->path;
+	}
+
+	/**
+	 * Get the workbench path for the controller.
+	 *
+	 * @param  string  $bench
+	 * @return string
+	 */
+	protected function getWorkbenchPath($bench)
+	{
+		$path = $this->laravel['path.base'].'/workbench/'.$bench.'/src/controllers';
+
+		if ( ! $this->laravel['files']->isDirectory($path))
+		{
+			$this->laravel['files']->makeDirectory($path);
+		}
+
+		return $path;
+	}
+
+	/**
+	 * Get the options for controller generation.
+	 *
+	 * @return array
+	 */
+	protected function getBuildOptions()
+	{
+		$only = $this->explodeOption('only');
+
+		$except = $this->explodeOption('except');
+
+		return compact('only', 'except');
+	}
+
+	/**
+	 * Get and explode a given input option.
+	 *
+	 * @param  string  $name
+	 * @return array
+	 */
+	protected function explodeOption($name)
+	{
+		$option = $this->input->getOption($name);
+
+		return is_null($option) ? array() : explode(',', $option);
+	}
+
+	/**
+	 * Get the console command arguments.
+	 *
+	 * @return array
+	 */
+	protected function getArguments()
+	{
+		return array(
+			array('name', InputArgument::REQUIRED, 'The name of the controller class'),
+		);
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('bench', null, InputOption::VALUE_OPTIONAL, 'The workbench the controller belongs to'),
+
+			array('only', null, InputOption::VALUE_OPTIONAL, 'The methods that should be included'),
+
+			array('except', null, InputOption::VALUE_OPTIONAL, 'The methods that should be excluded'),
+
+			array('path', null, InputOption::VALUE_OPTIONAL, 'Where to place the controller'),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/Controller.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Controller.php b/vendor/laravel/framework/src/Illuminate/Routing/Controller.php
new file mode 100644
index 0000000..62fe093
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/Controller.php
@@ -0,0 +1,271 @@
+<?php namespace Illuminate\Routing;
+
+use Closure;
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
+
+abstract class Controller {
+
+	/**
+	 * The "before" filters registered on the controller.
+	 *
+	 * @var array
+	 */
+	protected $beforeFilters = array();
+
+	/**
+	 * The "after" filters registered on the controller.
+	 *
+	 * @var array
+	 */
+	protected $afterFilters = array();
+
+	/**
+	 * The route filterer implementation.
+	 *
+	 * @var \Illuminate\Routing\RouteFiltererInterface
+	 */
+	protected static $filterer;
+
+	/**
+	 * The layout used by the controller.
+	 *
+	 * @var \Illuminate\View\View
+	 */
+	protected $layout;
+
+	/**
+	 * Register a "before" filter on the controller.
+	 *
+	 * @param  \Closure|string  $filter
+	 * @param  array  $options
+	 * @return void
+	 */
+	public function beforeFilter($filter, array $options = array())
+	{
+		$this->beforeFilters[] = $this->parseFilter($filter, $options);
+	}
+
+	/**
+	 * Register an "after" filter on the controller.
+	 *
+	 * @param  \Closure|string  $filter
+	 * @param  array  $options
+	 * @return void
+	 */
+	public function afterFilter($filter, array $options = array())
+	{
+		$this->afterFilters[] = $this->parseFilter($filter, $options);
+	}
+
+	/**
+	 * Parse the given filter and options.
+	 *
+	 * @param  \Closure|string  $filter
+	 * @param  array  $options
+	 * @return array
+	 */
+	protected function parseFilter($filter, array $options)
+	{
+		$parameters = array();
+
+		$original = $filter;
+
+		if ($filter instanceof Closure)
+		{
+			$filter = $this->registerClosureFilter($filter);
+		}
+		elseif ($this->isInstanceFilter($filter))
+		{
+			$filter = $this->registerInstanceFilter($filter);
+		}
+		else
+		{
+			list($filter, $parameters) = Route::parseFilter($filter);
+		}
+
+		return compact('original', 'filter', 'parameters', 'options');
+	}
+
+	/**
+	 * Register an anonymous controller filter Closure.
+	 *
+	 * @param  \Closure  $filter
+	 * @return string
+	 */
+	protected function registerClosureFilter(Closure $filter)
+	{
+		$this->getFilterer()->filter($name = spl_object_hash($filter), $filter);
+
+		return $name;
+	}
+
+	/**
+	 * Register a controller instance method as a filter.
+	 *
+	 * @param  string  $filter
+	 * @return string
+	 */
+	protected function registerInstanceFilter($filter)
+	{
+		$this->getFilterer()->filter($filter, array($this, substr($filter, 1)));
+
+		return $filter;
+	}
+
+	/**
+	 * Determine if a filter is a local method on the controller.
+	 *
+	 * @param  mixed  $filter
+	 * @return boolean
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	protected function isInstanceFilter($filter)
+	{
+		if (is_string($filter) && starts_with($filter, '@'))
+		{
+			if (method_exists($this, substr($filter, 1))) return true;
+
+			throw new \InvalidArgumentException("Filter method [$filter] does not exist.");
+		}
+
+		return false;
+	}
+
+	/**
+	 * Remove the given before filter.
+	 *
+	 * @param  string  $filter
+	 * @return void
+	 */
+	public function forgetBeforeFilter($filter)
+	{
+		$this->beforeFilters = $this->removeFilter($filter, $this->getBeforeFilters());
+	}
+
+	/**
+	 * Remove the given after filter.
+	 *
+	 * @param  string  $filter
+	 * @return void
+	 */
+	public function forgetAfterFilter($filter)
+	{
+		$this->afterFilters = $this->removeFilter($filter, $this->getAfterFilters());
+	}
+
+	/**
+	 * Remove the given controller filter from the provided filter array.
+	 *
+	 * @param  string  $removing
+	 * @param  array  $current
+	 * @return array
+	 */
+	protected function removeFilter($removing, $current)
+	{
+		return array_filter($current, function($filter) use ($removing)
+		{
+			return $filter['original'] != $removing;
+		});
+	}
+
+	/**
+	 * Get the registered "before" filters.
+	 *
+	 * @return array
+	 */
+	public function getBeforeFilters()
+	{
+		return $this->beforeFilters;
+	}
+
+	/**
+	 * Get the registered "after" filters.
+	 *
+	 * @return array
+	 */
+	public function getAfterFilters()
+	{
+		return $this->afterFilters;
+	}
+
+	/**
+	 * Get the route filterer implementation.
+	 *
+	 * @return \Illuminate\Routing\RouteFiltererInterface
+	 */
+	public static function getFilterer()
+	{
+		return static::$filterer;
+	}
+
+	/**
+	 * Set the route filterer implementation.
+	 *
+	 * @param  \Illuminate\Routing\RouteFiltererInterface  $filterer
+	 * @return void
+	 */
+	public static function setFilterer(RouteFiltererInterface $filterer)
+	{
+		static::$filterer = $filterer;
+	}
+
+	/**
+	 * Create the layout used by the controller.
+	 *
+	 * @return void
+	 */
+	protected function setupLayout() {}
+
+	/**
+	 * Execute an action on the controller.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return \Symfony\Component\HttpFoundation\Response
+	 */
+	public function callAction($method, $parameters)
+	{
+		$this->setupLayout();
+
+		$response = call_user_func_array(array($this, $method), $parameters);
+
+		// If no response is returned from the controller action and a layout is being
+		// used we will assume we want to just return the layout view as any nested
+		// views were probably bound on this view during this controller actions.
+		if (is_null($response) && ! is_null($this->layout))
+		{
+			$response = $this->layout;
+		}
+
+		return $response;
+	}
+
+	/**
+	 * Handle calls to missing methods on the controller.
+	 *
+	 * @param  array   $parameters
+	 * @return mixed
+	 *
+	 * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
+	 */
+	public function missingMethod($parameters = array())
+	{
+		throw new NotFoundHttpException("Controller method not found.");
+	}
+
+	/**
+	 * Handle calls to missing methods on the controller.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 *
+	 * @throws \BadMethodCallException
+	 */
+	public function __call($method, $parameters)
+	{
+		throw new \BadMethodCallException("Method [$method] does not exist.");
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php b/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php
new file mode 100644
index 0000000..c8c08a7
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php
@@ -0,0 +1,243 @@
+<?php namespace Illuminate\Routing;
+
+use Closure;
+use Illuminate\Http\Request;
+use Illuminate\Container\Container;
+
+class ControllerDispatcher {
+
+	/**
+	 * The routing filterer implementation.
+	 *
+	 * @var \Illuminate\Routing\RouteFiltererInterface  $filterer
+	 */
+	protected $filterer;
+
+	/**
+	 * The IoC container instance.
+	 *
+	 * @var \Illuminate\Container\Container
+	 */
+	protected $container;
+
+	/**
+	 * Create a new controller dispatcher instance.
+	 *
+	 * @param  \Illuminate\Routing\RouteFiltererInterface  $filterer
+	 * @param  \Illuminate\Container\Container  $container
+	 * @return void
+	 */
+	public function __construct(RouteFiltererInterface $filterer,
+								Container $container = null)
+	{
+		$this->filterer = $filterer;
+		$this->container = $container;
+	}
+
+	/**
+	 * Dispatch a request to a given controller and method.
+	 *
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  \Illuminate\Http\Request  $request
+	 * @param  string  $controller
+	 * @param  string  $method
+	 * @return mixed
+	 */
+	public function dispatch(Route $route, Request $request, $controller, $method)
+	{
+		// First we will make an instance of this controller via the IoC container instance
+		// so that we can call the methods on it. We will also apply any "after" filters
+		// to the route so that they will be run by the routers after this processing.
+		$instance = $this->makeController($controller);
+
+		$this->assignAfter($instance, $route, $request, $method);
+
+		$response = $this->before($instance, $route, $request, $method);
+
+		// If no before filters returned a response we'll call the method on the controller
+		// to get the response to be returned to the router. We will then return it back
+		// out for processing by this router and the after filters can be called then.
+		if (is_null($response))
+		{
+			$response = $this->call($instance, $route, $method);
+		}
+
+		return $response;
+	}
+
+	/**
+	 * Make a controller instance via the IoC container.
+	 *
+	 * @param  string  $controller
+	 * @return mixed
+	 */
+	protected function makeController($controller)
+	{
+		Controller::setFilterer($this->filterer);
+
+		return $this->container->make($controller);
+	}
+
+	/**
+	 * Call the given controller instance method.
+	 *
+	 * @param  \Illuminate\Routing\Controller  $instance
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  string  $method
+	 * @return mixed
+	 */
+	protected function call($instance, $route, $method)
+	{
+		$parameters = $route->parametersWithoutNulls();
+
+		return $instance->callAction($method, $parameters);
+	}
+
+	/**
+	 * Call the "before" filters for the controller.
+	 *
+	 * @param  \Illuminate\Routing\Controller  $instance
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  \Illuminate\Http\Request  $request
+	 * @param  string  $method
+	 * @return mixed
+	 */
+	protected function before($instance, $route, $request, $method)
+	{
+		foreach ($instance->getBeforeFilters() as $filter)
+		{
+			if ($this->filterApplies($filter, $request, $method))
+			{
+				// Here we will just check if the filter applies. If it does we will call the filter
+				// and return the responses if it isn't null. If it is null, we will keep hitting
+				// them until we get a response or are finished iterating through this filters.
+				$response = $this->callFilter($filter, $route, $request);
+
+				if ( ! is_null($response)) return $response;
+			}
+		}
+	}
+
+	/**
+	 * Apply the applicable after filters to the route.
+	 *
+	 * @param  \Illuminate\Routing\Controller  $instance
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  \Illuminate\Http\Request  $request
+	 * @param  string  $method
+	 * @return mixed
+	 */
+	protected function assignAfter($instance, $route, $request, $method)
+	{
+		foreach ($instance->getAfterFilters() as $filter)
+		{
+			// If the filter applies, we will add it to the route, since it has already been
+			// registered on the filterer by the controller, and will just let the normal
+			// router take care of calling these filters so we do not duplicate logics.
+			if ($this->filterApplies($filter, $request, $method))
+			{
+				$route->after($this->getAssignableAfter($filter));
+			}
+		}
+	}
+
+	/**
+	 * Get the assignable after filter for the route.
+	 *
+	 * @param  \Closure|string  $filter
+	 * @return string
+	 */
+	protected function getAssignableAfter($filter)
+	{
+		return $filter['original'] instanceof Closure ? $filter['filter'] : $filter['original'];
+	}
+
+	/**
+	 * Determine if the given filter applies to the request.
+	 *
+	 * @param  array  $filter
+	 * @param  \Illuminate\Http\Request  $request
+	 * @param  string  $method
+	 * @return bool
+	 */
+	protected function filterApplies($filter, $request, $method)
+	{
+		foreach (array('Only', 'Except', 'On') as $type)
+		{
+			if ($this->{"filterFails{$type}"}($filter, $request, $method))
+			{
+				return false;
+			}
+		}
+
+		return true;
+	}
+
+	/**
+	 * Determine if the filter fails the "only" constraint.
+	 *
+	 * @param  array  $filter
+	 * @param  \Illuminate\Http\Request  $request
+	 * @param  string  $method
+	 * @return bool
+	 */
+	protected function filterFailsOnly($filter, $request, $method)
+	{
+		if ( ! isset($filter['options']['only'])) return false;
+
+		return ! in_array($method, (array) $filter['options']['only']);
+	}
+
+	/**
+	 * Determine if the filter fails the "except" constraint.
+	 *
+	 * @param  array  $filter
+	 * @param  \Illuminate\Http\Request  $request
+	 * @param  string  $method
+	 * @return bool
+	 */
+	protected function filterFailsExcept($filter, $request, $method)
+	{
+		if ( ! isset($filter['options']['except'])) return false;
+
+		return in_array($method, (array) $filter['options']['except']);
+	}
+
+	/**
+	 * Determine if the filter fails the "on" constraint.
+	 *
+	 * @param  array  $filter
+	 * @param  \Illuminate\Http\Request  $request
+	 * @param  string  $method
+	 * @return bool
+	 */
+	protected function filterFailsOn($filter, $request, $method)
+	{
+		$on = array_get($filter, 'options.on');
+
+		if (is_null($on)) return false;
+
+		// If the "on" is a string, we will explode it on the pipe so you can set any
+		// amount of methods on the filter constraints and it will still work like
+		// you specified an array. Then we will check if the method is in array.
+		if (is_string($on)) $on = explode('|', $on);
+
+		return ! in_array(strtolower($request->getMethod()), $on);
+	}
+
+	/**
+	 * Call the given controller filter method.
+	 *
+	 * @param  array  $filter
+	 * @param  \Illuminate\Routing\Route  $route
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return mixed
+	 */
+	protected function callFilter($filter, $route, $request)
+	{
+		extract($filter);
+
+		return $this->filterer->callRouteFilter($filter, $parameters, $route, $request);
+	}
+
+}


[55/57] airavata-php-gateway git commit: Correcting Merge Conflicts with AIRAVATA-1695

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/71079c5f/vendor/composer/installed.json
----------------------------------------------------------------------
diff --cc vendor/composer/installed.json
index 4410450,0000000..f56af6e
mode 100644,000000..100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@@ -1,1743 -1,0 +1,1743 @@@
 +[
 +    {
 +        "name": "apache/thrift",
 +        "version": "dev-master",
 +        "version_normalized": "9999999-dev",
 +        "source": {
 +            "type": "git",
 +            "url": "https://git-wip-us.apache.org/repos/asf/thrift.git",
-             "reference": "dc799ca078627a8e400cfcdbb965acf6abf86eef"
++            "reference": "1e723d931e92652e4ccb1385709258759ae5bc54"
 +        },
 +        "require": {
 +            "php": ">=5.3.0"
 +        },
-         "time": "2015-04-27 20:56:54",
++        "time": "2015-05-01 04:09:00",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "1.0.x-dev"
 +            }
 +        },
 +        "installation-source": "source",
 +        "autoload": {
 +            "psr-0": {
 +                "Thrift": "lib/php/lib/"
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "Apache-2.0"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Apache Thrift Developers",
 +                "email": "dev@thrift.apache.org",
 +                "homepage": "http://thrift.apache.org"
 +            }
 +        ],
 +        "description": "Apache Thrift RPC system",
 +        "homepage": "http://thrift.apache.org/"
 +    },
 +    {
 +        "name": "symfony/translation",
 +        "version": "v2.5.11",
 +        "version_normalized": "2.5.11.0",
 +        "target-dir": "Symfony/Component/Translation",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/symfony/Translation.git",
 +            "reference": "165b5348cd20f8c4b2fcf1097c9c8300d1093b90"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/symfony/Translation/zipball/165b5348cd20f8c4b2fcf1097c9c8300d1093b90",
 +            "reference": "165b5348cd20f8c4b2fcf1097c9c8300d1093b90",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.3"
 +        },
 +        "require-dev": {
 +            "symfony/config": "~2.3,>=2.3.12",
 +            "symfony/intl": "~2.3",
 +            "symfony/yaml": "~2.2"
 +        },
 +        "suggest": {
 +            "symfony/config": "",
 +            "symfony/yaml": ""
 +        },
 +        "time": "2015-01-03 15:23:51",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "2.5-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Symfony\\Component\\Translation\\": ""
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Symfony Community",
 +                "homepage": "http://symfony.com/contributors"
 +            },
 +            {
 +                "name": "Fabien Potencier",
 +                "email": "fabien@symfony.com"
 +            }
 +        ],
 +        "description": "Symfony Translation Component",
 +        "homepage": "http://symfony.com"
 +    },
 +    {
 +        "name": "symfony/security-core",
 +        "version": "v2.5.11",
 +        "version_normalized": "2.5.11.0",
 +        "target-dir": "Symfony/Component/Security/Core",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/symfony/security-core.git",
 +            "reference": "3a27d7b34ee62cb0fdf5ad970e7777912ef4722f"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/symfony/security-core/zipball/3a27d7b34ee62cb0fdf5ad970e7777912ef4722f",
 +            "reference": "3a27d7b34ee62cb0fdf5ad970e7777912ef4722f",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.3"
 +        },
 +        "require-dev": {
 +            "ircmaxell/password-compat": "1.0.*",
 +            "psr/log": "~1.0",
 +            "symfony/event-dispatcher": "~2.1",
 +            "symfony/expression-language": "~2.4",
 +            "symfony/http-foundation": "~2.4",
 +            "symfony/translation": "~2.0,>=2.0.5",
 +            "symfony/validator": "~2.5,>=2.5.5"
 +        },
 +        "suggest": {
 +            "ircmaxell/password-compat": "For using the BCrypt password encoder in PHP <5.5",
 +            "symfony/event-dispatcher": "",
 +            "symfony/expression-language": "For using the expression voter",
 +            "symfony/http-foundation": "",
 +            "symfony/validator": "For using the user password constraint"
 +        },
 +        "time": "2015-01-25 04:37:39",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "2.5-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Symfony\\Component\\Security\\Core\\": ""
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Symfony Community",
 +                "homepage": "http://symfony.com/contributors"
 +            },
 +            {
 +                "name": "Fabien Potencier",
 +                "email": "fabien@symfony.com"
 +            }
 +        ],
 +        "description": "Symfony Security Component - Core Library",
 +        "homepage": "http://symfony.com"
 +    },
 +    {
 +        "name": "symfony/routing",
 +        "version": "v2.5.11",
 +        "version_normalized": "2.5.11.0",
 +        "target-dir": "Symfony/Component/Routing",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/symfony/Routing.git",
 +            "reference": "46142c34ea830f47429df6e15faec3a33292d618"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/symfony/Routing/zipball/46142c34ea830f47429df6e15faec3a33292d618",
 +            "reference": "46142c34ea830f47429df6e15faec3a33292d618",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.3"
 +        },
 +        "require-dev": {
 +            "doctrine/annotations": "~1.0",
 +            "doctrine/common": "~2.2",
 +            "psr/log": "~1.0",
 +            "symfony/config": "~2.2",
 +            "symfony/expression-language": "~2.4",
 +            "symfony/http-foundation": "~2.3",
 +            "symfony/yaml": "~2.0,>=2.0.5"
 +        },
 +        "suggest": {
 +            "doctrine/annotations": "For using the annotation loader",
 +            "symfony/config": "For using the all-in-one router or any loader",
 +            "symfony/expression-language": "For using expression matching",
 +            "symfony/yaml": "For using the YAML loader"
 +        },
 +        "time": "2015-02-08 07:07:45",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "2.5-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Symfony\\Component\\Routing\\": ""
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Symfony Community",
 +                "homepage": "http://symfony.com/contributors"
 +            },
 +            {
 +                "name": "Fabien Potencier",
 +                "email": "fabien@symfony.com"
 +            }
 +        ],
 +        "description": "Symfony Routing Component",
 +        "homepage": "http://symfony.com",
 +        "keywords": [
 +            "router",
 +            "routing",
 +            "uri",
 +            "url"
 +        ]
 +    },
 +    {
 +        "name": "symfony/process",
 +        "version": "v2.5.11",
 +        "version_normalized": "2.5.11.0",
 +        "target-dir": "Symfony/Component/Process",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/symfony/Process.git",
 +            "reference": "00a1308e8b5aec5eba7c8f1708426a78f929be8c"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/symfony/Process/zipball/00a1308e8b5aec5eba7c8f1708426a78f929be8c",
 +            "reference": "00a1308e8b5aec5eba7c8f1708426a78f929be8c",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.3"
 +        },
 +        "time": "2015-02-08 07:07:45",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "2.5-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Symfony\\Component\\Process\\": ""
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Symfony Community",
 +                "homepage": "http://symfony.com/contributors"
 +            },
 +            {
 +                "name": "Fabien Potencier",
 +                "email": "fabien@symfony.com"
 +            }
 +        ],
 +        "description": "Symfony Process Component",
 +        "homepage": "http://symfony.com"
 +    },
 +    {
 +        "name": "psr/log",
 +        "version": "1.0.0",
 +        "version_normalized": "1.0.0.0",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/php-fig/log.git",
 +            "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b",
 +            "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
 +            "shasum": ""
 +        },
 +        "time": "2012-12-21 11:40:51",
 +        "type": "library",
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Psr\\Log\\": ""
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "PHP-FIG",
 +                "homepage": "http://www.php-fig.org/"
 +            }
 +        ],
 +        "description": "Common interface for logging libraries",
 +        "keywords": [
 +            "log",
 +            "psr",
 +            "psr-3"
 +        ]
 +    },
 +    {
 +        "name": "symfony/debug",
 +        "version": "v2.5.11",
 +        "version_normalized": "2.5.11.0",
 +        "target-dir": "Symfony/Component/Debug",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/symfony/Debug.git",
 +            "reference": "ed3019589cdadf32c521d1e181f9d72955645c67"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/symfony/Debug/zipball/ed3019589cdadf32c521d1e181f9d72955645c67",
 +            "reference": "ed3019589cdadf32c521d1e181f9d72955645c67",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.3"
 +        },
 +        "conflict": {
 +            "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
 +        },
 +        "require-dev": {
 +            "symfony/class-loader": "~2.2",
 +            "symfony/http-foundation": "~2.1",
 +            "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2"
 +        },
 +        "suggest": {
 +            "symfony/http-foundation": "",
 +            "symfony/http-kernel": ""
 +        },
 +        "time": "2015-01-16 14:51:58",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "2.5-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Symfony\\Component\\Debug\\": ""
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Symfony Community",
 +                "homepage": "http://symfony.com/contributors"
 +            },
 +            {
 +                "name": "Fabien Potencier",
 +                "email": "fabien@symfony.com"
 +            }
 +        ],
 +        "description": "Symfony Debug Component",
 +        "homepage": "http://symfony.com"
 +    },
 +    {
 +        "name": "symfony/http-foundation",
 +        "version": "v2.5.11",
 +        "version_normalized": "2.5.11.0",
 +        "target-dir": "Symfony/Component/HttpFoundation",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/symfony/HttpFoundation.git",
 +            "reference": "08e783861dd9579bac4092814bbfb0cae6666b65"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/08e783861dd9579bac4092814bbfb0cae6666b65",
 +            "reference": "08e783861dd9579bac4092814bbfb0cae6666b65",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.3"
 +        },
 +        "require-dev": {
 +            "symfony/expression-language": "~2.4"
 +        },
 +        "time": "2015-04-01 15:49:36",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "2.5-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Symfony\\Component\\HttpFoundation\\": ""
 +            },
 +            "classmap": [
 +                "Symfony/Component/HttpFoundation/Resources/stubs"
 +            ]
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Symfony Community",
 +                "homepage": "http://symfony.com/contributors"
 +            },
 +            {
 +                "name": "Fabien Potencier",
 +                "email": "fabien@symfony.com"
 +            }
 +        ],
 +        "description": "Symfony HttpFoundation Component",
 +        "homepage": "http://symfony.com"
 +    },
 +    {
 +        "name": "symfony/event-dispatcher",
 +        "version": "v2.6.6",
 +        "version_normalized": "2.6.6.0",
 +        "target-dir": "Symfony/Component/EventDispatcher",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/symfony/EventDispatcher.git",
 +            "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/70f7c8478739ad21e3deef0d977b38c77f1fb284",
 +            "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.3"
 +        },
 +        "require-dev": {
 +            "psr/log": "~1.0",
 +            "symfony/config": "~2.0,>=2.0.5",
 +            "symfony/dependency-injection": "~2.6",
 +            "symfony/expression-language": "~2.6",
 +            "symfony/phpunit-bridge": "~2.7",
 +            "symfony/stopwatch": "~2.3"
 +        },
 +        "suggest": {
 +            "symfony/dependency-injection": "",
 +            "symfony/http-kernel": ""
 +        },
 +        "time": "2015-03-13 17:37:22",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "2.6-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Symfony\\Component\\EventDispatcher\\": ""
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Symfony Community",
 +                "homepage": "http://symfony.com/contributors"
 +            },
 +            {
 +                "name": "Fabien Potencier",
 +                "email": "fabien@symfony.com"
 +            }
 +        ],
 +        "description": "Symfony EventDispatcher Component",
 +        "homepage": "http://symfony.com"
 +    },
 +    {
 +        "name": "symfony/http-kernel",
 +        "version": "v2.5.11",
 +        "version_normalized": "2.5.11.0",
 +        "target-dir": "Symfony/Component/HttpKernel",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/symfony/HttpKernel.git",
 +            "reference": "7b1632cf2bdbc69c59a44942b70d5aae91034304"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/7b1632cf2bdbc69c59a44942b70d5aae91034304",
 +            "reference": "7b1632cf2bdbc69c59a44942b70d5aae91034304",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.3",
 +            "psr/log": "~1.0",
 +            "symfony/debug": "~2.5.9|~2.6,>=2.6.2",
 +            "symfony/event-dispatcher": "~2.5.9|~2.6,>=2.6.2",
 +            "symfony/http-foundation": "~2.5"
 +        },
 +        "require-dev": {
 +            "symfony/browser-kit": "~2.3",
 +            "symfony/class-loader": "~2.1",
 +            "symfony/config": "~2.0,>=2.0.5",
 +            "symfony/console": "~2.2",
 +            "symfony/css-selector": "~2.0,>=2.0.5",
 +            "symfony/dependency-injection": "~2.2",
 +            "symfony/dom-crawler": "~2.0,>=2.0.5",
 +            "symfony/expression-language": "~2.4",
 +            "symfony/finder": "~2.0,>=2.0.5",
 +            "symfony/process": "~2.0,>=2.0.5",
 +            "symfony/routing": "~2.2",
 +            "symfony/stopwatch": "~2.3",
 +            "symfony/templating": "~2.2"
 +        },
 +        "suggest": {
 +            "symfony/browser-kit": "",
 +            "symfony/class-loader": "",
 +            "symfony/config": "",
 +            "symfony/console": "",
 +            "symfony/dependency-injection": "",
 +            "symfony/finder": ""
 +        },
 +        "time": "2015-04-01 16:01:45",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "2.5-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Symfony\\Component\\HttpKernel\\": ""
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Symfony Community",
 +                "homepage": "http://symfony.com/contributors"
 +            },
 +            {
 +                "name": "Fabien Potencier",
 +                "email": "fabien@symfony.com"
 +            }
 +        ],
 +        "description": "Symfony HttpKernel Component",
 +        "homepage": "http://symfony.com"
 +    },
 +    {
 +        "name": "symfony/finder",
 +        "version": "v2.5.11",
 +        "version_normalized": "2.5.11.0",
 +        "target-dir": "Symfony/Component/Finder",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/symfony/Finder.git",
 +            "reference": "e527ebf47ff912a45e148b7d0b107b80ec0b3cc2"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/symfony/Finder/zipball/e527ebf47ff912a45e148b7d0b107b80ec0b3cc2",
 +            "reference": "e527ebf47ff912a45e148b7d0b107b80ec0b3cc2",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.3"
 +        },
 +        "time": "2015-01-03 08:01:13",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "2.5-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Symfony\\Component\\Finder\\": ""
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Symfony Community",
 +                "homepage": "http://symfony.com/contributors"
 +            },
 +            {
 +                "name": "Fabien Potencier",
 +                "email": "fabien@symfony.com"
 +            }
 +        ],
 +        "description": "Symfony Finder Component",
 +        "homepage": "http://symfony.com"
 +    },
 +    {
 +        "name": "symfony/dom-crawler",
 +        "version": "v2.5.11",
 +        "version_normalized": "2.5.11.0",
 +        "target-dir": "Symfony/Component/DomCrawler",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/symfony/DomCrawler.git",
 +            "reference": "3860edcf7ff7e173cfe2151f0d425e610e77cc35"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/3860edcf7ff7e173cfe2151f0d425e610e77cc35",
 +            "reference": "3860edcf7ff7e173cfe2151f0d425e610e77cc35",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.3"
 +        },
 +        "require-dev": {
 +            "symfony/css-selector": "~2.3"
 +        },
 +        "suggest": {
 +            "symfony/css-selector": ""
 +        },
 +        "time": "2015-01-03 08:01:13",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "2.5-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Symfony\\Component\\DomCrawler\\": ""
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Symfony Community",
 +                "homepage": "http://symfony.com/contributors"
 +            },
 +            {
 +                "name": "Fabien Potencier",
 +                "email": "fabien@symfony.com"
 +            }
 +        ],
 +        "description": "Symfony DomCrawler Component",
 +        "homepage": "http://symfony.com"
 +    },
 +    {
 +        "name": "symfony/css-selector",
 +        "version": "v2.5.11",
 +        "version_normalized": "2.5.11.0",
 +        "target-dir": "Symfony/Component/CssSelector",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/symfony/CssSelector.git",
 +            "reference": "d45b306421462295e76b94bcf76b963867450327"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/symfony/CssSelector/zipball/d45b306421462295e76b94bcf76b963867450327",
 +            "reference": "d45b306421462295e76b94bcf76b963867450327",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.3"
 +        },
 +        "time": "2015-01-03 08:01:13",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "2.5-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Symfony\\Component\\CssSelector\\": ""
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Symfony Community",
 +                "homepage": "http://symfony.com/contributors"
 +            },
 +            {
 +                "name": "Jean-François Simon",
 +                "email": "jeanfrancois.simon@sensiolabs.com"
 +            },
 +            {
 +                "name": "Fabien Potencier",
 +                "email": "fabien@symfony.com"
 +            }
 +        ],
 +        "description": "Symfony CssSelector Component",
 +        "homepage": "http://symfony.com"
 +    },
 +    {
 +        "name": "symfony/console",
 +        "version": "v2.5.11",
 +        "version_normalized": "2.5.11.0",
 +        "target-dir": "Symfony/Component/Console",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/symfony/Console.git",
 +            "reference": "a43e750b4c74f3bdfca77c79c343033d35a6cd6e"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/symfony/Console/zipball/a43e750b4c74f3bdfca77c79c343033d35a6cd6e",
 +            "reference": "a43e750b4c74f3bdfca77c79c343033d35a6cd6e",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.3"
 +        },
 +        "require-dev": {
 +            "psr/log": "~1.0",
 +            "symfony/event-dispatcher": "~2.1"
 +        },
 +        "suggest": {
 +            "psr/log": "For using the console logger",
 +            "symfony/event-dispatcher": ""
 +        },
 +        "time": "2015-02-08 07:07:45",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "2.5-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Symfony\\Component\\Console\\": ""
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Symfony Community",
 +                "homepage": "http://symfony.com/contributors"
 +            },
 +            {
 +                "name": "Fabien Potencier",
 +                "email": "fabien@symfony.com"
 +            }
 +        ],
 +        "description": "Symfony Console Component",
 +        "homepage": "http://symfony.com"
 +    },
 +    {
 +        "name": "symfony/browser-kit",
 +        "version": "v2.5.11",
 +        "version_normalized": "2.5.11.0",
 +        "target-dir": "Symfony/Component/BrowserKit",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/symfony/BrowserKit.git",
 +            "reference": "b2b78b850a32251cbbd9915ab61453302e7ecd72"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/b2b78b850a32251cbbd9915ab61453302e7ecd72",
 +            "reference": "b2b78b850a32251cbbd9915ab61453302e7ecd72",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.3",
 +            "symfony/dom-crawler": "~2.0,>=2.0.5"
 +        },
 +        "require-dev": {
 +            "symfony/css-selector": "~2.0,>=2.0.5",
 +            "symfony/process": "~2.0,>=2.0.5"
 +        },
 +        "suggest": {
 +            "symfony/process": ""
 +        },
 +        "time": "2015-01-03 08:01:13",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "2.5-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Symfony\\Component\\BrowserKit\\": ""
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Symfony Community",
 +                "homepage": "http://symfony.com/contributors"
 +            },
 +            {
 +                "name": "Fabien Potencier",
 +                "email": "fabien@symfony.com"
 +            }
 +        ],
 +        "description": "Symfony BrowserKit Component",
 +        "homepage": "http://symfony.com"
 +    },
 +    {
 +        "name": "swiftmailer/swiftmailer",
 +        "version": "v5.4.0",
 +        "version_normalized": "5.4.0.0",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/swiftmailer/swiftmailer.git",
 +            "reference": "31454f258f10329ae7c48763eb898a75c39e0a9f"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/31454f258f10329ae7c48763eb898a75c39e0a9f",
 +            "reference": "31454f258f10329ae7c48763eb898a75c39e0a9f",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.3"
 +        },
 +        "require-dev": {
 +            "mockery/mockery": "~0.9.1"
 +        },
 +        "time": "2015-03-14 06:06:39",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "5.4-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "files": [
 +                "lib/swift_required.php"
 +            ]
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Chris Corbyn"
 +            },
 +            {
 +                "name": "Fabien Potencier",
 +                "email": "fabien@symfony.com"
 +            }
 +        ],
 +        "description": "Swiftmailer, free feature-rich PHP mailer",
 +        "homepage": "http://swiftmailer.org",
 +        "keywords": [
 +            "mail",
 +            "mailer"
 +        ]
 +    },
 +    {
 +        "name": "stack/builder",
 +        "version": "v1.0.3",
 +        "version_normalized": "1.0.3.0",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/stackphp/builder.git",
 +            "reference": "c1f8a4693b55c563405024f708a76ef576c3b276"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/stackphp/builder/zipball/c1f8a4693b55c563405024f708a76ef576c3b276",
 +            "reference": "c1f8a4693b55c563405024f708a76ef576c3b276",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.0",
 +            "symfony/http-foundation": "~2.1",
 +            "symfony/http-kernel": "~2.1"
 +        },
 +        "require-dev": {
 +            "silex/silex": "~1.0"
 +        },
 +        "time": "2014-11-23 20:37:11",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "1.0-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Stack": "src"
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Igor Wiedler",
 +                "email": "igor@wiedler.ch"
 +            }
 +        ],
 +        "description": "Builder for stack middlewares based on HttpKernelInterface.",
 +        "keywords": [
 +            "stack"
 +        ]
 +    },
 +    {
 +        "name": "predis/predis",
 +        "version": "v0.8.7",
 +        "version_normalized": "0.8.7.0",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/nrk/predis.git",
 +            "reference": "4123fcd85d61354c6c9900db76c9597dbd129bf6"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/nrk/predis/zipball/4123fcd85d61354c6c9900db76c9597dbd129bf6",
 +            "reference": "4123fcd85d61354c6c9900db76c9597dbd129bf6",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.2"
 +        },
 +        "require-dev": {
 +            "phpunit/phpunit": "~4.0"
 +        },
 +        "suggest": {
 +            "ext-curl": "Allows access to Webdis when paired with phpiredis",
 +            "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol"
 +        },
 +        "time": "2014-08-01 09:43:10",
 +        "type": "library",
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Predis": "lib/"
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Daniele Alessandri",
 +                "email": "suppakilla@gmail.com",
 +                "homepage": "http://clorophilla.net"
 +            }
 +        ],
 +        "description": "Flexible and feature-complete PHP client library for Redis",
 +        "homepage": "http://github.com/nrk/predis",
 +        "keywords": [
 +            "nosql",
 +            "predis",
 +            "redis"
 +        ]
 +    },
 +    {
 +        "name": "phpseclib/phpseclib",
 +        "version": "0.3.10",
 +        "version_normalized": "0.3.10.0",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/phpseclib/phpseclib.git",
 +            "reference": "d15bba1edcc7c89e09cc74c5d961317a8b947bf4"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/d15bba1edcc7c89e09cc74c5d961317a8b947bf4",
 +            "reference": "d15bba1edcc7c89e09cc74c5d961317a8b947bf4",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.0.0"
 +        },
 +        "require-dev": {
 +            "phing/phing": "~2.7",
 +            "phpunit/phpunit": "~4.0",
 +            "sami/sami": "~2.0",
 +            "squizlabs/php_codesniffer": "~1.5"
 +        },
 +        "suggest": {
 +            "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
 +            "ext-mcrypt": "Install the Mcrypt extension in order to speed up a wide variety of cryptographic operations.",
 +            "pear-pear/PHP_Compat": "Install PHP_Compat to get phpseclib working on PHP < 4.3.3."
 +        },
 +        "time": "2015-01-28 21:50:33",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "0.3-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Crypt": "phpseclib/",
 +                "File": "phpseclib/",
 +                "Math": "phpseclib/",
 +                "Net": "phpseclib/",
 +                "System": "phpseclib/"
 +            },
 +            "files": [
 +                "phpseclib/Crypt/Random.php"
 +            ]
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "include-path": [
 +            "phpseclib/"
 +        ],
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Jim Wigginton",
 +                "email": "terrafrost@php.net",
 +                "role": "Lead Developer"
 +            },
 +            {
 +                "name": "Patrick Monnerat",
 +                "email": "pm@datasphere.ch",
 +                "role": "Developer"
 +            },
 +            {
 +                "name": "Andreas Fischer",
 +                "email": "bantu@phpbb.com",
 +                "role": "Developer"
 +            },
 +            {
 +                "name": "Hans-Jürgen Petrich",
 +                "email": "petrich@tronic-media.com",
 +                "role": "Developer"
 +            }
 +        ],
 +        "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
 +        "homepage": "http://phpseclib.sourceforge.net",
 +        "keywords": [
 +            "BigInteger",
 +            "aes",
 +            "asn.1",
 +            "asn1",
 +            "blowfish",
 +            "crypto",
 +            "cryptography",
 +            "encryption",
 +            "rsa",
 +            "security",
 +            "sftp",
 +            "signature",
 +            "signing",
 +            "ssh",
 +            "twofish",
 +            "x.509",
 +            "x509"
 +        ]
 +    },
 +    {
 +        "name": "patchwork/utf8",
 +        "version": "v1.2.2",
 +        "version_normalized": "1.2.2.0",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/tchwork/utf8.git",
 +            "reference": "7287a6fb2c46a66ac6bfbaf0e4975229b27efcba"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/tchwork/utf8/zipball/7287a6fb2c46a66ac6bfbaf0e4975229b27efcba",
 +            "reference": "7287a6fb2c46a66ac6bfbaf0e4975229b27efcba",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "lib-pcre": ">=7.3",
 +            "php": ">=5.3.0"
 +        },
 +        "suggest": {
 +            "ext-iconv": "Use iconv for best performance",
 +            "ext-intl": "Use Intl for best performance",
 +            "ext-mbstring": "Use Mbstring for best performance",
 +            "ext-wfio": "Use WFIO for UTF-8 filesystem access on Windows"
 +        },
 +        "time": "2015-04-26 09:51:43",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "1.2-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Patchwork": "class/",
 +                "Normalizer": "class/"
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "(Apache-2.0 or GPL-2.0)"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Nicolas Grekas",
 +                "email": "p@tchwork.com"
 +            }
 +        ],
 +        "description": "Portable and performant UTF-8, Unicode and Grapheme Clusters for PHP",
 +        "homepage": "https://github.com/tchwork/utf8",
 +        "keywords": [
 +            "grapheme",
 +            "i18n",
 +            "unicode",
 +            "utf-8",
 +            "utf8"
 +        ]
 +    },
 +    {
 +        "name": "nesbot/carbon",
 +        "version": "1.17.0",
 +        "version_normalized": "1.17.0.0",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/briannesbitt/Carbon.git",
 +            "reference": "a1dd1ad9abfc8b3c4d8768068e6c71d293424e86"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/a1dd1ad9abfc8b3c4d8768068e6c71d293424e86",
 +            "reference": "a1dd1ad9abfc8b3c4d8768068e6c71d293424e86",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.0"
 +        },
 +        "require-dev": {
 +            "phpunit/phpunit": "~4.0"
 +        },
 +        "time": "2015-03-08 14:05:44",
 +        "type": "library",
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Carbon": "src"
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Brian Nesbitt",
 +                "email": "brian@nesbot.com",
 +                "homepage": "http://nesbot.com"
 +            }
 +        ],
 +        "description": "A simple API extension for DateTime.",
 +        "homepage": "http://carbon.nesbot.com",
 +        "keywords": [
 +            "date",
 +            "datetime",
 +            "time"
 +        ]
 +    },
 +    {
 +        "name": "monolog/monolog",
 +        "version": "1.13.1",
 +        "version_normalized": "1.13.1.0",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/Seldaek/monolog.git",
 +            "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c31a2c4e8db5da8b46c74cf275d7f109c0f249ac",
 +            "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.0",
 +            "psr/log": "~1.0"
 +        },
 +        "provide": {
 +            "psr/log-implementation": "1.0.0"
 +        },
 +        "require-dev": {
 +            "aws/aws-sdk-php": "~2.4, >2.4.8",
 +            "doctrine/couchdb": "~1.0@dev",
 +            "graylog2/gelf-php": "~1.0",
 +            "phpunit/phpunit": "~4.0",
 +            "raven/raven": "~0.5",
 +            "ruflin/elastica": "0.90.*",
 +            "swiftmailer/swiftmailer": "~5.3",
 +            "videlalvaro/php-amqplib": "~2.4"
 +        },
 +        "suggest": {
 +            "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
 +            "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
 +            "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
 +            "ext-mongo": "Allow sending log messages to a MongoDB server",
 +            "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
 +            "raven/raven": "Allow sending log messages to a Sentry server",
 +            "rollbar/rollbar": "Allow sending log messages to Rollbar",
 +            "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
 +            "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib"
 +        },
 +        "time": "2015-03-09 09:58:04",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "1.13.x-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-4": {
 +                "Monolog\\": "src/Monolog"
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Jordi Boggiano",
 +                "email": "j.boggiano@seld.be",
 +                "homepage": "http://seld.be"
 +            }
 +        ],
 +        "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
 +        "homepage": "http://github.com/Seldaek/monolog",
 +        "keywords": [
 +            "log",
 +            "logging",
 +            "psr-3"
 +        ]
 +    },
 +    {
 +        "name": "nikic/php-parser",
 +        "version": "v0.9.5",
 +        "version_normalized": "0.9.5.0",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/nikic/PHP-Parser.git",
 +            "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ef70767475434bdb3615b43c327e2cae17ef12eb",
 +            "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "ext-tokenizer": "*",
 +            "php": ">=5.2"
 +        },
 +        "time": "2014-07-23 18:24:17",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "0.9-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "PHPParser": "lib/"
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "BSD-3-Clause"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Nikita Popov"
 +            }
 +        ],
 +        "description": "A PHP parser written in PHP",
 +        "keywords": [
 +            "parser",
 +            "php"
 +        ]
 +    },
 +    {
 +        "name": "jeremeamia/SuperClosure",
 +        "version": "1.0.2",
 +        "version_normalized": "1.0.2.0",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/jeremeamia/super_closure.git",
 +            "reference": "4d89ca74994feab128ea46d5b3add92e6cb84554"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/jeremeamia/super_closure/zipball/4d89ca74994feab128ea46d5b3add92e6cb84554",
 +            "reference": "4d89ca74994feab128ea46d5b3add92e6cb84554",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "nikic/php-parser": "~0.9",
 +            "php": ">=5.3.3"
 +        },
 +        "require-dev": {
 +            "phpunit/phpunit": "~3.7"
 +        },
 +        "time": "2015-01-10 01:09:28",
 +        "type": "library",
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Jeremeamia\\SuperClosure": "src/"
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Jeremy Lindblom"
 +            }
 +        ],
 +        "description": "Doing interesting things with closures like serialization.",
 +        "homepage": "https://github.com/jeremeamia/super_closure",
 +        "keywords": [
 +            "closure",
 +            "function",
 +            "parser",
 +            "serializable",
 +            "serialize",
 +            "tokenizer"
 +        ]
 +    },
 +    {
 +        "name": "filp/whoops",
 +        "version": "1.1.5",
 +        "version_normalized": "1.1.5.0",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/filp/whoops.git",
 +            "reference": "c982fe62c44798c433229cb0425c61b487cc1883"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/filp/whoops/zipball/c982fe62c44798c433229cb0425c61b487cc1883",
 +            "reference": "c982fe62c44798c433229cb0425c61b487cc1883",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.0"
 +        },
 +        "require-dev": {
 +            "mockery/mockery": "0.9.*"
 +        },
 +        "time": "2015-03-30 15:26:59",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "1.2-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Whoops": "src/"
 +            },
 +            "classmap": [
 +                "src/deprecated"
 +            ]
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Filipe Dobreira",
 +                "homepage": "https://github.com/filp",
 +                "role": "Developer"
 +            }
 +        ],
 +        "description": "php error handling for cool kids",
 +        "homepage": "https://github.com/filp/whoops",
 +        "keywords": [
 +            "error",
 +            "exception",
 +            "handling",
 +            "library",
 +            "silex-provider",
 +            "whoops",
 +            "zf2"
 +        ]
 +    },
 +    {
 +        "name": "ircmaxell/password-compat",
 +        "version": "v1.0.4",
 +        "version_normalized": "1.0.4.0",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/ircmaxell/password_compat.git",
 +            "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/5c5cde8822a69545767f7c7f3058cb15ff84614c",
 +            "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c",
 +            "shasum": ""
 +        },
 +        "require-dev": {
 +            "phpunit/phpunit": "4.*"
 +        },
 +        "time": "2014-11-20 16:49:30",
 +        "type": "library",
 +        "installation-source": "dist",
 +        "autoload": {
 +            "files": [
 +                "lib/password.php"
 +            ]
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Anthony Ferrara",
 +                "email": "ircmaxell@php.net",
 +                "homepage": "http://blog.ircmaxell.com"
 +            }
 +        ],
 +        "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash",
 +        "homepage": "https://github.com/ircmaxell/password_compat",
 +        "keywords": [
 +            "hashing",
 +            "password"
 +        ]
 +    },
 +    {
 +        "name": "d11wtq/boris",
 +        "version": "v1.0.10",
 +        "version_normalized": "1.0.10.0",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/borisrepl/boris.git",
 +            "reference": "31055b15e2d3fe47f31f6aa8e277f8f3fc7eb483"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/borisrepl/boris/zipball/31055b15e2d3fe47f31f6aa8e277f8f3fc7eb483",
 +            "reference": "31055b15e2d3fe47f31f6aa8e277f8f3fc7eb483",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "ext-pcntl": "*",
 +            "ext-posix": "*",
 +            "ext-readline": "*",
 +            "php": ">=5.3.0"
 +        },
 +        "time": "2015-03-01 08:05:19",
 +        "bin": [
 +            "bin/boris"
 +        ],
 +        "type": "library",
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Boris": "lib"
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "description": "A tiny, but robust REPL (Read-Evaluate-Print-Loop) for PHP."
 +    },
 +    {
 +        "name": "symfony/filesystem",
 +        "version": "v2.6.6",
 +        "version_normalized": "2.6.6.0",
 +        "target-dir": "Symfony/Component/Filesystem",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/symfony/Filesystem.git",
 +            "reference": "4983964b3693e4f13449cb3800c64a9112c301b4"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/symfony/Filesystem/zipball/4983964b3693e4f13449cb3800c64a9112c301b4",
 +            "reference": "4983964b3693e4f13449cb3800c64a9112c301b4",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "php": ">=5.3.3"
 +        },
 +        "require-dev": {
 +            "symfony/phpunit-bridge": "~2.7"
 +        },
 +        "time": "2015-03-22 16:55:57",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "2.6-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "Symfony\\Component\\Filesystem\\": ""
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Symfony Community",
 +                "homepage": "http://symfony.com/contributors"
 +            },
 +            {
 +                "name": "Fabien Potencier",
 +                "email": "fabien@symfony.com"
 +            }
 +        ],
 +        "description": "Symfony Filesystem Component",
 +        "homepage": "http://symfony.com"
 +    },
 +    {
 +        "name": "classpreloader/classpreloader",
 +        "version": "1.0.2",
 +        "version_normalized": "1.0.2.0",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/ClassPreloader/ClassPreloader.git",
 +            "reference": "2c9f3bcbab329570c57339895bd11b5dd3b00877"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/ClassPreloader/ClassPreloader/zipball/2c9f3bcbab329570c57339895bd11b5dd3b00877",
 +            "reference": "2c9f3bcbab329570c57339895bd11b5dd3b00877",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "nikic/php-parser": "~0.9",
 +            "php": ">=5.3.3",
 +            "symfony/console": "~2.1",
 +            "symfony/filesystem": "~2.1",
 +            "symfony/finder": "~2.1"
 +        },
 +        "time": "2014-03-12 00:05:31",
 +        "bin": [
 +            "classpreloader.php"
 +        ],
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "1.0-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "psr-0": {
 +                "ClassPreloader": "src/"
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case",
 +        "keywords": [
 +            "autoload",
 +            "class",
 +            "preload"
 +        ]
 +    },
 +    {
 +        "name": "laravel/framework",
 +        "version": "v4.2.17",
 +        "version_normalized": "4.2.17.0",
 +        "source": {
 +            "type": "git",
 +            "url": "https://github.com/laravel/framework.git",
 +            "reference": "3359de6d6cd322e8a1b251c2f8d9dd42a3e4e232"
 +        },
 +        "dist": {
 +            "type": "zip",
 +            "url": "https://api.github.com/repos/laravel/framework/zipball/3359de6d6cd322e8a1b251c2f8d9dd42a3e4e232",
 +            "reference": "3359de6d6cd322e8a1b251c2f8d9dd42a3e4e232",
 +            "shasum": ""
 +        },
 +        "require": {
 +            "classpreloader/classpreloader": "~1.0.2",
 +            "d11wtq/boris": "~1.0",
 +            "filp/whoops": "1.1.*",
 +            "ircmaxell/password-compat": "~1.0",
 +            "jeremeamia/superclosure": "~1.0.1",
 +            "monolog/monolog": "~1.6",
 +            "nesbot/carbon": "~1.0",
 +            "patchwork/utf8": "~1.1",
 +            "php": ">=5.4.0",
 +            "phpseclib/phpseclib": "0.3.*",
 +            "predis/predis": "0.8.*",
 +            "stack/builder": "~1.0",
 +            "swiftmailer/swiftmailer": "~5.1",
 +            "symfony/browser-kit": "2.5.*",
 +            "symfony/console": "2.5.*",
 +            "symfony/css-selector": "2.5.*",
 +            "symfony/debug": "2.5.*",
 +            "symfony/dom-crawler": "2.5.*",
 +            "symfony/finder": "2.5.*",
 +            "symfony/http-foundation": "2.5.*",
 +            "symfony/http-kernel": "2.5.*",
 +            "symfony/process": "2.5.*",
 +            "symfony/routing": "2.5.*",
 +            "symfony/security-core": "2.5.*",
 +            "symfony/translation": "2.5.*"
 +        },
 +        "replace": {
 +            "illuminate/auth": "self.version",
 +            "illuminate/cache": "self.version",
 +            "illuminate/config": "self.version",
 +            "illuminate/console": "self.version",
 +            "illuminate/container": "self.version",
 +            "illuminate/cookie": "self.version",
 +            "illuminate/database": "self.version",
 +            "illuminate/encryption": "self.version",
 +            "illuminate/events": "self.version",
 +            "illuminate/exception": "self.version",
 +            "illuminate/filesystem": "self.version",
 +            "illuminate/foundation": "self.version",
 +            "illuminate/hashing": "self.version",
 +            "illuminate/html": "self.version",
 +            "illuminate/http": "self.version",
 +            "illuminate/log": "self.version",
 +            "illuminate/mail": "self.version",
 +            "illuminate/pagination": "self.version",
 +            "illuminate/queue": "self.version",
 +            "illuminate/redis": "self.version",
 +            "illuminate/remote": "self.version",
 +            "illuminate/routing": "self.version",
 +            "illuminate/session": "self.version",
 +            "illuminate/support": "self.version",
 +            "illuminate/translation": "self.version",
 +            "illuminate/validation": "self.version",
 +            "illuminate/view": "self.version",
 +            "illuminate/workbench": "self.version"
 +        },
 +        "require-dev": {
 +            "aws/aws-sdk-php": "~2.6",
 +            "iron-io/iron_mq": "~1.5",
 +            "mockery/mockery": "~0.9",
 +            "pda/pheanstalk": "~2.1",
 +            "phpunit/phpunit": "~4.0"
 +        },
 +        "suggest": {
 +            "doctrine/dbal": "Allow renaming columns and dropping SQLite columns."
 +        },
 +        "time": "2015-02-11 20:37:15",
 +        "type": "library",
 +        "extra": {
 +            "branch-alias": {
 +                "dev-master": "4.2-dev"
 +            }
 +        },
 +        "installation-source": "dist",
 +        "autoload": {
 +            "classmap": [
 +                "src/Illuminate/Queue/IlluminateQueueClosure.php"
 +            ],
 +            "files": [
 +                "src/Illuminate/Support/helpers.php"
 +            ],
 +            "psr-0": {
 +                "Illuminate": "src/"
 +            }
 +        },
 +        "notification-url": "https://packagist.org/downloads/",
 +        "license": [
 +            "MIT"
 +        ],
 +        "authors": [
 +            {
 +                "name": "Taylor Otwell",
 +                "email": "taylorotwell@gmail.com"
 +            }
 +        ],
 +        "description": "The Laravel Framework.",
 +        "keywords": [
 +            "framework",
 +            "laravel"
 +        ]
 +    }
 +]


[16/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php
new file mode 100755
index 0000000..1fb9665
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php
@@ -0,0 +1,2187 @@
+<?php namespace Illuminate\Database\Query;
+
+use Closure;
+use Illuminate\Support\Collection;
+use Illuminate\Database\ConnectionInterface;
+use Illuminate\Database\Query\Grammars\Grammar;
+use Illuminate\Database\Query\Processors\Processor;
+
+class Builder {
+
+	/**
+	 * The database connection instance.
+	 *
+	 * @var \Illuminate\Database\Connection
+	 */
+	protected $connection;
+
+	/**
+	 * The database query grammar instance.
+	 *
+	 * @var \Illuminate\Database\Query\Grammars\Grammar
+	 */
+	protected $grammar;
+
+	/**
+	 * The database query post processor instance.
+	 *
+	 * @var \Illuminate\Database\Query\Processors\Processor
+	 */
+	protected $processor;
+
+	/**
+	 * The current query value bindings.
+	 *
+	 * @var array
+	 */
+	protected $bindings = array(
+		'select' => [],
+		'join'   => [],
+		'where'  => [],
+		'having' => [],
+		'order'  => [],
+	);
+
+	/**
+	 * An aggregate function and column to be run.
+	 *
+	 * @var array
+	 */
+	public $aggregate;
+
+	/**
+	 * The columns that should be returned.
+	 *
+	 * @var array
+	 */
+	public $columns;
+
+	/**
+	 * Indicates if the query returns distinct results.
+	 *
+	 * @var bool
+	 */
+	public $distinct = false;
+
+	/**
+	 * The table which the query is targeting.
+	 *
+	 * @var string
+	 */
+	public $from;
+
+	/**
+	 * The table joins for the query.
+	 *
+	 * @var array
+	 */
+	public $joins;
+
+	/**
+	 * The where constraints for the query.
+	 *
+	 * @var array
+	 */
+	public $wheres;
+
+	/**
+	 * The groupings for the query.
+	 *
+	 * @var array
+	 */
+	public $groups;
+
+	/**
+	 * The having constraints for the query.
+	 *
+	 * @var array
+	 */
+	public $havings;
+
+	/**
+	 * The orderings for the query.
+	 *
+	 * @var array
+	 */
+	public $orders;
+
+	/**
+	 * The maximum number of records to return.
+	 *
+	 * @var int
+	 */
+	public $limit;
+
+	/**
+	 * The number of records to skip.
+	 *
+	 * @var int
+	 */
+	public $offset;
+
+	/**
+	 * The query union statements.
+	 *
+	 * @var array
+	 */
+	public $unions;
+
+	/**
+	 * The maximum number of union records to return.
+	 *
+	 * @var int
+	 */
+	public $unionLimit;
+
+	/**
+	 * The number of union records to skip.
+	 *
+	 * @var int
+	 */
+	public $unionOffset;
+
+	/**
+	 * The orderings for the union query.
+	 *
+	 * @var array
+	 */
+	public $unionOrders;
+
+	/**
+	 * Indicates whether row locking is being used.
+	 *
+	 * @var string|bool
+	 */
+	public $lock;
+
+	/**
+	 * The backups of fields while doing a pagination count.
+	 *
+	 * @var array
+	 */
+	protected $backups = array();
+
+	/**
+	 * The key that should be used when caching the query.
+	 *
+	 * @var string
+	 */
+	protected $cacheKey;
+
+	/**
+	 * The number of minutes to cache the query.
+	 *
+	 * @var int
+	 */
+	protected $cacheMinutes;
+
+	/**
+	 * The tags for the query cache.
+	 *
+	 * @var array
+	 */
+	protected $cacheTags;
+
+	/**
+	 * The cache driver to be used.
+	 *
+	 * @var string
+	 */
+	protected $cacheDriver;
+
+	/**
+	 * All of the available clause operators.
+	 *
+	 * @var array
+	 */
+	protected $operators = array(
+		'=', '<', '>', '<=', '>=', '<>', '!=',
+		'like', 'not like', 'between', 'ilike',
+		'&', '|', '^', '<<', '>>',
+		'rlike', 'regexp', 'not regexp',
+	);
+
+	/**
+	 * Whether use write pdo for select.
+	 *
+	 * @var bool
+	 */
+	protected $useWritePdo = false;
+
+	/**
+	 * Create a new query builder instance.
+	 *
+	 * @param  \Illuminate\Database\ConnectionInterface  $connection
+	 * @param  \Illuminate\Database\Query\Grammars\Grammar  $grammar
+	 * @param  \Illuminate\Database\Query\Processors\Processor  $processor
+	 * @return void
+	 */
+	public function __construct(ConnectionInterface $connection,
+                                Grammar $grammar,
+                                Processor $processor)
+	{
+		$this->grammar = $grammar;
+		$this->processor = $processor;
+		$this->connection = $connection;
+	}
+
+	/**
+	 * Set the columns to be selected.
+	 *
+	 * @param  array  $columns
+	 * @return $this
+	 */
+	public function select($columns = array('*'))
+	{
+		$this->columns = is_array($columns) ? $columns : func_get_args();
+
+		return $this;
+	}
+
+	/**
+	 * Add a new "raw" select expression to the query.
+	 *
+	 * @param  string  $expression
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function selectRaw($expression)
+	{
+		return $this->select(new Expression($expression));
+	}
+
+	/**
+	 * Add a new select column to the query.
+	 *
+	 * @param  mixed  $column
+	 * @return $this
+	 */
+	public function addSelect($column)
+	{
+		$column = is_array($column) ? $column : func_get_args();
+
+		$this->columns = array_merge((array) $this->columns, $column);
+
+		return $this;
+	}
+
+	/**
+	 * Force the query to only return distinct results.
+	 *
+	 * @return $this
+	 */
+	public function distinct()
+	{
+		$this->distinct = true;
+
+		return $this;
+	}
+
+	/**
+	 * Set the table which the query is targeting.
+	 *
+	 * @param  string  $table
+	 * @return $this
+	 */
+	public function from($table)
+	{
+		$this->from = $table;
+
+		return $this;
+	}
+
+	/**
+	 * Add a join clause to the query.
+	 *
+	 * @param  string  $table
+	 * @param  string  $one
+	 * @param  string  $operator
+	 * @param  string  $two
+	 * @param  string  $type
+	 * @param  bool    $where
+	 * @return $this
+	 */
+	public function join($table, $one, $operator = null, $two = null, $type = 'inner', $where = false)
+	{
+		// If the first "column" of the join is really a Closure instance the developer
+		// is trying to build a join with a complex "on" clause containing more than
+		// one condition, so we'll add the join and call a Closure with the query.
+		if ($one instanceof Closure)
+		{
+			$this->joins[] = new JoinClause($type, $table);
+
+			call_user_func($one, end($this->joins));
+		}
+
+		// If the column is simply a string, we can assume the join simply has a basic
+		// "on" clause with a single condition. So we will just build the join with
+		// this simple join clauses attached to it. There is not a join callback.
+		else
+		{
+			$join = new JoinClause($type, $table);
+
+			$this->joins[] = $join->on(
+				$one, $operator, $two, 'and', $where
+			);
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Add a "join where" clause to the query.
+	 *
+	 * @param  string  $table
+	 * @param  string  $one
+	 * @param  string  $operator
+	 * @param  string  $two
+	 * @param  string  $type
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function joinWhere($table, $one, $operator, $two, $type = 'inner')
+	{
+		return $this->join($table, $one, $operator, $two, $type, true);
+	}
+
+	/**
+	 * Add a left join to the query.
+	 *
+	 * @param  string  $table
+	 * @param  string  $first
+	 * @param  string  $operator
+	 * @param  string  $second
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function leftJoin($table, $first, $operator = null, $second = null)
+	{
+		return $this->join($table, $first, $operator, $second, 'left');
+	}
+
+	/**
+	 * Add a "join where" clause to the query.
+	 *
+	 * @param  string  $table
+	 * @param  string  $one
+	 * @param  string  $operator
+	 * @param  string  $two
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function leftJoinWhere($table, $one, $operator, $two)
+	{
+		return $this->joinWhere($table, $one, $operator, $two, 'left');
+	}
+
+	/**
+	 * Add a right join to the query.
+	 *
+	 * @param  string  $table
+	 * @param  string  $first
+	 * @param  string  $operator
+	 * @param  string  $second
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function rightJoin($table, $first, $operator = null, $second = null)
+	{
+		return $this->join($table, $first, $operator, $second, 'right');
+	}
+
+	/**
+	 * Add a "right join where" clause to the query.
+	 *
+	 * @param  string  $table
+	 * @param  string  $one
+	 * @param  string  $operator
+	 * @param  string  $two
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function rightJoinWhere($table, $one, $operator, $two)
+	{
+		return $this->joinWhere($table, $one, $operator, $two, 'right');
+	}
+
+	/**
+	 * Add a basic where clause to the query.
+	 *
+	 * @param  string  $column
+	 * @param  string  $operator
+	 * @param  mixed   $value
+	 * @param  string  $boolean
+	 * @return $this
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	public function where($column, $operator = null, $value = null, $boolean = 'and')
+	{
+		// If the column is an array, we will assume it is an array of key-value pairs
+		// and can add them each as a where clause. We will maintain the boolean we
+		// received when the method was called and pass it into the nested where.
+		if (is_array($column))
+		{
+			return $this->whereNested(function($query) use ($column)
+			{
+				foreach ($column as $key => $value)
+				{
+					$query->where($key, '=', $value);
+				}
+			}, $boolean);
+		}
+
+		// Here we will make some assumptions about the operator. If only 2 values are
+		// passed to the method, we will assume that the operator is an equals sign
+		// and keep going. Otherwise, we'll require the operator to be passed in.
+		if (func_num_args() == 2)
+		{
+			list($value, $operator) = array($operator, '=');
+		}
+		elseif ($this->invalidOperatorAndValue($operator, $value))
+		{
+			throw new \InvalidArgumentException("Value must be provided.");
+		}
+
+		// If the columns is actually a Closure instance, we will assume the developer
+		// wants to begin a nested where statement which is wrapped in parenthesis.
+		// We'll add that Closure to the query then return back out immediately.
+		if ($column instanceof Closure)
+		{
+			return $this->whereNested($column, $boolean);
+		}
+
+		// If the given operator is not found in the list of valid operators we will
+		// assume that the developer is just short-cutting the '=' operators and
+		// we will set the operators to '=' and set the values appropriately.
+		if ( ! in_array(strtolower($operator), $this->operators, true))
+		{
+			list($value, $operator) = array($operator, '=');
+		}
+
+		// If the value is a Closure, it means the developer is performing an entire
+		// sub-select within the query and we will need to compile the sub-select
+		// within the where clause to get the appropriate query record results.
+		if ($value instanceof Closure)
+		{
+			return $this->whereSub($column, $operator, $value, $boolean);
+		}
+
+		// If the value is "null", we will just assume the developer wants to add a
+		// where null clause to the query. So, we will allow a short-cut here to
+		// that method for convenience so the developer doesn't have to check.
+		if (is_null($value))
+		{
+			return $this->whereNull($column, $boolean, $operator != '=');
+		}
+
+		// Now that we are working with just a simple query we can put the elements
+		// in our array and add the query binding to our array of bindings that
+		// will be bound to each SQL statements when it is finally executed.
+		$type = 'Basic';
+
+		$this->wheres[] = compact('type', 'column', 'operator', 'value', 'boolean');
+
+		if ( ! $value instanceof Expression)
+		{
+			$this->addBinding($value, 'where');
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Add an "or where" clause to the query.
+	 *
+	 * @param  string  $column
+	 * @param  string  $operator
+	 * @param  mixed   $value
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function orWhere($column, $operator = null, $value = null)
+	{
+		return $this->where($column, $operator, $value, 'or');
+	}
+
+	/**
+	 * Determine if the given operator and value combination is legal.
+	 *
+	 * @param  string  $operator
+	 * @param  mixed  $value
+	 * @return bool
+	 */
+	protected function invalidOperatorAndValue($operator, $value)
+	{
+		$isOperator = in_array($operator, $this->operators);
+
+		return ($isOperator && $operator != '=' && is_null($value));
+	}
+
+	/**
+	 * Add a raw where clause to the query.
+	 *
+	 * @param  string  $sql
+	 * @param  array   $bindings
+	 * @param  string  $boolean
+	 * @return $this
+	 */
+	public function whereRaw($sql, array $bindings = array(), $boolean = 'and')
+	{
+		$type = 'raw';
+
+		$this->wheres[] = compact('type', 'sql', 'boolean');
+
+		$this->addBinding($bindings, 'where');
+
+		return $this;
+	}
+
+	/**
+	 * Add a raw or where clause to the query.
+	 *
+	 * @param  string  $sql
+	 * @param  array   $bindings
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function orWhereRaw($sql, array $bindings = array())
+	{
+		return $this->whereRaw($sql, $bindings, 'or');
+	}
+
+	/**
+	 * Add a where between statement to the query.
+	 *
+	 * @param  string  $column
+	 * @param  array   $values
+	 * @param  string  $boolean
+	 * @param  bool  $not
+	 * @return $this
+	 */
+	public function whereBetween($column, array $values, $boolean = 'and', $not = false)
+	{
+		$type = 'between';
+
+		$this->wheres[] = compact('column', 'type', 'boolean', 'not');
+
+		$this->addBinding($values, 'where');
+
+		return $this;
+	}
+
+	/**
+	 * Add an or where between statement to the query.
+	 *
+	 * @param  string  $column
+	 * @param  array   $values
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function orWhereBetween($column, array $values)
+	{
+		return $this->whereBetween($column, $values, 'or');
+	}
+
+	/**
+	 * Add a where not between statement to the query.
+	 *
+	 * @param  string  $column
+	 * @param  array   $values
+	 * @param  string  $boolean
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function whereNotBetween($column, array $values, $boolean = 'and')
+	{
+		return $this->whereBetween($column, $values, $boolean, true);
+	}
+
+	/**
+	 * Add an or where not between statement to the query.
+	 *
+	 * @param  string  $column
+	 * @param  array   $values
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function orWhereNotBetween($column, array $values)
+	{
+		return $this->whereNotBetween($column, $values, 'or');
+	}
+
+	/**
+	 * Add a nested where statement to the query.
+	 *
+	 * @param  \Closure $callback
+	 * @param  string   $boolean
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function whereNested(Closure $callback, $boolean = 'and')
+	{
+		// To handle nested queries we'll actually create a brand new query instance
+		// and pass it off to the Closure that we have. The Closure can simply do
+		// do whatever it wants to a query then we will store it for compiling.
+		$query = $this->newQuery();
+
+		$query->from($this->from);
+
+		call_user_func($callback, $query);
+
+		return $this->addNestedWhereQuery($query, $boolean);
+	}
+
+	/**
+	 * Add another query builder as a nested where to the query builder.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder|static $query
+	 * @param  string  $boolean
+	 * @return $this
+	 */
+	public function addNestedWhereQuery($query, $boolean = 'and')
+	{
+		if (count($query->wheres))
+		{
+			$type = 'Nested';
+
+			$this->wheres[] = compact('type', 'query', 'boolean');
+
+			$this->mergeBindings($query);
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Add a full sub-select to the query.
+	 *
+	 * @param  string   $column
+	 * @param  string   $operator
+	 * @param  \Closure $callback
+	 * @param  string   $boolean
+	 * @return $this
+	 */
+	protected function whereSub($column, $operator, Closure $callback, $boolean)
+	{
+		$type = 'Sub';
+
+		$query = $this->newQuery();
+
+		// Once we have the query instance we can simply execute it so it can add all
+		// of the sub-select's conditions to itself, and then we can cache it off
+		// in the array of where clauses for the "main" parent query instance.
+		call_user_func($callback, $query);
+
+		$this->wheres[] = compact('type', 'column', 'operator', 'query', 'boolean');
+
+		$this->mergeBindings($query);
+
+		return $this;
+	}
+
+	/**
+	 * Add an exists clause to the query.
+	 *
+	 * @param  \Closure $callback
+	 * @param  string   $boolean
+	 * @param  bool     $not
+	 * @return $this
+	 */
+	public function whereExists(Closure $callback, $boolean = 'and', $not = false)
+	{
+		$type = $not ? 'NotExists' : 'Exists';
+
+		$query = $this->newQuery();
+
+		// Similar to the sub-select clause, we will create a new query instance so
+		// the developer may cleanly specify the entire exists query and we will
+		// compile the whole thing in the grammar and insert it into the SQL.
+		call_user_func($callback, $query);
+
+		$this->wheres[] = compact('type', 'operator', 'query', 'boolean');
+
+		$this->mergeBindings($query);
+
+		return $this;
+	}
+
+	/**
+	 * Add an or exists clause to the query.
+	 *
+	 * @param  \Closure $callback
+	 * @param  bool     $not
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function orWhereExists(Closure $callback, $not = false)
+	{
+		return $this->whereExists($callback, 'or', $not);
+	}
+
+	/**
+	 * Add a where not exists clause to the query.
+	 *
+	 * @param  \Closure $callback
+	 * @param  string   $boolean
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function whereNotExists(Closure $callback, $boolean = 'and')
+	{
+		return $this->whereExists($callback, $boolean, true);
+	}
+
+	/**
+	 * Add a where not exists clause to the query.
+	 *
+	 * @param  \Closure  $callback
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function orWhereNotExists(Closure $callback)
+	{
+		return $this->orWhereExists($callback, true);
+	}
+
+	/**
+	 * Add a "where in" clause to the query.
+	 *
+	 * @param  string  $column
+	 * @param  mixed   $values
+	 * @param  string  $boolean
+	 * @param  bool    $not
+	 * @return $this
+	 */
+	public function whereIn($column, $values, $boolean = 'and', $not = false)
+	{
+		$type = $not ? 'NotIn' : 'In';
+
+		// If the value of the where in clause is actually a Closure, we will assume that
+		// the developer is using a full sub-select for this "in" statement, and will
+		// execute those Closures, then we can re-construct the entire sub-selects.
+		if ($values instanceof Closure)
+		{
+			return $this->whereInSub($column, $values, $boolean, $not);
+		}
+
+		$this->wheres[] = compact('type', 'column', 'values', 'boolean');
+
+		$this->addBinding($values, 'where');
+
+		return $this;
+	}
+
+	/**
+	 * Add an "or where in" clause to the query.
+	 *
+	 * @param  string  $column
+	 * @param  mixed   $values
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function orWhereIn($column, $values)
+	{
+		return $this->whereIn($column, $values, 'or');
+	}
+
+	/**
+	 * Add a "where not in" clause to the query.
+	 *
+	 * @param  string  $column
+	 * @param  mixed   $values
+	 * @param  string  $boolean
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function whereNotIn($column, $values, $boolean = 'and')
+	{
+		return $this->whereIn($column, $values, $boolean, true);
+	}
+
+	/**
+	 * Add an "or where not in" clause to the query.
+	 *
+	 * @param  string  $column
+	 * @param  mixed   $values
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function orWhereNotIn($column, $values)
+	{
+		return $this->whereNotIn($column, $values, 'or');
+	}
+
+	/**
+	 * Add a where in with a sub-select to the query.
+	 *
+	 * @param  string   $column
+	 * @param  \Closure $callback
+	 * @param  string   $boolean
+	 * @param  bool     $not
+	 * @return $this
+	 */
+	protected function whereInSub($column, Closure $callback, $boolean, $not)
+	{
+		$type = $not ? 'NotInSub' : 'InSub';
+
+		// To create the exists sub-select, we will actually create a query and call the
+		// provided callback with the query so the developer may set any of the query
+		// conditions they want for the in clause, then we'll put it in this array.
+		call_user_func($callback, $query = $this->newQuery());
+
+		$this->wheres[] = compact('type', 'column', 'query', 'boolean');
+
+		$this->mergeBindings($query);
+
+		return $this;
+	}
+
+	/**
+	 * Add a "where null" clause to the query.
+	 *
+	 * @param  string  $column
+	 * @param  string  $boolean
+	 * @param  bool    $not
+	 * @return $this
+	 */
+	public function whereNull($column, $boolean = 'and', $not = false)
+	{
+		$type = $not ? 'NotNull' : 'Null';
+
+		$this->wheres[] = compact('type', 'column', 'boolean');
+
+		return $this;
+	}
+
+	/**
+	 * Add an "or where null" clause to the query.
+	 *
+	 * @param  string  $column
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function orWhereNull($column)
+	{
+		return $this->whereNull($column, 'or');
+	}
+
+	/**
+	 * Add a "where not null" clause to the query.
+	 *
+	 * @param  string  $column
+	 * @param  string  $boolean
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function whereNotNull($column, $boolean = 'and')
+	{
+		return $this->whereNull($column, $boolean, true);
+	}
+
+	/**
+	 * Add an "or where not null" clause to the query.
+	 *
+	 * @param  string  $column
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function orWhereNotNull($column)
+	{
+		return $this->whereNotNull($column, 'or');
+	}
+
+	/**
+	 * Add a "where date" statement to the query.
+	 *
+	 * @param  string  $column
+	 * @param  string   $operator
+	 * @param  int   $value
+	 * @param  string   $boolean
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function whereDate($column, $operator, $value, $boolean = 'and')
+	{
+		return $this->addDateBasedWhere('Date', $column, $operator, $value, $boolean);
+	}
+
+	/**
+	 * Add a "where day" statement to the query.
+	 *
+	 * @param  string  $column
+	 * @param  string   $operator
+	 * @param  int   $value
+	 * @param  string   $boolean
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function whereDay($column, $operator, $value, $boolean = 'and')
+	{
+		return $this->addDateBasedWhere('Day', $column, $operator, $value, $boolean);
+	}
+
+	/**
+	 * Add a "where month" statement to the query.
+	 *
+	 * @param  string  $column
+	 * @param  string   $operator
+	 * @param  int   $value
+	 * @param  string   $boolean
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function whereMonth($column, $operator, $value, $boolean = 'and')
+	{
+		return $this->addDateBasedWhere('Month', $column, $operator, $value, $boolean);
+	}
+
+	/**
+	 * Add a "where year" statement to the query.
+	 *
+	 * @param  string  $column
+	 * @param  string   $operator
+	 * @param  int   $value
+	 * @param  string   $boolean
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function whereYear($column, $operator, $value, $boolean = 'and')
+	{
+		return $this->addDateBasedWhere('Year', $column, $operator, $value, $boolean);
+	}
+
+	/**
+	 * Add a date based (year, month, day) statement to the query.
+	 *
+	 * @param  string  $type
+	 * @param  string  $column
+	 * @param  string  $operator
+	 * @param  int  $value
+	 * @param  string  $boolean
+	 * @return $this
+	 */
+	protected function addDateBasedWhere($type, $column, $operator, $value, $boolean = 'and')
+	{
+		$this->wheres[] = compact('column', 'type', 'boolean', 'operator', 'value');
+
+		$this->addBinding($value, 'where');
+
+		return $this;
+	}
+
+	/**
+	 * Handles dynamic "where" clauses to the query.
+	 *
+	 * @param  string  $method
+	 * @param  string  $parameters
+	 * @return $this
+	 */
+	public function dynamicWhere($method, $parameters)
+	{
+		$finder = substr($method, 5);
+
+		$segments = preg_split('/(And|Or)(?=[A-Z])/', $finder, -1, PREG_SPLIT_DELIM_CAPTURE);
+
+		// The connector variable will determine which connector will be used for the
+		// query condition. We will change it as we come across new boolean values
+		// in the dynamic method strings, which could contain a number of these.
+		$connector = 'and';
+
+		$index = 0;
+
+		foreach ($segments as $segment)
+		{
+			// If the segment is not a boolean connector, we can assume it is a column's name
+			// and we will add it to the query as a new constraint as a where clause, then
+			// we can keep iterating through the dynamic method string's segments again.
+			if ($segment != 'And' && $segment != 'Or')
+			{
+				$this->addDynamic($segment, $connector, $parameters, $index);
+
+				$index++;
+			}
+
+			// Otherwise, we will store the connector so we know how the next where clause we
+			// find in the query should be connected to the previous ones, meaning we will
+			// have the proper boolean connector to connect the next where clause found.
+			else
+			{
+				$connector = $segment;
+			}
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Add a single dynamic where clause statement to the query.
+	 *
+	 * @param  string  $segment
+	 * @param  string  $connector
+	 * @param  array   $parameters
+	 * @param  int     $index
+	 * @return void
+	 */
+	protected function addDynamic($segment, $connector, $parameters, $index)
+	{
+		// Once we have parsed out the columns and formatted the boolean operators we
+		// are ready to add it to this query as a where clause just like any other
+		// clause on the query. Then we'll increment the parameter index values.
+		$bool = strtolower($connector);
+
+		$this->where(snake_case($segment), '=', $parameters[$index], $bool);
+	}
+
+	/**
+	 * Add a "group by" clause to the query.
+	 *
+	 * @param  array|string  $column,...
+	 * @return $this
+	 */
+	public function groupBy()
+	{
+		foreach (func_get_args() as $arg)
+		{
+			$this->groups = array_merge((array) $this->groups, is_array($arg) ? $arg : [$arg]);
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Add a "having" clause to the query.
+	 *
+	 * @param  string  $column
+	 * @param  string  $operator
+	 * @param  string  $value
+	 * @param  string  $boolean
+	 * @return $this
+	 */
+	public function having($column, $operator = null, $value = null, $boolean = 'and')
+	{
+		$type = 'basic';
+
+		$this->havings[] = compact('type', 'column', 'operator', 'value', 'boolean');
+
+		$this->addBinding($value, 'having');
+
+		return $this;
+	}
+
+	/**
+	 * Add a "or having" clause to the query.
+	 *
+	 * @param  string  $column
+	 * @param  string  $operator
+	 * @param  string  $value
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function orHaving($column, $operator = null, $value = null)
+	{
+		return $this->having($column, $operator, $value, 'or');
+	}
+
+	/**
+	 * Add a raw having clause to the query.
+	 *
+	 * @param  string  $sql
+	 * @param  array   $bindings
+	 * @param  string  $boolean
+	 * @return $this
+	 */
+	public function havingRaw($sql, array $bindings = array(), $boolean = 'and')
+	{
+		$type = 'raw';
+
+		$this->havings[] = compact('type', 'sql', 'boolean');
+
+		$this->addBinding($bindings, 'having');
+
+		return $this;
+	}
+
+	/**
+	 * Add a raw or having clause to the query.
+	 *
+	 * @param  string  $sql
+	 * @param  array   $bindings
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function orHavingRaw($sql, array $bindings = array())
+	{
+		return $this->havingRaw($sql, $bindings, 'or');
+	}
+
+	/**
+	 * Add an "order by" clause to the query.
+	 *
+	 * @param  string  $column
+	 * @param  string  $direction
+	 * @return $this
+	 */
+	public function orderBy($column, $direction = 'asc')
+	{
+		$property = $this->unions ? 'unionOrders' : 'orders';
+		$direction = strtolower($direction) == 'asc' ? 'asc' : 'desc';
+
+		$this->{$property}[] = compact('column', 'direction');
+
+		return $this;
+	}
+
+	/**
+	 * Add an "order by" clause for a timestamp to the query.
+	 *
+	 * @param  string  $column
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function latest($column = 'created_at')
+	{
+		return $this->orderBy($column, 'desc');
+	}
+
+	/**
+	 * Add an "order by" clause for a timestamp to the query.
+	 *
+	 * @param  string  $column
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function oldest($column = 'created_at')
+	{
+		return $this->orderBy($column, 'asc');
+	}
+
+	/**
+	 * Add a raw "order by" clause to the query.
+	 *
+	 * @param  string  $sql
+	 * @param  array  $bindings
+	 * @return $this
+	 */
+	public function orderByRaw($sql, $bindings = array())
+	{
+		$type = 'raw';
+
+		$this->orders[] = compact('type', 'sql');
+
+		$this->addBinding($bindings, 'order');
+
+		return $this;
+	}
+
+	/**
+	 * Set the "offset" value of the query.
+	 *
+	 * @param  int  $value
+	 * @return $this
+	 */
+	public function offset($value)
+	{
+		$property = $this->unions ? 'unionOffset' : 'offset';
+
+		$this->$property = max(0, $value);
+
+		return $this;
+	}
+
+	/**
+	 * Alias to set the "offset" value of the query.
+	 *
+	 * @param  int  $value
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function skip($value)
+	{
+		return $this->offset($value);
+	}
+
+	/**
+	 * Set the "limit" value of the query.
+	 *
+	 * @param  int  $value
+	 * @return $this
+	 */
+	public function limit($value)
+	{
+		$property = $this->unions ? 'unionLimit' : 'limit';
+
+		if ($value > 0) $this->$property = $value;
+
+		return $this;
+	}
+
+	/**
+	 * Alias to set the "limit" value of the query.
+	 *
+	 * @param  int  $value
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function take($value)
+	{
+		return $this->limit($value);
+	}
+
+	/**
+	 * Set the limit and offset for a given page.
+	 *
+	 * @param  int  $page
+	 * @param  int  $perPage
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function forPage($page, $perPage = 15)
+	{
+		return $this->skip(($page - 1) * $perPage)->take($perPage);
+	}
+
+	/**
+	 * Add a union statement to the query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder|\Closure  $query
+	 * @param  bool  $all
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function union($query, $all = false)
+	{
+		if ($query instanceof Closure)
+		{
+			call_user_func($query, $query = $this->newQuery());
+		}
+
+		$this->unions[] = compact('query', 'all');
+
+		return $this->mergeBindings($query);
+	}
+
+	/**
+	 * Add a union all statement to the query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder|\Closure  $query
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function unionAll($query)
+	{
+		return $this->union($query, true);
+	}
+
+	/**
+	 * Lock the selected rows in the table.
+	 *
+	 * @param  bool  $value
+	 * @return $this
+	 */
+	public function lock($value = true)
+	{
+		$this->lock = $value;
+
+		return $this;
+	}
+
+	/**
+	 * Lock the selected rows in the table for updating.
+	 *
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	public function lockForUpdate()
+	{
+		return $this->lock(true);
+	}
+
+	/**
+	 * Share lock the selected rows in the table.
+	 *
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	public function sharedLock()
+	{
+		return $this->lock(false);
+	}
+
+	/**
+	 * Get the SQL representation of the query.
+	 *
+	 * @return string
+	 */
+	public function toSql()
+	{
+		return $this->grammar->compileSelect($this);
+	}
+
+	/**
+	 * Indicate that the query results should be cached.
+	 *
+	 * @param  \DateTime|int  $minutes
+	 * @param  string  $key
+	 * @return $this
+	 */
+	public function remember($minutes, $key = null)
+	{
+		list($this->cacheMinutes, $this->cacheKey) = array($minutes, $key);
+
+		return $this;
+	}
+
+	/**
+	 * Indicate that the query results should be cached forever.
+	 *
+	 * @param  string  $key
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function rememberForever($key = null)
+	{
+		return $this->remember(-1, $key);
+	}
+
+	/**
+	 * Indicate that the results, if cached, should use the given cache tags.
+	 *
+	 * @param  array|mixed  $cacheTags
+	 * @return $this
+	 */
+	public function cacheTags($cacheTags)
+	{
+		$this->cacheTags = $cacheTags;
+
+		return $this;
+	}
+
+	/**
+	 * Indicate that the results, if cached, should use the given cache driver.
+	 *
+	 * @param  string  $cacheDriver
+	 * @return $this
+	 */
+	public function cacheDriver($cacheDriver)
+	{
+		$this->cacheDriver = $cacheDriver;
+
+		return $this;
+	}
+
+	/**
+	 * Execute a query for a single record by ID.
+	 *
+	 * @param  int    $id
+	 * @param  array  $columns
+	 * @return mixed|static
+	 */
+	public function find($id, $columns = array('*'))
+	{
+		return $this->where('id', '=', $id)->first($columns);
+	}
+
+	/**
+	 * Pluck a single column's value from the first result of a query.
+	 *
+	 * @param  string  $column
+	 * @return mixed
+	 */
+	public function pluck($column)
+	{
+		$result = (array) $this->first(array($column));
+
+		return count($result) > 0 ? reset($result) : null;
+	}
+
+	/**
+	 * Execute the query and get the first result.
+	 *
+	 * @param  array   $columns
+	 * @return mixed|static
+	 */
+	public function first($columns = array('*'))
+	{
+		$results = $this->take(1)->get($columns);
+
+		return count($results) > 0 ? reset($results) : null;
+	}
+
+	/**
+	 * Execute the query as a "select" statement.
+	 *
+	 * @param  array  $columns
+	 * @return array|static[]
+	 */
+	public function get($columns = array('*'))
+	{
+		if ( ! is_null($this->cacheMinutes)) return $this->getCached($columns);
+
+		return $this->getFresh($columns);
+	}
+
+	/**
+	 * Execute the query as a fresh "select" statement.
+	 *
+	 * @param  array  $columns
+	 * @return array|static[]
+	 */
+	public function getFresh($columns = array('*'))
+	{
+		if (is_null($this->columns)) $this->columns = $columns;
+
+		return $this->processor->processSelect($this, $this->runSelect());
+	}
+
+	/**
+	 * Run the query as a "select" statement against the connection.
+	 *
+	 * @return array
+	 */
+	protected function runSelect()
+	{
+		if ($this->useWritePdo)
+		{
+			return $this->connection->select($this->toSql(), $this->getBindings(), false);
+		}
+
+		return $this->connection->select($this->toSql(), $this->getBindings());
+	}
+
+	/**
+	 * Execute the query as a cached "select" statement.
+	 *
+	 * @param  array  $columns
+	 * @return array
+	 */
+	public function getCached($columns = array('*'))
+	{
+		if (is_null($this->columns)) $this->columns = $columns;
+
+		// If the query is requested to be cached, we will cache it using a unique key
+		// for this database connection and query statement, including the bindings
+		// that are used on this query, providing great convenience when caching.
+		list($key, $minutes) = $this->getCacheInfo();
+
+		$cache = $this->getCache();
+
+		$callback = $this->getCacheCallback($columns);
+
+		// If the "minutes" value is less than zero, we will use that as the indicator
+		// that the value should be remembered values should be stored indefinitely
+		// and if we have minutes we will use the typical remember function here.
+		if ($minutes < 0)
+		{
+			return $cache->rememberForever($key, $callback);
+		}
+
+		return $cache->remember($key, $minutes, $callback);
+	}
+
+	/**
+	 * Get the cache object with tags assigned, if applicable.
+	 *
+	 * @return \Illuminate\Cache\CacheManager
+	 */
+	protected function getCache()
+	{
+		$cache = $this->connection->getCacheManager()->driver($this->cacheDriver);
+
+		return $this->cacheTags ? $cache->tags($this->cacheTags) : $cache;
+	}
+
+	/**
+	 * Get the cache key and cache minutes as an array.
+	 *
+	 * @return array
+	 */
+	protected function getCacheInfo()
+	{
+		return array($this->getCacheKey(), $this->cacheMinutes);
+	}
+
+	/**
+	 * Get a unique cache key for the complete query.
+	 *
+	 * @return string
+	 */
+	public function getCacheKey()
+	{
+		return $this->cacheKey ?: $this->generateCacheKey();
+	}
+
+	/**
+	 * Generate the unique cache key for the query.
+	 *
+	 * @return string
+	 */
+	public function generateCacheKey()
+	{
+		$name = $this->connection->getName();
+
+		return md5($name.$this->toSql().serialize($this->getBindings()));
+	}
+
+	/**
+	 * Get the Closure callback used when caching queries.
+	 *
+	 * @param  array  $columns
+	 * @return \Closure
+	 */
+	protected function getCacheCallback($columns)
+	{
+		return function() use ($columns) { return $this->getFresh($columns); };
+	}
+
+	/**
+	 * Chunk the results of the query.
+	 *
+	 * @param  int  $count
+	 * @param  callable  $callback
+	 * @return void
+	 */
+	public function chunk($count, callable $callback)
+	{
+		$results = $this->forPage($page = 1, $count)->get();
+
+		while (count($results) > 0)
+		{
+			// On each chunk result set, we will pass them to the callback and then let the
+			// developer take care of everything within the callback, which allows us to
+			// keep the memory low for spinning through large result sets for working.
+			call_user_func($callback, $results);
+
+			$page++;
+
+			$results = $this->forPage($page, $count)->get();
+		}
+	}
+
+	/**
+	 * Get an array with the values of a given column.
+	 *
+	 * @param  string  $column
+	 * @param  string  $key
+	 * @return array
+	 */
+	public function lists($column, $key = null)
+	{
+		$columns = $this->getListSelect($column, $key);
+
+		// First we will just get all of the column values for the record result set
+		// then we can associate those values with the column if it was specified
+		// otherwise we can just give these values back without a specific key.
+		$results = new Collection($this->get($columns));
+
+		$values = $results->fetch($columns[0])->all();
+
+		// If a key was specified and we have results, we will go ahead and combine
+		// the values with the keys of all of the records so that the values can
+		// be accessed by the key of the rows instead of simply being numeric.
+		if ( ! is_null($key) && count($results) > 0)
+		{
+			$keys = $results->fetch($key)->all();
+
+			return array_combine($keys, $values);
+		}
+
+		return $values;
+	}
+
+	/**
+	 * Get the columns that should be used in a list array.
+	 *
+	 * @param  string  $column
+	 * @param  string  $key
+	 * @return array
+	 */
+	protected function getListSelect($column, $key)
+	{
+		$select = is_null($key) ? array($column) : array($column, $key);
+
+		// If the selected column contains a "dot", we will remove it so that the list
+		// operation can run normally. Specifying the table is not needed, since we
+		// really want the names of the columns as it is in this resulting array.
+		if (($dot = strpos($select[0], '.')) !== false)
+		{
+			$select[0] = substr($select[0], $dot + 1);
+		}
+
+		return $select;
+	}
+
+	/**
+	 * Concatenate values of a given column as a string.
+	 *
+	 * @param  string  $column
+	 * @param  string  $glue
+	 * @return string
+	 */
+	public function implode($column, $glue = null)
+	{
+		if (is_null($glue)) return implode($this->lists($column));
+
+		return implode($glue, $this->lists($column));
+	}
+
+	/**
+	 * Get a paginator for the "select" statement.
+	 *
+	 * @param  int    $perPage
+	 * @param  array  $columns
+	 * @return \Illuminate\Pagination\Paginator
+	 */
+	public function paginate($perPage = 15, $columns = array('*'))
+	{
+		$paginator = $this->connection->getPaginator();
+
+		if (isset($this->groups))
+		{
+			return $this->groupedPaginate($paginator, $perPage, $columns);
+		}
+
+		return $this->ungroupedPaginate($paginator, $perPage, $columns);
+	}
+
+	/**
+	 * Create a paginator for a grouped pagination statement.
+	 *
+	 * @param  \Illuminate\Pagination\Factory  $paginator
+	 * @param  int    $perPage
+	 * @param  array  $columns
+	 * @return \Illuminate\Pagination\Paginator
+	 */
+	protected function groupedPaginate($paginator, $perPage, $columns)
+	{
+		$results = $this->get($columns);
+
+		return $this->buildRawPaginator($paginator, $results, $perPage);
+	}
+
+	/**
+	 * Build a paginator instance from a raw result array.
+	 *
+	 * @param  \Illuminate\Pagination\Factory  $paginator
+	 * @param  array  $results
+	 * @param  int    $perPage
+	 * @return \Illuminate\Pagination\Paginator
+	 */
+	public function buildRawPaginator($paginator, $results, $perPage)
+	{
+		// For queries which have a group by, we will actually retrieve the entire set
+		// of rows from the table and "slice" them via PHP. This is inefficient and
+		// the developer must be aware of this behavior; however, it's an option.
+		$start = ($paginator->getCurrentPage() - 1) * $perPage;
+
+		$sliced = array_slice($results, $start, $perPage);
+
+		return $paginator->make($sliced, count($results), $perPage);
+	}
+
+	/**
+	 * Create a paginator for an un-grouped pagination statement.
+	 *
+	 * @param  \Illuminate\Pagination\Factory  $paginator
+	 * @param  int    $perPage
+	 * @param  array  $columns
+	 * @return \Illuminate\Pagination\Paginator
+	 */
+	protected function ungroupedPaginate($paginator, $perPage, $columns)
+	{
+		$total = $this->getPaginationCount();
+
+		// Once we have the total number of records to be paginated, we can grab the
+		// current page and the result array. Then we are ready to create a brand
+		// new Paginator instances for the results which will create the links.
+		$page = $paginator->getCurrentPage($total);
+
+		$results = $this->forPage($page, $perPage)->get($columns);
+
+		return $paginator->make($results, $total, $perPage);
+	}
+
+	/**
+	 * Get the count of the total records for pagination.
+	 *
+	 * @return int
+	 */
+	public function getPaginationCount()
+	{
+		$this->backupFieldsForCount();
+
+		// Because some database engines may throw errors if we leave the ordering
+		// statements on the query, we will "back them up" and remove them from
+		// the query. Once we have the count we will put them back onto this.
+		$total = $this->count();
+
+		$this->restoreFieldsForCount();
+
+		return $total;
+	}
+
+	/**
+	 * Get a paginator only supporting simple next and previous links.
+	 *
+	 * This is more efficient on larger data-sets, etc.
+	 *
+	 * @param  int    $perPage
+	 * @param  array  $columns
+	 * @return \Illuminate\Pagination\Paginator
+	 */
+	public function simplePaginate($perPage = null, $columns = array('*'))
+	{
+		$paginator = $this->connection->getPaginator();
+
+		$page = $paginator->getCurrentPage();
+
+		$perPage = $perPage ?: $this->model->getPerPage();
+
+		$this->skip(($page - 1) * $perPage)->take($perPage + 1);
+
+		return $paginator->make($this->get($columns), $perPage);
+	}
+
+	/**
+	 * Backup certain fields for a pagination count.
+	 *
+	 * @return void
+	 */
+	protected function backupFieldsForCount()
+	{
+		foreach (array('orders', 'limit', 'offset') as $field)
+		{
+			$this->backups[$field] = $this->{$field};
+
+			$this->{$field} = null;
+		}
+
+	}
+
+	/**
+	 * Restore certain fields for a pagination count.
+	 *
+	 * @return void
+	 */
+	protected function restoreFieldsForCount()
+	{
+		foreach (array('orders', 'limit', 'offset') as $field)
+		{
+			$this->{$field} = $this->backups[$field];
+		}
+
+		$this->backups = array();
+	}
+
+	/**
+	 * Determine if any rows exist for the current query.
+	 *
+	 * @return bool
+	 */
+	public function exists()
+	{
+		$limit = $this->limit;
+
+		$result = $this->limit(1)->count() > 0;
+
+		$this->limit($limit);
+
+		return $result;
+	}
+
+	/**
+	 * Retrieve the "count" result of the query.
+	 *
+	 * @param  string  $columns
+	 * @return int
+	 */
+	public function count($columns = '*')
+	{
+		if ( ! is_array($columns))
+		{
+			$columns = array($columns);
+		}
+
+		return (int) $this->aggregate(__FUNCTION__, $columns);
+	}
+
+	/**
+	 * Retrieve the minimum value of a given column.
+	 *
+	 * @param  string  $column
+	 * @return mixed
+	 */
+	public function min($column)
+	{
+		return $this->aggregate(__FUNCTION__, array($column));
+	}
+
+	/**
+	 * Retrieve the maximum value of a given column.
+	 *
+	 * @param  string  $column
+	 * @return mixed
+	 */
+	public function max($column)
+	{
+		return $this->aggregate(__FUNCTION__, array($column));
+	}
+
+	/**
+	 * Retrieve the sum of the values of a given column.
+	 *
+	 * @param  string  $column
+	 * @return mixed
+	 */
+	public function sum($column)
+	{
+		$result = $this->aggregate(__FUNCTION__, array($column));
+
+		return $result ?: 0;
+	}
+
+	/**
+	 * Retrieve the average of the values of a given column.
+	 *
+	 * @param  string  $column
+	 * @return mixed
+	 */
+	public function avg($column)
+	{
+		return $this->aggregate(__FUNCTION__, array($column));
+	}
+
+	/**
+	 * Execute an aggregate function on the database.
+	 *
+	 * @param  string  $function
+	 * @param  array   $columns
+	 * @return mixed
+	 */
+	public function aggregate($function, $columns = array('*'))
+	{
+		$this->aggregate = compact('function', 'columns');
+
+		$previousColumns = $this->columns;
+
+		$results = $this->get($columns);
+
+		// Once we have executed the query, we will reset the aggregate property so
+		// that more select queries can be executed against the database without
+		// the aggregate value getting in the way when the grammar builds it.
+		$this->aggregate = null;
+
+		$this->columns = $previousColumns;
+
+		if (isset($results[0]))
+		{
+			$result = array_change_key_case((array) $results[0]);
+
+			return $result['aggregate'];
+		}
+	}
+
+	/**
+	 * Insert a new record into the database.
+	 *
+	 * @param  array  $values
+	 * @return bool
+	 */
+	public function insert(array $values)
+	{
+		// Since every insert gets treated like a batch insert, we will make sure the
+		// bindings are structured in a way that is convenient for building these
+		// inserts statements by verifying the elements are actually an array.
+		if ( ! is_array(reset($values)))
+		{
+			$values = array($values);
+		}
+
+		// Since every insert gets treated like a batch insert, we will make sure the
+		// bindings are structured in a way that is convenient for building these
+		// inserts statements by verifying the elements are actually an array.
+		else
+		{
+			foreach ($values as $key => $value)
+			{
+				ksort($value); $values[$key] = $value;
+			}
+		}
+
+		// We'll treat every insert like a batch insert so we can easily insert each
+		// of the records into the database consistently. This will make it much
+		// easier on the grammars to just handle one type of record insertion.
+		$bindings = array();
+
+		foreach ($values as $record)
+		{
+			foreach ($record as $value)
+			{
+				$bindings[] = $value;
+			}
+		}
+
+		$sql = $this->grammar->compileInsert($this, $values);
+
+		// Once we have compiled the insert statement's SQL we can execute it on the
+		// connection and return a result as a boolean success indicator as that
+		// is the same type of result returned by the raw connection instance.
+		$bindings = $this->cleanBindings($bindings);
+
+		return $this->connection->insert($sql, $bindings);
+	}
+
+	/**
+	 * Insert a new record and get the value of the primary key.
+	 *
+	 * @param  array   $values
+	 * @param  string  $sequence
+	 * @return int
+	 */
+	public function insertGetId(array $values, $sequence = null)
+	{
+		$sql = $this->grammar->compileInsertGetId($this, $values, $sequence);
+
+		$values = $this->cleanBindings($values);
+
+		return $this->processor->processInsertGetId($this, $sql, $values, $sequence);
+	}
+
+	/**
+	 * Update a record in the database.
+	 *
+	 * @param  array  $values
+	 * @return int
+	 */
+	public function update(array $values)
+	{
+		$bindings = array_values(array_merge($values, $this->getBindings()));
+
+		$sql = $this->grammar->compileUpdate($this, $values);
+
+		return $this->connection->update($sql, $this->cleanBindings($bindings));
+	}
+
+	/**
+	 * Increment a column's value by a given amount.
+	 *
+	 * @param  string  $column
+	 * @param  int     $amount
+	 * @param  array   $extra
+	 * @return int
+	 */
+	public function increment($column, $amount = 1, array $extra = array())
+	{
+		$wrapped = $this->grammar->wrap($column);
+
+		$columns = array_merge(array($column => $this->raw("$wrapped + $amount")), $extra);
+
+		return $this->update($columns);
+	}
+
+	/**
+	 * Decrement a column's value by a given amount.
+	 *
+	 * @param  string  $column
+	 * @param  int     $amount
+	 * @param  array   $extra
+	 * @return int
+	 */
+	public function decrement($column, $amount = 1, array $extra = array())
+	{
+		$wrapped = $this->grammar->wrap($column);
+
+		$columns = array_merge(array($column => $this->raw("$wrapped - $amount")), $extra);
+
+		return $this->update($columns);
+	}
+
+	/**
+	 * Delete a record from the database.
+	 *
+	 * @param  mixed  $id
+	 * @return int
+	 */
+	public function delete($id = null)
+	{
+		// If an ID is passed to the method, we will set the where clause to check
+		// the ID to allow developers to simply and quickly remove a single row
+		// from their database without manually specifying the where clauses.
+		if ( ! is_null($id)) $this->where('id', '=', $id);
+
+		$sql = $this->grammar->compileDelete($this);
+
+		return $this->connection->delete($sql, $this->getBindings());
+	}
+
+	/**
+	 * Run a truncate statement on the table.
+	 *
+	 * @return void
+	 */
+	public function truncate()
+	{
+		foreach ($this->grammar->compileTruncate($this) as $sql => $bindings)
+		{
+			$this->connection->statement($sql, $bindings);
+		}
+	}
+
+	/**
+	 * Get a new instance of the query builder.
+	 *
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	public function newQuery()
+	{
+		return new Builder($this->connection, $this->grammar, $this->processor);
+	}
+
+	/**
+	 * Merge an array of where clauses and bindings.
+	 *
+	 * @param  array  $wheres
+	 * @param  array  $bindings
+	 * @return void
+	 */
+	public function mergeWheres($wheres, $bindings)
+	{
+		$this->wheres = array_merge((array) $this->wheres, (array) $wheres);
+
+		$this->bindings['where'] = array_values(array_merge($this->bindings['where'], (array) $bindings));
+	}
+
+	/**
+	 * Remove all of the expressions from a list of bindings.
+	 *
+	 * @param  array  $bindings
+	 * @return array
+	 */
+	protected function cleanBindings(array $bindings)
+	{
+		return array_values(array_filter($bindings, function($binding)
+		{
+			return ! $binding instanceof Expression;
+		}));
+	}
+
+	/**
+	 * Create a raw database expression.
+	 *
+	 * @param  mixed  $value
+	 * @return \Illuminate\Database\Query\Expression
+	 */
+	public function raw($value)
+	{
+		return $this->connection->raw($value);
+	}
+
+	/**
+	 * Get the current query value bindings in a flattened array.
+	 *
+	 * @return array
+	 */
+	public function getBindings()
+	{
+		return array_flatten($this->bindings);
+	}
+
+	/**
+	 * Get the raw array of bindings.
+	 *
+	 * @return array
+	 */
+	public function getRawBindings()
+	{
+		return $this->bindings;
+	}
+
+	/**
+	 * Set the bindings on the query builder.
+	 *
+	 * @param  array   $bindings
+	 * @param  string  $type
+	 * @return $this
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	public function setBindings(array $bindings, $type = 'where')
+	{
+		if ( ! array_key_exists($type, $this->bindings))
+		{
+			throw new \InvalidArgumentException("Invalid binding type: {$type}.");
+		}
+
+		$this->bindings[$type] = $bindings;
+
+		return $this;
+	}
+
+	/**
+	 * Add a binding to the query.
+	 *
+	 * @param  mixed   $value
+	 * @param  string  $type
+	 * @return $this
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	public function addBinding($value, $type = 'where')
+	{
+		if ( ! array_key_exists($type, $this->bindings))
+		{
+			throw new \InvalidArgumentException("Invalid binding type: {$type}.");
+		}
+
+		if (is_array($value))
+		{
+			$this->bindings[$type] = array_values(array_merge($this->bindings[$type], $value));
+		}
+		else
+		{
+			$this->bindings[$type][] = $value;
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Merge an array of bindings into our bindings.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @return $this
+	 */
+	public function mergeBindings(Builder $query)
+	{
+		$this->bindings = array_merge_recursive($this->bindings, $query->bindings);
+
+		return $this;
+	}
+
+	/**
+	 * Get the database connection instance.
+	 *
+	 * @return \Illuminate\Database\ConnectionInterface
+	 */
+	public function getConnection()
+	{
+		return $this->connection;
+	}
+
+	/**
+	 * Get the database query processor instance.
+	 *
+	 * @return \Illuminate\Database\Query\Processors\Processor
+	 */
+	public function getProcessor()
+	{
+		return $this->processor;
+	}
+
+	/**
+	 * Get the query grammar instance.
+	 *
+	 * @return \Illuminate\Database\Grammar
+	 */
+	public function getGrammar()
+	{
+		return $this->grammar;
+	}
+
+	/**
+	 * Use the write pdo for query.
+	 *
+	 * @return $this
+	 */
+	public function useWritePdo()
+	{
+		$this->useWritePdo = true;
+
+		return $this;
+	}
+
+	/**
+	 * Handle dynamic method calls into the method.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 *
+	 * @throws \BadMethodCallException
+	 */
+	public function __call($method, $parameters)
+	{
+		if (starts_with($method, 'where'))
+		{
+			return $this->dynamicWhere($method, $parameters);
+		}
+
+		$className = get_class($this);
+
+		throw new \BadMethodCallException("Call to undefined method {$className}::{$method}()");
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Query/Expression.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Expression.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Expression.php
new file mode 100755
index 0000000..68d2236
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Expression.php
@@ -0,0 +1,43 @@
+<?php namespace Illuminate\Database\Query;
+
+class Expression {
+
+	/**
+	 * The value of the expression.
+	 *
+	 * @var mixed
+	 */
+	protected $value;
+
+	/**
+	 * Create a new raw query expression.
+	 *
+	 * @param  mixed  $value
+	 * @return void
+	 */
+	public function __construct($value)
+	{
+		$this->value = $value;
+	}
+
+	/**
+	 * Get the value of the expression.
+	 *
+	 * @return mixed
+	 */
+	public function getValue()
+	{
+		return $this->value;
+	}
+
+	/**
+	 * Get the value of the expression.
+	 *
+	 * @return string
+	 */
+	public function __toString()
+	{
+		return (string) $this->getValue();
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php
new file mode 100755
index 0000000..6998370
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php
@@ -0,0 +1,759 @@
+<?php namespace Illuminate\Database\Query\Grammars;
+
+use Illuminate\Database\Query\Builder;
+use Illuminate\Database\Grammar as BaseGrammar;
+
+class Grammar extends BaseGrammar {
+
+	/**
+	 * The components that make up a select clause.
+	 *
+	 * @var array
+	 */
+	protected $selectComponents = array(
+		'aggregate',
+		'columns',
+		'from',
+		'joins',
+		'wheres',
+		'groups',
+		'havings',
+		'orders',
+		'limit',
+		'offset',
+		'unions',
+		'lock',
+	);
+
+	/**
+	 * Compile a select query into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder
+	 * @return string
+	 */
+	public function compileSelect(Builder $query)
+	{
+		if (is_null($query->columns)) $query->columns = array('*');
+
+		return trim($this->concatenate($this->compileComponents($query)));
+	}
+
+	/**
+	 * Compile the components necessary for a select clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder
+	 * @return array
+	 */
+	protected function compileComponents(Builder $query)
+	{
+		$sql = array();
+
+		foreach ($this->selectComponents as $component)
+		{
+			// To compile the query, we'll spin through each component of the query and
+			// see if that component exists. If it does we'll just call the compiler
+			// function for the component which is responsible for making the SQL.
+			if ( ! is_null($query->$component))
+			{
+				$method = 'compile'.ucfirst($component);
+
+				$sql[$component] = $this->$method($query, $query->$component);
+			}
+		}
+
+		return $sql;
+	}
+
+	/**
+	 * Compile an aggregated select clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $aggregate
+	 * @return string
+	 */
+	protected function compileAggregate(Builder $query, $aggregate)
+	{
+		$column = $this->columnize($aggregate['columns']);
+
+		// If the query has a "distinct" constraint and we're not asking for all columns
+		// we need to prepend "distinct" onto the column name so that the query takes
+		// it into account when it performs the aggregating operations on the data.
+		if ($query->distinct && $column !== '*')
+		{
+			$column = 'distinct '.$column;
+		}
+
+		return 'select '.$aggregate['function'].'('.$column.') as aggregate';
+	}
+
+	/**
+	 * Compile the "select *" portion of the query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $columns
+	 * @return string
+	 */
+	protected function compileColumns(Builder $query, $columns)
+	{
+		// If the query is actually performing an aggregating select, we will let that
+		// compiler handle the building of the select clauses, as it will need some
+		// more syntax that is best handled by that function to keep things neat.
+		if ( ! is_null($query->aggregate)) return;
+
+		$select = $query->distinct ? 'select distinct ' : 'select ';
+
+		return $select.$this->columnize($columns);
+	}
+
+	/**
+	 * Compile the "from" portion of the query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  string  $table
+	 * @return string
+	 */
+	protected function compileFrom(Builder $query, $table)
+	{
+		return 'from '.$this->wrapTable($table);
+	}
+
+	/**
+	 * Compile the "join" portions of the query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $joins
+	 * @return string
+	 */
+	protected function compileJoins(Builder $query, $joins)
+	{
+		$sql = array();
+
+		$query->setBindings(array(), 'join');
+
+		foreach ($joins as $join)
+		{
+			$table = $this->wrapTable($join->table);
+
+			// First we need to build all of the "on" clauses for the join. There may be many
+			// of these clauses so we will need to iterate through each one and build them
+			// separately, then we'll join them up into a single string when we're done.
+			$clauses = array();
+
+			foreach ($join->clauses as $clause)
+			{
+				$clauses[] = $this->compileJoinConstraint($clause);
+			}
+
+			foreach ($join->bindings as $binding)
+			{
+				$query->addBinding($binding, 'join');
+			}
+
+			// Once we have constructed the clauses, we'll need to take the boolean connector
+			// off of the first clause as it obviously will not be required on that clause
+			// because it leads the rest of the clauses, thus not requiring any boolean.
+			$clauses[0] = $this->removeLeadingBoolean($clauses[0]);
+
+			$clauses = implode(' ', $clauses);
+
+			$type = $join->type;
+
+			// Once we have everything ready to go, we will just concatenate all the parts to
+			// build the final join statement SQL for the query and we can then return the
+			// final clause back to the callers as a single, stringified join statement.
+			$sql[] = "$type join $table on $clauses";
+		}
+
+		return implode(' ', $sql);
+	}
+
+	/**
+	 * Create a join clause constraint segment.
+	 *
+	 * @param  array   $clause
+	 * @return string
+	 */
+	protected function compileJoinConstraint(array $clause)
+	{
+		$first = $this->wrap($clause['first']);
+
+		$second = $clause['where'] ? '?' : $this->wrap($clause['second']);
+
+		return "{$clause['boolean']} $first {$clause['operator']} $second";
+	}
+
+	/**
+	 * Compile the "where" portions of the query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @return string
+	 */
+	protected function compileWheres(Builder $query)
+	{
+		$sql = array();
+
+		if (is_null($query->wheres)) return '';
+
+		// Each type of where clauses has its own compiler function which is responsible
+		// for actually creating the where clauses SQL. This helps keep the code nice
+		// and maintainable since each clause has a very small method that it uses.
+		foreach ($query->wheres as $where)
+		{
+			$method = "where{$where['type']}";
+
+			$sql[] = $where['boolean'].' '.$this->$method($query, $where);
+		}
+
+		// If we actually have some where clauses, we will strip off the first boolean
+		// operator, which is added by the query builders for convenience so we can
+		// avoid checking for the first clauses in each of the compilers methods.
+		if (count($sql) > 0)
+		{
+			$sql = implode(' ', $sql);
+
+			return 'where '.preg_replace('/and |or /', '', $sql, 1);
+		}
+
+		return '';
+	}
+
+	/**
+	 * Compile a nested where clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereNested(Builder $query, $where)
+	{
+		$nested = $where['query'];
+
+		return '('.substr($this->compileWheres($nested), 6).')';
+	}
+
+	/**
+	 * Compile a where condition with a sub-select.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder $query
+	 * @param  array   $where
+	 * @return string
+	 */
+	protected function whereSub(Builder $query, $where)
+	{
+		$select = $this->compileSelect($where['query']);
+
+		return $this->wrap($where['column']).' '.$where['operator']." ($select)";
+	}
+
+	/**
+	 * Compile a basic where clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereBasic(Builder $query, $where)
+	{
+		$value = $this->parameter($where['value']);
+
+		return $this->wrap($where['column']).' '.$where['operator'].' '.$value;
+	}
+
+	/**
+	 * Compile a "between" where clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereBetween(Builder $query, $where)
+	{
+		$between = $where['not'] ? 'not between' : 'between';
+
+		return $this->wrap($where['column']).' '.$between.' ? and ?';
+	}
+
+	/**
+	 * Compile a where exists clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereExists(Builder $query, $where)
+	{
+		return 'exists ('.$this->compileSelect($where['query']).')';
+	}
+
+	/**
+	 * Compile a where exists clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereNotExists(Builder $query, $where)
+	{
+		return 'not exists ('.$this->compileSelect($where['query']).')';
+	}
+
+	/**
+	 * Compile a "where in" clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereIn(Builder $query, $where)
+	{
+		if (empty($where['values'])) return '0 = 1';
+
+		$values = $this->parameterize($where['values']);
+
+		return $this->wrap($where['column']).' in ('.$values.')';
+	}
+
+	/**
+	 * Compile a "where not in" clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereNotIn(Builder $query, $where)
+	{
+		if (empty($where['values'])) return '1 = 1';
+
+		$values = $this->parameterize($where['values']);
+
+		return $this->wrap($where['column']).' not in ('.$values.')';
+	}
+
+	/**
+	 * Compile a where in sub-select clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereInSub(Builder $query, $where)
+	{
+		$select = $this->compileSelect($where['query']);
+
+		return $this->wrap($where['column']).' in ('.$select.')';
+	}
+
+	/**
+	 * Compile a where not in sub-select clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereNotInSub(Builder $query, $where)
+	{
+		$select = $this->compileSelect($where['query']);
+
+		return $this->wrap($where['column']).' not in ('.$select.')';
+	}
+
+	/**
+	 * Compile a "where null" clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereNull(Builder $query, $where)
+	{
+		return $this->wrap($where['column']).' is null';
+	}
+
+	/**
+	 * Compile a "where not null" clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereNotNull(Builder $query, $where)
+	{
+		return $this->wrap($where['column']).' is not null';
+	}
+
+	/**
+	 * Compile a "where date" clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereDate(Builder $query, $where)
+	{
+		return $this->dateBasedWhere('date', $query, $where);
+	}
+
+	/**
+	 * Compile a "where day" clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereDay(Builder $query, $where)
+	{
+		return $this->dateBasedWhere('day', $query, $where);
+	}
+
+	/**
+	 * Compile a "where month" clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereMonth(Builder $query, $where)
+	{
+		return $this->dateBasedWhere('month', $query, $where);
+	}
+
+	/**
+	 * Compile a "where year" clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereYear(Builder $query, $where)
+	{
+		return $this->dateBasedWhere('year', $query, $where);
+	}
+
+	/**
+	 * Compile a date based where clause.
+	 *
+	 * @param  string  $type
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function dateBasedWhere($type, Builder $query, $where)
+	{
+		$value = $this->parameter($where['value']);
+
+		return $type.'('.$this->wrap($where['column']).') '.$where['operator'].' '.$value;
+	}
+
+	/**
+	 * Compile a raw where clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereRaw(Builder $query, $where)
+	{
+		return $where['sql'];
+	}
+
+	/**
+	 * Compile the "group by" portions of the query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $groups
+	 * @return string
+	 */
+	protected function compileGroups(Builder $query, $groups)
+	{
+		return 'group by '.$this->columnize($groups);
+	}
+
+	/**
+	 * Compile the "having" portions of the query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $havings
+	 * @return string
+	 */
+	protected function compileHavings(Builder $query, $havings)
+	{
+		$sql = implode(' ', array_map(array($this, 'compileHaving'), $havings));
+
+		return 'having '.preg_replace('/and |or /', '', $sql, 1);
+	}
+
+	/**
+	 * Compile a single having clause.
+	 *
+	 * @param  array   $having
+	 * @return string
+	 */
+	protected function compileHaving(array $having)
+	{
+		// If the having clause is "raw", we can just return the clause straight away
+		// without doing any more processing on it. Otherwise, we will compile the
+		// clause into SQL based on the components that make it up from builder.
+		if ($having['type'] === 'raw')
+		{
+			return $having['boolean'].' '.$having['sql'];
+		}
+
+		return $this->compileBasicHaving($having);
+	}
+
+	/**
+	 * Compile a basic having clause.
+	 *
+	 * @param  array   $having
+	 * @return string
+	 */
+	protected function compileBasicHaving($having)
+	{
+		$column = $this->wrap($having['column']);
+
+		$parameter = $this->parameter($having['value']);
+
+		return $having['boolean'].' '.$column.' '.$having['operator'].' '.$parameter;
+	}
+
+	/**
+	 * Compile the "order by" portions of the query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $orders
+	 * @return string
+	 */
+	protected function compileOrders(Builder $query, $orders)
+	{
+		return 'order by '.implode(', ', array_map(function($order)
+		{
+			if (isset($order['sql'])) return $order['sql'];
+
+			return $this->wrap($order['column']).' '.$order['direction'];
+		}
+		, $orders));
+	}
+
+	/**
+	 * Compile the "limit" portions of the query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  int  $limit
+	 * @return string
+	 */
+	protected function compileLimit(Builder $query, $limit)
+	{
+		return 'limit '.(int) $limit;
+	}
+
+	/**
+	 * Compile the "offset" portions of the query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  int  $offset
+	 * @return string
+	 */
+	protected function compileOffset(Builder $query, $offset)
+	{
+		return 'offset '.(int) $offset;
+	}
+
+	/**
+	 * Compile the "union" queries attached to the main query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @return string
+	 */
+	protected function compileUnions(Builder $query)
+	{
+		$sql = '';
+
+		foreach ($query->unions as $union)
+		{
+			$sql .= $this->compileUnion($union);
+		}
+
+		if (isset($query->unionOrders))
+		{
+			$sql .= ' '.$this->compileOrders($query, $query->unionOrders);
+		}
+
+		if (isset($query->unionLimit))
+		{
+			$sql .= ' '.$this->compileLimit($query, $query->unionLimit);
+		}
+
+		if (isset($query->unionOffset))
+		{
+			$sql .= ' '.$this->compileOffset($query, $query->unionOffset);
+		}
+
+		return ltrim($sql);
+	}
+
+	/**
+	 * Compile a single union statement.
+	 *
+	 * @param  array  $union
+	 * @return string
+	 */
+	protected function compileUnion(array $union)
+	{
+		$joiner = $union['all'] ? ' union all ' : ' union ';
+
+		return $joiner.$union['query']->toSql();
+	}
+
+	/**
+	 * Compile an insert statement into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $values
+	 * @return string
+	 */
+	public function compileInsert(Builder $query, array $values)
+	{
+		// Essentially we will force every insert to be treated as a batch insert which
+		// simply makes creating the SQL easier for us since we can utilize the same
+		// basic routine regardless of an amount of records given to us to insert.
+		$table = $this->wrapTable($query->from);
+
+		if ( ! is_array(reset($values)))
+		{
+			$values = array($values);
+		}
+
+		$columns = $this->columnize(array_keys(reset($values)));
+
+		// We need to build a list of parameter place-holders of values that are bound
+		// to the query. Each insert should have the exact same amount of parameter
+		// bindings so we can just go off the first list of values in this array.
+		$parameters = $this->parameterize(reset($values));
+
+		$value = array_fill(0, count($values), "($parameters)");
+
+		$parameters = implode(', ', $value);
+
+		return "insert into $table ($columns) values $parameters";
+	}
+
+	/**
+	 * Compile an insert and get ID statement into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array   $values
+	 * @param  string  $sequence
+	 * @return string
+	 */
+	public function compileInsertGetId(Builder $query, $values, $sequence)
+	{
+		return $this->compileInsert($query, $values);
+	}
+
+	/**
+	 * Compile an update statement into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $values
+	 * @return string
+	 */
+	public function compileUpdate(Builder $query, $values)
+	{
+		$table = $this->wrapTable($query->from);
+
+		// Each one of the columns in the update statements needs to be wrapped in the
+		// keyword identifiers, also a place-holder needs to be created for each of
+		// the values in the list of bindings so we can make the sets statements.
+		$columns = array();
+
+		foreach ($values as $key => $value)
+		{
+			$columns[] = $this->wrap($key).' = '.$this->parameter($value);
+		}
+
+		$columns = implode(', ', $columns);
+
+		// If the query has any "join" clauses, we will setup the joins on the builder
+		// and compile them so we can attach them to this update, as update queries
+		// can get join statements to attach to other tables when they're needed.
+		if (isset($query->joins))
+		{
+			$joins = ' '.$this->compileJoins($query, $query->joins);
+		}
+		else
+		{
+			$joins = '';
+		}
+
+		// Of course, update queries may also be constrained by where clauses so we'll
+		// need to compile the where clauses and attach it to the query so only the
+		// intended records are updated by the SQL statements we generate to run.
+		$where = $this->compileWheres($query);
+
+		return trim("update {$table}{$joins} set $columns $where");
+	}
+
+	/**
+	 * Compile a delete statement into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @return string
+	 */
+	public function compileDelete(Builder $query)
+	{
+		$table = $this->wrapTable($query->from);
+
+		$where = is_array($query->wheres) ? $this->compileWheres($query) : '';
+
+		return trim("delete from $table ".$where);
+	}
+
+	/**
+	 * Compile a truncate table statement into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @return array
+	 */
+	public function compileTruncate(Builder $query)
+	{
+		return array('truncate '.$this->wrapTable($query->from) => array());
+	}
+
+	/**
+	 * Compile the lock into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  bool|string  $value
+	 * @return string
+	 */
+	protected function compileLock(Builder $query, $value)
+	{
+		return is_string($value) ? $value : '';
+	}
+
+	/**
+	 * Concatenate an array of segments, removing empties.
+	 *
+	 * @param  array   $segments
+	 * @return string
+	 */
+	protected function concatenate($segments)
+	{
+		return implode(' ', array_filter($segments, function($value)
+		{
+			return (string) $value !== '';
+		}));
+	}
+
+	/**
+	 * Remove the leading boolean from a statement.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected function removeLeadingBoolean($value)
+	{
+		return preg_replace('/and |or /', '', $value, 1);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php
new file mode 100755
index 0000000..b068e2b
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php
@@ -0,0 +1,130 @@
+<?php namespace Illuminate\Database\Query\Grammars;
+
+use Illuminate\Database\Query\Builder;
+
+class MySqlGrammar extends Grammar {
+
+	/**
+	 * The components that make up a select clause.
+	 *
+	 * @var array
+	 */
+	protected $selectComponents = array(
+		'aggregate',
+		'columns',
+		'from',
+		'joins',
+		'wheres',
+		'groups',
+		'havings',
+		'orders',
+		'limit',
+		'offset',
+		'lock',
+	);
+
+	/**
+	 * Compile a select query into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder
+	 * @return string
+	 */
+	public function compileSelect(Builder $query)
+	{
+		$sql = parent::compileSelect($query);
+
+		if ($query->unions)
+		{
+			$sql = '('.$sql.') '.$this->compileUnions($query);
+		}
+
+		return $sql;
+	}
+
+	/**
+	 * Compile a single union statement.
+	 *
+	 * @param  array  $union
+	 * @return string
+	 */
+	protected function compileUnion(array $union)
+	{
+		$joiner = $union['all'] ? ' union all ' : ' union ';
+
+		return $joiner.'('.$union['query']->toSql().')';
+	}
+
+	/**
+	 * Compile the lock into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  bool|string  $value
+	 * @return string
+	 */
+	protected function compileLock(Builder $query, $value)
+	{
+		if (is_string($value)) return $value;
+
+		return $value ? 'for update' : 'lock in share mode';
+	}
+
+	/**
+	 * Compile an update statement into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $values
+	 * @return string
+	 */
+	public function compileUpdate(Builder $query, $values)
+	{
+		$sql = parent::compileUpdate($query, $values);
+
+		if (isset($query->orders))
+		{
+			$sql .= ' '.$this->compileOrders($query, $query->orders);
+		}
+
+		if (isset($query->limit))
+		{
+			$sql .= ' '.$this->compileLimit($query, $query->limit);
+		}
+
+		return rtrim($sql);
+	}
+
+	/**
+	 * Compile a delete statement into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @return string
+	 */
+	public function compileDelete(Builder $query)
+	{
+		$table = $this->wrapTable($query->from);
+
+		$where = is_array($query->wheres) ? $this->compileWheres($query) : '';
+
+		if (isset($query->joins))
+		{
+			$joins = ' '.$this->compileJoins($query, $query->joins);
+
+			return trim("delete $table from {$table}{$joins} $where");
+		}
+
+		return trim("delete from $table $where");
+	}
+
+	/**
+	 * Wrap a single string in keyword identifiers.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected function wrapValue($value)
+	{
+		if ($value === '*') return $value;
+
+		return '`'.str_replace('`', '``', $value).'`';
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php
new file mode 100755
index 0000000..7a8df9c
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php
@@ -0,0 +1,174 @@
+<?php namespace Illuminate\Database\Query\Grammars;
+
+use Illuminate\Database\Query\Builder;
+
+class PostgresGrammar extends Grammar {
+
+	/**
+	 * All of the available clause operators.
+	 *
+	 * @var array
+	 */
+	protected $operators = array(
+		'=', '<', '>', '<=', '>=', '<>', '!=',
+		'like', 'not like', 'between', 'ilike',
+		'&', '|', '#', '<<', '>>',
+	);
+
+	/**
+	 * Compile the lock into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  bool|string  $value
+	 * @return string
+	 */
+	protected function compileLock(Builder $query, $value)
+	{
+		if (is_string($value)) return $value;
+
+		return $value ? 'for update' : 'for share';
+	}
+
+	/**
+	 * Compile an update statement into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $values
+	 * @return string
+	 */
+	public function compileUpdate(Builder $query, $values)
+	{
+		$table = $this->wrapTable($query->from);
+
+		// Each one of the columns in the update statements needs to be wrapped in the
+		// keyword identifiers, also a place-holder needs to be created for each of
+		// the values in the list of bindings so we can make the sets statements.
+		$columns = $this->compileUpdateColumns($values);
+
+		$from = $this->compileUpdateFrom($query);
+
+		$where = $this->compileUpdateWheres($query);
+
+		return trim("update {$table} set {$columns}{$from} $where");
+	}
+
+	/**
+	 * Compile the columns for the update statement.
+	 *
+	 * @param  array   $values
+	 * @return string
+	 */
+	protected function compileUpdateColumns($values)
+	{
+		$columns = array();
+
+		// When gathering the columns for an update statement, we'll wrap each of the
+		// columns and convert it to a parameter value. Then we will concatenate a
+		// list of the columns that can be added into this update query clauses.
+		foreach ($values as $key => $value)
+		{
+			$columns[] = $this->wrap($key).' = '.$this->parameter($value);
+		}
+
+		return implode(', ', $columns);
+	}
+
+	/**
+	 * Compile the "from" clause for an update with a join.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @return string
+	 */
+	protected function compileUpdateFrom(Builder $query)
+	{
+		if ( ! isset($query->joins)) return '';
+
+		$froms = array();
+
+		// When using Postgres, updates with joins list the joined tables in the from
+		// clause, which is different than other systems like MySQL. Here, we will
+		// compile out the tables that are joined and add them to a from clause.
+		foreach ($query->joins as $join)
+		{
+			$froms[] = $this->wrapTable($join->table);
+		}
+
+		if (count($froms) > 0) return ' from '.implode(', ', $froms);
+	}
+
+	/**
+	 * Compile the additional where clauses for updates with joins.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @return string
+	 */
+	protected function compileUpdateWheres(Builder $query)
+	{
+		$baseWhere = $this->compileWheres($query);
+
+		if ( ! isset($query->joins)) return $baseWhere;
+
+		// Once we compile the join constraints, we will either use them as the where
+		// clause or append them to the existing base where clauses. If we need to
+		// strip the leading boolean we will do so when using as the only where.
+		$joinWhere = $this->compileUpdateJoinWheres($query);
+
+		if (trim($baseWhere) == '')
+		{
+			return 'where '.$this->removeLeadingBoolean($joinWhere);
+		}
+
+		return $baseWhere.' '.$joinWhere;
+	}
+
+	/**
+	 * Compile the "join" clauses for an update.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @return string
+	 */
+	protected function compileUpdateJoinWheres(Builder $query)
+	{
+		$joinWheres = array();
+
+		// Here we will just loop through all of the join constraints and compile them
+		// all out then implode them. This should give us "where" like syntax after
+		// everything has been built and then we will join it to the real wheres.
+		foreach ($query->joins as $join)
+		{
+			foreach ($join->clauses as $clause)
+			{
+				$joinWheres[] = $this->compileJoinConstraint($clause);
+			}
+		}
+
+		return implode(' ', $joinWheres);
+	}
+
+	/**
+	 * Compile an insert and get ID statement into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array   $values
+	 * @param  string  $sequence
+	 * @return string
+	 */
+	public function compileInsertGetId(Builder $query, $values, $sequence)
+	{
+		if (is_null($sequence)) $sequence = 'id';
+
+		return $this->compileInsert($query, $values).' returning '.$this->wrap($sequence);
+	}
+
+	/**
+	 * Compile a truncate table statement into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @return array
+	 */
+	public function compileTruncate(Builder $query)
+	{
+		return array('truncate '.$this->wrapTable($query->from).' restart identity' => array());
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php
new file mode 100755
index 0000000..01558d3
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php
@@ -0,0 +1,130 @@
+<?php namespace Illuminate\Database\Query\Grammars;
+
+use Illuminate\Database\Query\Builder;
+
+class SQLiteGrammar extends Grammar {
+
+	/**
+	 * All of the available clause operators.
+	 *
+	 * @var array
+	 */
+	protected $operators = array(
+		'=', '<', '>', '<=', '>=', '<>', '!=',
+		'like', 'not like', 'between', 'ilike',
+		'&', '|', '<<', '>>',
+	);
+
+	/**
+	 * Compile an insert statement into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $values
+	 * @return string
+	 */
+	public function compileInsert(Builder $query, array $values)
+	{
+		// Essentially we will force every insert to be treated as a batch insert which
+		// simply makes creating the SQL easier for us since we can utilize the same
+		// basic routine regardless of an amount of records given to us to insert.
+		$table = $this->wrapTable($query->from);
+
+		if ( ! is_array(reset($values)))
+		{
+			$values = array($values);
+		}
+
+		// If there is only one record being inserted, we will just use the usual query
+		// grammar insert builder because no special syntax is needed for the single
+		// row inserts in SQLite. However, if there are multiples, we'll continue.
+		if (count($values) == 1)
+		{
+			return parent::compileInsert($query, reset($values));
+		}
+
+		$names = $this->columnize(array_keys(reset($values)));
+
+		$columns = array();
+
+		// SQLite requires us to build the multi-row insert as a listing of select with
+		// unions joining them together. So we'll build out this list of columns and
+		// then join them all together with select unions to complete the queries.
+		foreach (array_keys(reset($values)) as $column)
+		{
+			$columns[] = '? as '.$this->wrap($column);
+		}
+
+		$columns = array_fill(0, count($values), implode(', ', $columns));
+
+		return "insert into $table ($names) select ".implode(' union select ', $columns);
+	}
+
+	/**
+	 * Compile a truncate table statement into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @return array
+	 */
+	public function compileTruncate(Builder $query)
+	{
+		$sql = array('delete from sqlite_sequence where name = ?' => array($query->from));
+
+		$sql['delete from '.$this->wrapTable($query->from)] = array();
+
+		return $sql;
+	}
+
+	/**
+	 * Compile a "where day" clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereDay(Builder $query, $where)
+	{
+		return $this->dateBasedWhere('%d', $query, $where);
+	}
+
+	/**
+	 * Compile a "where month" clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereMonth(Builder $query, $where)
+	{
+		return $this->dateBasedWhere('%m', $query, $where);
+	}
+
+	/**
+	 * Compile a "where year" clause.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function whereYear(Builder $query, $where)
+	{
+		return $this->dateBasedWhere('%Y', $query, $where);
+	}
+
+	/**
+	 * Compile a date based where clause.
+	 *
+	 * @param  string  $type
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $where
+	 * @return string
+	 */
+	protected function dateBasedWhere($type, Builder $query, $where)
+	{
+		$value = str_pad($where['value'], 2, '0', STR_PAD_LEFT);
+
+		$value = $this->parameter($value);
+
+		return 'strftime(\''.$type.'\', '.$this->wrap($where['column']).') '.$where['operator'].' '.$value;
+	}
+
+}


[52/57] airavata-php-gateway git commit: AIRAVATA-1695 Queues are now selected dynamically

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a88b5d69/app/libraries/utilities.php
----------------------------------------------------------------------
diff --git a/app/libraries/utilities.php b/app/libraries/utilities.php
deleted file mode 100644
index a456673..0000000
--- a/app/libraries/utilities.php
+++ /dev/null
@@ -1,2111 +0,0 @@
-<?php
-
-//Thrift classes - loaded from Vendor/Thrift
-use Thrift\Transport\TTransport;
-use Thrift\Exception\TException;
-use Thrift\Exception\TTransportException;
-use Thrift\Factory\TStringFuncFactory;
-use Thrift\Protocol\TBinaryProtocol;
-use Thrift\Transport\TSocket;
-
-//Airavata classes - loaded from app/libraries/Airavata
-use Airavata\API\AiravataClient;
-use Airavata\API\Error\InvalidRequestException;
-use Airavata\API\Error\AiravataClientException;
-use Airavata\API\Error\AiravataSystemException;
-use Airavata\API\Error\ExperimentNotFoundException;
-use Airavata\Model\Workspace\Experiment\ComputationalResourceScheduling;
-use Airavata\Model\AppCatalog\AppInterface\InputDataObjectType;
-use Airavata\Model\Workspace\Experiment\UserConfigurationData;
-use Airavata\Model\Workspace\Experiment\AdvancedOutputDataHandling;
-use Airavata\Model\Workspace\Experiment\Experiment;
-use Airavata\Model\Workspace\Experiment\ExperimentState;
-use Airavata\Model\AppCatalog\AppInterface\DataType;
-use Airavata\Model\Workspace\Project;
-use Airavata\Model\Workspace\Experiment\JobState;
-use Airavata\Model\AppCatalog\ComputeResource\JobSubmissionInterface;
-use Airavata\Model\AppCatalog\ComputeResource\JobSubmissionProtocol;
-
-
-
-class Utilities{
-/**
- * Basic utility functions
- */
-
-/*
-
-************* IMPORTANT ************
-
-READ :: ALL CONSTANTS ARE NOW BEING CALLED FROM app/models/Constant.php. 
-
-************* IMPORTANT ************
-*/
-private $tokenFilePath = 'tokens.xml';
-private $tokenFile = null;
-
-private $sshUser;
-private $hostName;
-private static $pathConstant;
-private static $experimentPath;
-private static $experimentDataPathAbsolute;
-
-function __construct(){
-	$this->sshUser = "root";
-	$this->hostName = $_SERVER['SERVER_NAME'];
-
-    self::$experimentDataPathAbsolute = base_path() . Constant::EXPERIMENT_DATA_ROOT;
-	self::$pathConstant = 'file://'.$this->sshUser.'@'.$this->hostName.':' . self::$experimentDataPathAbsolute;
-	self::$experimentPath = null;
-}
-
-/**
- * Print success message
- * @param $message
- */
-public static function print_success_message($message)
-{
-    echo '<div class="alert alert-success">' . $message . '</div>';
-}
-
-/**
- * Print warning message
- * @param $message
- */
-public static function print_warning_message($message)
-{
-    echo '<div class="alert alert-warning">' . $message . '</div>';
-}
-
-/**
- * Print error message
- * @param $message
- */
-public static function print_error_message($message)
-{
-    echo '<div class="alert alert-danger">' . $message . '</div>';
-}
-
-/**
- * Print info message
- * @param $message
- */
-public static function print_info_message($message)
-{
-    echo '<div class="alert alert-info">' . $message . '</div>';
-}
-
-/**
- * Redirect to the given url
- * @param $url
- */
-public static function redirect($url)
-{
-    echo '<meta http-equiv="Refresh" content="0; URL=' . $url . '">';
-}
-
-/**
- * Return true if the form has been submitted
- * @return bool
- */
-public static function form_submitted()
-{
-    return isset($_POST['Submit']);
-}
-
-/**
- * Compare the submitted credentials with those stored in the database
- * @param $username
- * @param $password
- * @return bool
- */
-public static function id_matches_db($username, $password)
-{
-    $idStore = new WSISUtilities();
-
-    try
-    {
-        $idStore->connect();
-    }
-    catch (Exception $e)
-    {
-        Utilities::print_error_message('<p>Error connecting to ID store.
-            Please try again later or report a bug using the link in the Help menu</p>' .
-            '<p>' . $e->getMessage() . '</p>');
-    }
-    //checking user roles.
-    //var_dump( $idStore->updateRoleListOfUser( $username, array( "new"=>array("admin"), "deleted"=>array() ) ) );
-    //var_dump($idStore->getRoleListOfUser( $username) ); exit;
-    //var_dump( $idStore->authenticate($username, $password)); exit;
-    if($idStore->authenticate($username, $password))
-    {
-        //checking if user is an Admin and saving in Session.
-       $app_config = Utilities::read_config();
-
-        if( in_array( $app_config["admin-role"], (array)$idStore->getRoleListOfUser( $username)))
-        {
-            Session::put("admin", true);
-        }
-        return true;
-    }else{
-        return false;
-    }
-}
-
-
-/**
- * Store username in session variables
- * @param $username
- */
-public static function store_id_in_session($username)
-{
-    Session::put('username', $username );
-    Session::put('loggedin', true);
-}
-
-/**
- * Return true if the username stored in the session
- * @return bool
- */
-public static function id_in_session()
-{
-    if( Session::has("username") && Session::has('loggedin') )
-        return true;
-    else
-        return false;
-}
-
-/**
- * Verify if the user is already logged in. If not, redirect to the home page.
- */
-public static function verify_login()
-{
-    if (Utilities::id_in_session())
-    {
-        return true;
-    }
-    else
-    {
-        Utilities::print_error_message('User is not logged in!');
-        return false;
-    }
-}
-
-/**
- * Connect to the ID store
- */
-public static function connect_to_id_store()
-{
-    global $idStore;
-    $app_config = Utilities::read_config();
-
-    switch ($app_config["user-store"])
-    {
-        case 'WSO2':
-            $idStore = new WSISUtilities(); // WS02 Identity Server
-            break;
-        case 'XML':
-            $idStore = new XmlIdUtilities(); // XML user database
-            break;
-        case 'USER_API':
-            $idStore = new UserAPIUtilities(); // Airavata UserAPI
-            break;
-    }
-
-    try
-    {
-        $idStore->connect();
-    }
-    catch (Exception $e)
-    {
-        Utilities::print_error_message('<p>Error connecting to ID store.
-            Please try again later or report a bug using the link in the Help menu</p>' .
-            '<p>' . $e->getMessage() . '</p>');
-    }
-}
-
-/**
- * Return an Airavata client
- * @return AiravataClient
- */
-public static function get_airavata_client()
-{
-    try
-    {
-        $app_config = Utilities::read_config();
-        $transport = new TSocket( $app_config["airavata-server"], $app_config["airavata-port"]);
-        $transport->setRecvTimeout( $app_config["airavata-timeout"]);
-        $transport->setSendTimeout( $app_config["airavata-timeout"]);
-
-        $protocol = new TBinaryProtocol($transport);
-        $transport->open();
-
-        $client = new AiravataClient($protocol);
-
-        if( is_object( $client))
-            return $client;
-        else
-            return Redirect::to("airavata/down");
-    }
-    catch (Exception $e)
-    {
-        /*Utilities::print_error_message('<p>There was a problem connecting to Airavata.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>' . $e->getMessage() . '</p>');
-        */
-        
-    }
-}
-
-
-
-/**
- * Launch the experiment with the given ID
- * @param $expId
- */
-public static function launch_experiment($expId)
-{
-    $airavataclient = Session::get("airavataClient");
-    //global $tokenFilePath;
-    try
-    {
-        /* temporarily using hard-coded token
-        open_tokens_file($tokenFilePath);
-
-        $communityToken = $tokenFile->tokenId;
-
-
-        $token = isset($_SESSION['tokenId'])? $_SESSION['tokenId'] : $communityToken;
-
-        $airavataclient->launchExperiment($expId, $token);
-
-        $tokenString = isset($_SESSION['tokenId'])? 'personal' : 'community';
-
-        Utilities::print_success_message('Experiment launched using ' . $tokenString . ' allocation!');
-        */
-
-        $app_config = Utilities::read_config();
-        $hardCodedToken = $app_config['credential-store-token'];
-        $airavataclient->launchExperiment($expId, $hardCodedToken);
-
-        /*
-        Utilities::print_success_message('Experiment launched!');
-        Utilities::print_success_message("<p>Experiment launched!</p>" .
-            '<p>You will be redirected to the summary page shortly, or you can
-            <a href="experiment_summary.php?expId=' . $expId . '">go directly</a> to the experiment summary page.</p>');
-        redirect('experiment_summary.php?expId=' . $expId);
-        */
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('<p>There was a problem launching the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
-    }
-    catch (ExperimentNotFoundException $enf)
-    {
-        Utilities::print_error_message('<p>There was a problem launching the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('<p>There was a problem launching the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
-    }
-    catch (AiravataSystemException $ase)
-    {
-        Utilities::print_error_message('<p>There was a problem launching the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
-    }
-    catch (Exception $e)
-    {
-        Utilities::print_error_message('<p>There was a problem launching the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>Exception: ' . $e->getMessage() . '</p>');
-    }
-}
-
-/**
- * Get all projects owned by the given user
- * @param $username
- * @return null
- */
-public static function get_all_user_projects($gatewayId, $username)
-{
-    $airavataclient = Session::get("airavataClient");
-    $userProjects = null;
-
-    try
-    {
-        $userProjects = $airavataclient->getAllUserProjects($gatewayId, $username);
-        //var_dump( $userProjects); exit;
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('<p>There was a problem getting the user\'s projects.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>InvalidRequestException: ' . $ire->getMessage(). '</p>');
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('<p>There was a problem getting the user\'s projects.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>Airavata Client Exception: ' . $ace->getMessage(). '</p>');
-    }
-    catch (AiravataSystemException $ase)
-    {
-        if ($ase->airavataErrorType == 2) // 2 = INTERNAL_ERROR
-        {
-            Utilities::print_warning_message('<p>You must create a project before you can create an experiment.
-                Click <a href="' . URL::to('/') . '/project/create">here</a> to create a project.</p>');
-        }
-        else
-        {
-            Utilities::print_error_message('<p>There was a problem getting the user\'s projects.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
-        }
-    }
-
-    return $userProjects;
-}
-
-
-/**
- * Get all available applications
- * @return null
- */
-public static function get_all_applications()
-{
-    $airavataclient = Session::get("airavataClient");
-    $applications = null;
-
-    try
-    {
-        $applications = $airavataclient->getAllApplicationInterfaceNames( Session::get("gateway_id"));
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('<p>There was a problem getting all applications.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('<p>There was a problem getting all applications.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
-    }
-    catch (AiravataSystemException $ase)
-    {
-        Utilities::print_warning_message('<p>You must create an application module, interface and deployment space before you can create an experiment.
-                Click <a href="' . URL::to('/') . '/app/module">here</a> to create an application.</p>');
-        /*
-        Utilities::print_error_message('<p>There was a problem getting all applications.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
-            */
-    }
-
-    if( count( $applications) == 0)
-        Utilities::print_warning_message('<p>You must create an application module, interface and deployment space before you can create an experiment.
-                Click <a href="' . URL::to('/') . '/app/module">here</a> to create an application.</p>');
-        
-
-    return $applications;
-}
-
-
-/**
- * Get the interface for the application with the given ID
- * @param $id
- * @return null
- */
-public static function get_application_interface($id)
-{
-    $airavataclient = Session::get("airavataClient");
-    $applicationInterface = null;
-
-    try
-    {
-        $applicationInterface = $airavataclient->getApplicationInterface($id);
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('<p>There was a problem getting the application interface.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>InvalidRequestException: ' . $ire->getMessage(). '</p>');
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('<p>There was a problem getting the application interface.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
-    }
-    catch (AiravataSystemException $ase)
-    {
-        Utilities::print_error_message('<p>There was a problem getting the application interface.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
-    }
-
-    return $applicationInterface;
-}
-
-
-/**
- * Get a list of compute resources available for the given application ID
- * @param $id
- * @return null
- */
-public static function get_available_app_interface_compute_resources($id)
-{
-    $airavataclient = Session::get("airavataClient");
-    $computeResources = null;
-
-    try
-    {
-        $computeResources = $airavataclient->getAvailableAppInterfaceComputeResources($id);
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('<p>There was a problem getting compute resources.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('<p>There was a problem getting compute resources.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
-    }
-    catch (AiravataSystemException $ase)
-    {
-        Utilities::print_error_message('<p>There was a problem getting compute resources.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
-    }
-
-    return $computeResources;
-}
-
-
-/**
- * Get the ComputeResourceDescription with the given ID
- * @param $id
- * @return null
- */
-public static function get_compute_resource($id)
-{
-    $airavataclient = Session::get("airavataClient");
-    $computeResource = null;
-
-    try
-    {
-        $computeResource = $airavataclient->getComputeResource($id);
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('<p>There was a problem getting the compute resource.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('<p>There was a problem getting the compute resource.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
-    }
-    catch (AiravataSystemException $ase)
-    {
-        Utilities::print_error_message('<p>There was a problem getting the compute resource.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
-    }
-
-    return $computeResource;
-}
-
-
-/**
- * List the experiment's input files
- * @param $experiment
- */
-public static function list_input_files($experiment)
-{
-    $applicationInputs = Utilities::get_application_inputs($experiment->applicationId);
-
-    $experimentInputs = $experiment->experimentInputs;
-
-
-    //showing experiment inputs in the order defined by the admins.
-    $order = array();
-    foreach ($experimentInputs as $index => $input)
-    {
-        $order[$index] = $input->inputOrder;
-    }
-    array_multisort($order, SORT_ASC, $experimentInputs);
-    
-    foreach ($experimentInputs as $input)
-    {
-        $matchingAppInput = null;
-
-        foreach($applicationInputs as $applicationInput)
-        {
-            if ($input->name == $applicationInput->name)
-            {
-                $matchingAppInput = $applicationInput;
-            }
-        }
-        //var_dump($matchingAppInput);
-
-        if ($matchingAppInput->type == DataType::URI)
-        {
-            $explode = explode('/', $input->value);
-            echo '<p><a target="_blank"
-                        href="' . URL::to("/") . "/../../" . Constant::EXPERIMENT_DATA_ROOT . $explode[sizeof($explode)-2] . '/' . $explode[sizeof($explode)-1] . '">' .
-                $explode[sizeof($explode)-1] . '
-                <span class="glyphicon glyphicon-new-window"></span></a></p>';
-        }
-        elseif ($matchingAppInput->type == DataType::STRING)
-        {
-            echo '<p>' . $input->name . ': ' . $input->value . '</p>';
-        }
-    }
-}
-
-
-/**
- * Get a list of the inputs for the application with the given ID
- * @param $id
- * @return null
- */
-public static function get_application_inputs($id)
-{
-    $airavataclient = Session::get("airavataClient");
-    $inputs = null;
-
-    try
-    {
-        $inputs = $airavataclient->getApplicationInputs($id);
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('<p>There was a problem getting application inputs.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('<p>There was a problem getting application inputs.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
-    }
-    catch (AiravataSystemException $ase)
-    {
-        Utilities::print_error_message('<p>There was a problem getting application inputs.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
-    }
-
-    return $inputs;
-}
-
-
-/**
- * Get a list of the outputs for the application with the given ID
- * @param $id
- * @return null
- */
-public static function get_application_outputs($id)
-{
-    $airavataclient = Session::get("airavataClient");
-    $outputs = null;
-
-    try
-    {
-        $outputs = $airavataclient->getApplicationOutputs($id);
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('<p>There was a problem getting application outputs.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('<p>There was a problem getting application outputs.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>Airavata Client Exception: ' . $ace->getMessage() . '</p>');
-    }
-    catch (AiravataSystemException $ase)
-    {
-        Utilities::print_error_message('<p>There was a problem getting application outputs.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>Airavata System Exception: ' . $ase->getMessage() . '</p>');
-    }
-
-    return $outputs;
-}
-
-
-/**
- * Get the experiment with the given ID
- * @param $expId
- * @return null
- */
-public static function get_experiment($expId)
-{
-    $airavataclient = Session::get("airavataClient");
-
-    try
-    {
-        return $airavataclient->getExperiment($expId);
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('<p>There was a problem getting the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
-    }
-    catch (ExperimentNotFoundException $enf)
-    {
-        Utilities::print_error_message('<p>There was a problem getting the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('<p>There was a problem getting the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
-    }
-    catch (AiravataSystemException $ase)
-    {
-        Utilities::print_error_message('<p>There was a problem getting the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
-    }
-    catch (TTransportException $tte)
-    {
-        Utilities::print_error_message('<p>There was a problem getting the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>TTransportException: ' . $tte->getMessage() . '</p>');
-    }
-    catch (Exception $e)
-    {
-        Utilities::print_error_message('<p>There was a problem getting the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>Exception: ' . $e->getMessage() . '</p>');
-    }
-
-}
-
-/**
- * Get the project with the given ID
- * @param $projectId
- * @return null
- */
-public static function get_project($projectId)
-{
-    $airavataclient = Session::get("airavataClient");
-
-    try
-    {
-        return $airavataclient->getProject($projectId);
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('<p>There was a problem getting the project.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('<p>There was a problem getting the project.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
-    }
-    catch (AiravataSystemException $ase)
-    {
-        Utilities::print_error_message('<p>There was a problem getting the project.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>AiravataSystemException!<br><br>' . $ase->getMessage() . '</p>');
-    }
-
-}
-
-
-/**
- * Create and configure a new Experiment
- * @return Experiment
- */
-public static function assemble_experiment()
-{
-    $utility = new Utilities();
-    $experimentInputs = array();
-    $app_config = Utilities::read_config();
-
-    $scheduling = new ComputationalResourceScheduling();
-    $scheduling->totalCPUCount = $_POST['cpu-count'];
-    $scheduling->nodeCount = $_POST['node-count'];
-    $scheduling->queueName = $_POST['queue-name'];
-    $scheduling->wallTimeLimit = $_POST['wall-time'];    
-    $scheduling->totalPhysicalMemory = $_POST['total-physical-memory'];
-    $scheduling->resourceHostId = $_POST['compute-resource'];
-
-    $userConfigData = new UserConfigurationData();
-    $userConfigData->computationalResourceScheduling = $scheduling;
-    if( isset( $_POST["userDN"]) )
-        $userConfigData->userDN = $_POST["userDN"];
-
-    $applicationInputs = Utilities::get_application_inputs($_POST['application']);
-    $experimentInputs = Utilities::process_inputs($applicationInputs, $experimentInputs);
-
-    if( Utilities::$experimentPath == null){
-        Utilities::create_experiment_folder_path();
-    }
-
-    $advHandling = new AdvancedOutputDataHandling();
-
-    $advHandling->outputDataDir = str_replace( base_path() . Constant::EXPERIMENT_DATA_ROOT, Utilities::$pathConstant , Utilities::$experimentPath);
-    $userConfigData->advanceOutputDataHandling = $advHandling;
-
-    //TODO: replace constructor with a call to airvata to get a prepopulated experiment template
-    $experiment = new Experiment();
-
-    // required
-    $experiment->projectID = $_POST['project'];
-    $experiment->userName = Session::get( 'username');
-    $experiment->name = $_POST['experiment-name'];
-
-    // optional
-    $experiment->description = $_POST['experiment-description'];
-    $experiment->applicationId = $_POST['application'];
-    $experiment->userConfigurationData = $userConfigData;
-    $experiment->experimentInputs = $experimentInputs;
-    if( isset( $_POST["enableEmailNotification"]))
-    {
-        $experiment->enableEmailNotification = intval( $_POST["enableEmailNotification"] );
-        $experiment->emailAddresses = array_unique( array_filter( $_POST["emailAddresses"], "trim") );
-    }
-
-    // adding default experiment outputs for now till prepoulated experiment template is not implemented.
-    $experiment->experimentOutputs = Utilities::get_application_outputs( $_POST["application"]);
-
-    if ($experimentInputs)
-    {
-        return $experiment;
-    }
-}
-
-/**
- * @param $applicationInputs
- * @param $experimentInputs
- * @internal param $environmentPath
- * @return array
- */
-public static function process_inputs($applicationInputs, $experimentInputs)
-{
-    $utility = new Utilities();
-    $experimentAssemblySuccessful = true;
-    $newExperimentInputs = array();
-
-    //var_dump($_FILES);
-
-    if (sizeof($_FILES) > 0)
-    {
-        if (Utilities::file_upload_successful())
-        {
-            // construct unique path
-            Utilities::create_experiment_folder_path();
-        }
-        else
-        {
-            $experimentAssemblySuccessful = false;
-        }
-    }
-
-    //sending application inputs in the order defined by the admins.
-    $order = array();
-    foreach ($applicationInputs as $index => $input)
-    {
-        $order[$index] = $input->inputOrder;
-    }
-    array_multisort($order, SORT_ASC, $applicationInputs);
-    
-    foreach ($applicationInputs as $applicationInput)
-    {
-        $experimentInput = new InputDataObjectType();
-        $experimentInput = $applicationInput;
-        //$experimentInput->name = $applicationInput->name;
-        //$experimentInput->metaData = $applicationInput->metaData;
-
-
-        //$experimentInput->type = $applicationInput->type;
-        //$experimentInput->type = DataType::STRING;
-
-
-        if(($applicationInput->type == DataType::STRING) ||
-            ($applicationInput->type == DataType::INTEGER) ||
-            ($applicationInput->type == DataType::FLOAT))
-        {
-            if (isset($_POST[$applicationInput->name]) && (trim($_POST[$applicationInput->name]) != ''))
-            {
-                $experimentInput->value = $_POST[$applicationInput->name];
-                $experimentInput->type = $applicationInput->type;
-
-            }
-            else // use previous value
-            {
-                $index = -1;
-                for ($i = 0; $i < sizeof($experimentInputs); $i++)
-                {
-                    if ($experimentInputs[$i]->name == $applicationInput->name)
-                    {
-                        $index = $i;
-                    }
-                }
-
-                if ($index >= 0)
-                {
-                    $experimentInput->value = $experimentInputs[$index]->value;
-                    $experimentInput->type = $applicationInput->type;
-                }
-            }
-        }
-        elseif ($applicationInput->type == DataType::URI)
-        {
-            //var_dump($_FILES[$applicationInput->name]->name);
-            if ($_FILES[$applicationInput->name]['name'])
-            {
-                $file = $_FILES[$applicationInput->name];
-
-
-                //
-                // move file to experiment data directory
-                //
-                $filePath = Utilities::$experimentPath . $file['name'];
-
-                // check if file already exists
-                if (is_file($filePath))
-                {
-                    unlink($filePath);
-
-                    Utilities::print_warning_message('Uploaded file already exists! Overwriting...');
-                }
-
-                $moveFile = move_uploaded_file($file['tmp_name'], $filePath);
-
-                if ($moveFile)
-                {
-                    Utilities::print_success_message('Upload: ' . $file['name'] . '<br>' .
-                        'Type: ' . $file['type'] . '<br>' .
-                        'Size: ' . ($file['size']/1024) . ' kB');//<br>' .
-                        //'Stored in: ' . $experimentPath . $file['name']);
-                }
-                else
-                {
-                    Utilities::print_error_message('<p>Error moving uploaded file ' . $file['name'] . '!
-                    Please try again later or report a bug using the link in the Help menu.</p>');
-                    $experimentAssemblySuccessful = false;
-                }
-
-                $experimentInput->value = str_replace(base_path() . Constant::EXPERIMENT_DATA_ROOT, Utilities::$pathConstant , $filePath);
-                $experimentInput->type = $applicationInput->type;
-                
-            }
-            else
-            {
-                $index = -1;
-                for ($i = 0; $i < sizeof($experimentInputs); $i++)
-                {
-                    if ($experimentInputs[$i]->name == $applicationInput->name)
-                    {
-                        $index = $i;
-                    }
-                }
-
-                if ($index >= 0)
-                {
-                    $experimentInput->value = $experimentInputs[$index]->value;
-                    $experimentInput->type = $applicationInput->type;
-                }
-            }
-
-        }
-        else
-        {
-            Utilities::print_error_message('I cannot accept this input type yet!');
-        }
-
-
-
-
-
-
-
-        //$experimentInputs[] = $experimentInput;
-        /*
-        $index = -1;
-        for ($i = 0; $i < sizeof($experimentInputs); $i++)
-        {
-            if ($experimentInputs[$i]->key == $experimentInput->key)
-            {
-                $index = $i;
-            }
-        }
-
-        if ($index >= 0)
-        {
-            unset($experimentInputs[$index]);
-        }
-        */
-        //$experimentInputs[] = $experimentInput;
-
-
-
-
-
-        $newExperimentInputs[] = $experimentInput;
-
-
-    }
-
-    if ($experimentAssemblySuccessful)
-    {
-        return $newExperimentInputs;
-    }
-    else
-    {
-        return false;
-    }
-
-}
-
-
-public static function create_experiment_folder_path()
-{
-    do
-    {
-        Utilities::$experimentPath = base_path() . Constant::EXPERIMENT_DATA_ROOT . str_replace(' ', '', Session::get('username') ) . md5(rand() * time()) . '/';
-    }
-    while (is_dir( Utilities::$experimentPath)); // if dir already exists, try again
-    // create upload directory
-    if (!mkdir( Utilities::$experimentPath))
-    {
-        Utilities::print_error_message('<p>Error creating upload directory!
-            Please try again later or report a bug using the link in the Help menu.</p>');
-        $experimentAssemblySuccessful = false;
-    }
-}
-
-/**
- * Check the uploaded files for errors
- */
-public static function file_upload_successful()
-{
-    $uploadSuccessful = true;
-
-    foreach ($_FILES as $file)
-    {
-        //var_dump($file);
-        if($file['name'])
-        {
-            if ($file['error'] > 0)
-            {
-                $uploadSuccessful = false;
-                Utilities::print_error_message('<p>Error uploading file ' . $file['name'] . ' !
-                    Please try again later or report a bug using the link in the Help menu.');
-            }/*
-            elseif ($file['type'] != 'text/plain')
-            {
-                $uploadSuccessful = false;
-                Utilities::print_error_message('Uploaded file ' . $file['name'] . ' type not supported!');
-            }
-            elseif (($file['size'] / 1024) > 20)
-            {
-                $uploadSuccessful = false;
-                Utilities::print_error_message('Uploaded file ' . $file['name'] . ' must be smaller than 10 MB!');
-            }*/
-        }
-
-
-    }
-
-    return $uploadSuccessful;
-}
-
-
-/**
- * Update the experiment with the given ID
- * @param $expId
- * @param $updatedExperiment
- */
-public static function update_experiment($expId, $updatedExperiment)
-{
-    $airavataclient = Session::get("airavataClient");
-
-    try
-    {
-        $airavataclient->updateExperiment($expId, $updatedExperiment);
-
-        /*
-        Utilities::print_success_message("<p>Experiment updated!</p>" .
-            '<p>Click
-            <a href="' . URL::to('/') . '/experiment/summary?expId=' . $expId . '">here</a> to visit the experiment summary page.</p>');
-        */
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('<p>There was a problem updating the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
-    }
-    catch (ExperimentNotFoundException $enf)
-    {
-        Utilities::print_error_message('<p>There was a problem updating the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('<p>There was a problem updating the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
-    }
-    catch (AiravataSystemException $ase)
-    {
-        Utilities::print_error_message('<p>There was a problem updating the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
-    }
-
-}
-
-
-/**
- * Clone the experiment with the given ID
- * @param $expId
- */
-public static function clone_experiment($expId)
-{
-    $airavataclient = Session::get("airavataClient");
-
-    try
-    {
-        //create new experiment to receive the clone
-        $experiment = $airavataclient->getExperiment($expId);
-
-        $cloneId = $airavataclient->cloneExperiment($expId, 'Clone of ' . $experiment->name);
-
-        Utilities::print_success_message("<p>Experiment cloned!</p>" .
-            '<p>You will be redirected to the edit page shortly, or you can
-            <a href="edit_experiment.php?expId=' . $cloneId . '">go directly</a> to the edit experiment page.</p>');
-        //redirect('edit_experiment.php?expId=' . $cloneId);
-        return $cloneId;
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('<p>There was a problem cloning the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
-    }
-    catch (ExperimentNotFoundException $enf)
-    {
-        Utilities::print_error_message('<p>There was a problem cloning the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('<p>There was a problem cloning the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
-    }
-    catch (AiravataSystemException $ase)
-    {
-        Utilities::print_error_message('<p>There was a problem cloning the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
-    }
-    catch (TTransportException $tte)
-    {
-        Utilities::print_error_message('<p>There was a problem cloning the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>TTransportException: ' . $tte->getMessage() . '</p>');
-    }
-}
-
-/**
- * Cancel the experiment with the given ID
- * @param $expId
- */
-public static function cancel_experiment($expId)
-{
-    $airavataclient = Session::get("airavataClient");
-    $app_config = Utilities::read_config();
-
-
-
-    try
-    {
-        $airavataclient->terminateExperiment($expId, $app_config["credential-store-token"]);
-
-        Utilities::print_success_message("Experiment canceled!");
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('<p>There was a problem canceling the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>InvalidRequestException: ' . $ire->getMessage() . '</p>');
-    }
-    catch (ExperimentNotFoundException $enf)
-    {
-        Utilities::print_error_message('<p>There was a problem canceling the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>ExperimentNotFoundException: ' . $enf->getMessage() . '</p>');
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('<p>There was a problem canceling the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>AiravataClientException: ' . $ace->getMessage() . '</p>');
-    }
-    catch (AiravataSystemException $ase)
-    {
-        Utilities::print_error_message('<p>There was a problem canceling the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>AiravataSystemException: ' . $ase->getMessage() . '</p>');
-    }
-    catch (TTransportException $tte)
-    {
-        Utilities::print_error_message('<p>There was a problem canceling the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>TTransportException: ' . $tte->getMessage() . '</p>');
-    }
-    catch (Exception $e)
-    {
-        Utilities::print_error_message('<p>There was a problem canceling the experiment.
-            Please try again later or submit a bug report using the link in the Help menu.</p>' .
-            '<p>Exception: ' . $e->getMessage() . '</p>');
-    }
-}
-
-
-/**
- * Create a select input and populate it with project options from the database
- */
-public static function create_project_select($projectId = null, $editable = true)
-{
-    $editable? $disabled = '' : $disabled = 'disabled';
-    $userProjects = Utilities::get_all_user_projects( Session::get("gateway_id"), Session::get('username') );
-
-    echo '<select class="form-control" name="project" id="project" required ' . $disabled . '>';
-    if (sizeof($userProjects) > 0)
-    {
-        foreach ($userProjects as $project)
-        {
-            if ($project->projectID == $projectId)
-            {
-                $selected = 'selected';
-            }
-            else
-            {
-                $selected = '';
-            }
-
-            echo '<option value="' . $project->projectID . '" ' . $selected . '>' . $project->name . '</option>';
-        }
-    }
-    echo '</select>';
-    if( sizeof($userProjects) == 0 )
-    {
-        Utilities::print_warning_message('<p>You must create a project before you can create an experiment.
-                Click <a href="' . URL::to('/') . '/project/create">here</a> to create a project.</p>');
-    }
-}
-
-
-/**
- * Create a select input and populate it with applications options
- * @param null $id
- * @param bool $editable
- */
-public static function create_application_select($id = null, $editable = true)
-{
-    $disabled = $editable? '' : 'disabled';
-
-    $applicationIds = Utilities::get_all_applications();
-
-    echo '<select class="form-control" name="application" id="application" required ' . $disabled . '>';
-
-    if( count( $applicationIds))
-    {
-        foreach ( (array) $applicationIds as $applicationId => $applicationName)
-        {
-            $selected = ($applicationId == $id) ? 'selected' : '';
-    
-            echo '<option value="' . $applicationId . '" ' . $selected . '>' . $applicationName . '</option>';
-        }
-    }
-
-    echo '</select>';
-}
-
-
-/**
- * Create a select input and populate it with compute resources
- * available for the given application ID
- * @param $applicationId
- * @param $resourceHostId
- */
-public static function create_compute_resources_select($applicationId, $resourceHostId)
-{
-    $computeResources = Utilities::get_available_app_interface_compute_resources($applicationId);
-    
-    if( count( $computeResources) > 0)
-    {
-    	echo '<select class="form-control" name="compute-resource" id="compute-resource">';
-	    foreach ($computeResources as $id => $name)
-	    {
-	        $selected = ($resourceHostId == $id)? ' selected' : '';
-
-	        echo '<option value="' . $id . '"' . $selected . '>' .
-	                $name . '</option>';
-
-	    }
-
-    	echo '</select>';
-    }
-    else
-    {
-    	echo "<h4>No Compute Resources exist at the moment.";
-    }
-
-}
-
-
-/**
- * Create form inputs to accept the inputs to the given application
- * @param $id
- * @param $isRequired
- * @internal param $required
- */
-public static function create_inputs($id, $isRequired)
-{
-    $inputs = Utilities::get_application_inputs($id);
-
-    $required = $isRequired? ' required' : '';
-
-    //var_dump( $inputs);  echo "<br/>after sort<br/>";
-    //arranging inputs in ascending order.
-    foreach ($inputs as $index => $input)
-    {
-        $order[$index] = $input->inputOrder;
-    }
-    array_multisort($order, SORT_ASC, $inputs);
-    //var_dump( $inputs); exit;
-    foreach ($inputs as $input)
-    {
-        switch ($input->type)
-        {
-            case DataType::STRING:
-                echo '<div class="form-group">
-                    <label for="experiment-input">' . $input->name . '</label>
-                    <input value="' . $input->value . '" type="text" class="form-control" name="' . $input->name .
-                    '" id="' . $input->name .
-                    '" placeholder="' . $input->userFriendlyDescription . '"' . $required . '>
-                    </div>';
-                break;
-            case DataType::INTEGER:
-            echo '<div class="form-group">
-                    <label for="experiment-input">' . $input->name . '</label>
-                    <input value="' . $input->value . '" type="number" class="form-control" name="' . $input->name .
-                    '" id="' . $input->name .
-                    '" placeholder="' . $input->userFriendlyDescription . '"' . $required . '>
-                    </div>';
-                break;
-            case DataType::FLOAT:
-                echo '<div class="form-group">
-                    <label for="experiment-input">' . $input->name . '</label>
-                    <input value="' . $input->value . '" type="number" step="0.01" class="form-control" name="' . $input->name .
-                    '" id="' . $input->name .
-                    '" placeholder="' . $input->userFriendlyDescription . '"' . $required . '>
-                    </div>';
-                break;
-            case DataType::URI:
-                echo '<div class="form-group">
-                    <label for="experiment-input">' . $input->name . '</label>
-                    <input class="file-input" type="file" name="' . $input->name .
-                    '" id="' . $input->name . '" ' . $required . '>
-                    <p class="help-block">' . $input->userFriendlyDescription . '</p>
-                    </div>';
-                break;
-            default:
-                Utilities::print_error_message('Input data type not supported!
-                    Please file a bug report using the link in the Help menu.');
-                break;
-        }
-    }
-}
-
-
-/**
- * Create navigation bar
- * Used for all pages
- */
-public static function create_nav_bar()
-{
-	$menus = array();
-/*
-	if( Session::has('loggedin'))
-	{
-	    $menus = array
-	    (
-	        'Project' => array
-	        (
-	            array('label' => 'Create Project', 'url' => URL::to('/') . '/project/create'),
-	            array('label' => 'Search Projects', 'url' => URL::to('/') . '/project/search')
-	        ),
-	        'Experiment' => array
-	        (
-	            array('label' => 'Create Experiment', 'url' => URL::to('/') . '/experiment/create'),
-	            array('label' => 'Search Experiments', 'url' => URL::to('/') . '/experiment/search')
-	        ),
-	        'Compute Resource' => array
-	        (
-	            array('label' => 'Register', 'url' => URL::to('/') . '/cr/create'),
-	            array('label' => 'Browse', 'url' => URL::to('/') . '/cr/browse')
-	        ),
-	        'App Catalog' => array
-	        (
-	            array('label' => 'Module', 'url' => URL::to('/') . '/app/module'),
-	            array('label' => 'Interface', 'url' => URL::to('/') . '/app/interface'),
-	            array('label' => 'Deployment', 'url' => URL::to('/') . '/app/deployment')
-	        ),
-	        'Help' => array
-	        (
-	            array('label' => 'Report Issue', 'url' => '#'),
-	            array('label' => 'Request Feature', 'url' => '#')
-	        )
-	    );
-	}
-*/
-	if( Session::has('loggedin'))
-	{
-	    $menus = array
-	    (
-	        'Project' => array
-	        (
-	            array('label' => 'Create', 'url' => URL::to('/') . '/project/create', "nav-active" => "project"),
-	            array('label' => 'Search', 'url' => URL::to('/') . '/project/search', "nav-active"=> "project")
-	        ),
-	        'Experiment' => array
-	        (
-	            array('label' => 'Create', 'url' => URL::to('/') . '/experiment/create', "nav-active" => "experiment"),
-	            array('label' => 'Search', 'url' => URL::to('/') . '/experiment/search', "nav-active" => "experiment")
-	        )
-	    );
-
-	    if( Session::has("admin"))
-	    {
-	    	$menus['Compute Resource'] = array
-	        (
-	            array('label' => 'Register', 'url' => URL::to('/') . '/cr/create', "nav-active" => "compute-resource"),
-	            array('label' => 'Browse', 'url' => URL::to('/') . '/cr/browse', "nav-active" => "compute-resource")
-	        );
-	        $menus['App Catalog'] = array
-	        (
-	            array('label' => 'Module', 'url' => URL::to('/') . '/app/module', "nav-active" => "app-catalog"),
-	            array('label' => 'Interface', 'url' => URL::to('/') . '/app/interface', "nav-active" => "app-catalog"),
-	            array('label' => 'Deployment', 'url' => URL::to('/') . '/app/deployment', "nav-active" => "app-catalog")
-	        );
-            /*
-            $menus['Gateway Profile'] = array
-            (
-
-                array('label' => 'Register', 'url' => URL::to('/') . '/gp/create', "nav-active" => "gateway-profile"),
-                array('label' => 'Browse', 'url' => URL::to('/') . '/gp/browse', "nav-active" => "gateway-profile")
-            );
-            */
-               
-	    }
-        
-        $menus['Help'] = array
-        (
-            array('label' => 'Report Issue', 'url' => '#', "nav-active", ""),
-            array('label' => 'Request Feature', 'url' => '#', "nav-active", "")
-        );
-	}
-
-    $selfExplode = explode('/', $_SERVER['PHP_SELF']);
-
-
-
-    // nav bar and left-aligned content
-
-    echo '<nav class="navbar navbar-inverse navbar-static-top" role="navigation">
-            <div class="container-fluid">
-                <!-- Brand and toggle get grouped for better mobile display -->
-                <div class="navbar-header">
-                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
-                       <span class="sr-only">Toggle navigation</span>
-                       <span class="icon-bar"></span>
-                       <span class="icon-bar"></span>
-                       <span class="icon-bar"></span>
-                    </button>
-                    <a class="navbar-brand" href="' . URL::to('home') . '" title="PHP Gateway with Airavata">PGA</a>
-                </div>
-
-                <!-- Collect the nav links, forms, and other content for toggling -->
-                <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
-                    <ul class="nav navbar-nav">';
-
-
-    foreach ($menus as $label => $options)
-    {
-        Session::has('loggedin') ? $disabled = '' : $disabled = ' class="disabled"';
-
-        $active = "";
-        if( Session::has("nav-active") && isset( $options[0]['nav-active'] ) )
-        {
-	        if( $options[0]['nav-active'] == Session::get("nav-active"))
-	        	$active = " active ";
-        }
-        echo '<li class="dropdown ' . $active . '">
-                <a href="#" class="dropdown-toggle" data-toggle="dropdown">' . $label . '<span class="caret"></span></a>
-                <ul class="dropdown-menu" role="menu">';
-
-        if( Session::has('loggedin'))
-        {
-	        foreach ($options as $option)
-	        {
-	            $id = strtolower(str_replace(' ', '-', $option['label']));
-
-	            echo '<li' . $disabled . '><a href="' . $option['url'] . '" id=' . $id . '>' . $option['label'] . '</a></li>';
-	        }
-	    }
-
-        echo '</ul>
-        </li>';
-    }
-
-
-    echo '</ul>
-
-        <ul class="nav navbar-nav navbar-right">';
-
-    // right-aligned content
-
-    if ( Session::has('loggedin') )
-    {
-        $active = "";
-        if( Session::has("nav-active") )
-        {
-            if( "user-console" == Session::get("nav-active"))
-                $active = " active ";
-        }
-        if( Session::has("admin"))
-            echo '<li><a href="' . URL::to("/") . '/admin/dashboard"><span class="glyphicon glyphicon-user"></span> Dashboard</a></li>';
-        else
-            echo '<li><a href="' . URL::to("/") . '/user/profile"><span class="glyphicon glyphicon-user"></span> Profile</a></li>';
-
-        echo '<li class="dropdown ' . $active . '">
-
-                <a href="#" class="dropdown-toggle" data-toggle="dropdown">' . Session::get("username") . ' <span class="caret"></span></a>';
-        echo '<ul class="dropdown-menu" role="menu">';
-
-        echo '<li><a href="' . URL::to('/') . '/logout"><span class="glyphicon glyphicon-log-out"></span> Log out</a></li>';
-        echo    '</ul></li></ul>';
-    }
-    else
-    {
-        echo '<li><a href="' . URL::to('/') . '/create"><span class="glyphicon glyphicon-user"></span> Create account</a></li>';
-        echo '<li><a href="' . URL::to('/') . '/login"><span class="glyphicon glyphicon-log-in"></span> Log in</a></li>';
-        echo '</ul>';
-
-    }
-
-    echo '</div><!-- /.navbar-collapse -->
-    </div><!-- /.container-fluid -->
-    </nav>';
-}
-
-/**
-* Add attributes to the HTTP header.
-*/
-public static function create_http_header()
-{
-   header( 'Cache-Control: no-store, no-cache, must-revalidate' );
-   header( 'Cache-Control: post-check=0, pre-check=0', false );
-   header( 'Pragma: no-cache' );
-}
-
-/**
- * Open the XML file containing the community token
- * @param $tokenFilePath
- * @throws Exception
- */
-public static function open_tokens_file($tokenFilePath)
-{
-    if (file_exists( $tokenFilePath ))
-    {
-        $tokenFile = simplexml_load_file( $tokenFilePath );
-    }
-    else
-    {
-        throw new Exception('Error: Cannot connect to tokens database!');
-    }
-
-
-    if (!$tokenFile)
-    {
-        throw new Exception('Error: Cannot open tokens database!');
-    }
-}
-
-
-/**
- * Write the new token to the XML file
- * @param $tokenId
- */
-public static function write_new_token($tokenId)
-{    // write new tokenId to tokens file
-    $tokenFile->tokenId = $tokenId;
-
-    //Format XML to save indented tree rather than one line
-    $dom = new DOMDocument('1.0');
-    $dom->preserveWhiteSpace = false;
-    $dom->formatOutput = true;
-    $dom->loadXML( $tokenFile->asXML());
-    $dom->save( $tokenFilePath );
-}
-
-
-//moved from create project view.
-
-public static function create_project()
-{
-    
-    $airavataclient = Session::get("airavataClient");
-    
-    $project = new Project();
-    $project->owner = Session::get('username');
-    $project->name = $_POST['project-name'];
-    $project->description = $_POST['project-description'];
-
-
-    $projectId = null;
-
-    try
-    {
-        $projectId = $airavataclient->createProject( Session::get("gateway_id"), $project);
-
-        if ($projectId)
-        {
-            Utilities::print_success_message("<p>Project {$_POST['project-name']} created!</p>" .
-                '<p>You will be redirected to the summary page shortly, or you can
-                <a href="project/summary?projId=' . $projectId . '">go directly</a> to the project summary page.</p>');
-        }
-        else
-        {
-            Utilities::print_error_message("Error creating project {$_POST['project-name']}!");
-        }
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
-    }
-    catch (AiravataSystemException $ase)
-    {
-        Utilities::print_error_message('AiravataSystemException!<br><br>' . $ase->getMessage());
-    }
-
-    return $projectId;
-}
-
-/**
- * Get experiments in project
- * @param $projectId
- * @return array|null
- */
-public static function get_experiments_in_project($projectId)
-{
-    $airavataclient = Session::get("airavataClient");
-
-    $experiments = array();
-
-    try
-    {
-        $experiments = $airavataclient->getAllExperimentsInProject($projectId);
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
-    }
-    catch (AiravataSystemException $ase)
-    {
-        Utilities::print_error_message('AiravataSystemException!<br><br>' . $ase->getMessage());
-    }
-    catch (TTransportException $tte)
-    {
-        Utilities::print_error_message('TTransportException!<br><br>' . $tte->getMessage());
-    }
-
-    return $experiments;
-}
-
-public static function update_project($projectId, $projectDetails)
-{
-    $airavataclient = Session::get("airavataClient");
-
-    $updatedProject = new Project();
-    $updatedProject->owner = $projectDetails["owner"];
-    $updatedProject->name = $projectDetails["name"];
-    $updatedProject->description = $projectDetails["description"];
-
-    try
-    {
-        $airavataclient->updateProject($projectId, $updatedProject);
-
-        //Utilities::print_success_message('Project updated! Click <a href="project_summary.php?projId=' . $projectId . '">here</a> to view the project summary.');
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
-    }
-    catch (ProjectNotFoundException $pnfe)
-    {
-        Utilities::print_error_message('ProjectNotFoundException!<br><br>' . $pnfe->getMessage());
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
-    }
-    catch (AiravataSystemException $ase)
-    {
-        Utilities::print_error_message('AiravataSystemException!<br><br>' . $ase->getMessage());
-    }
-}
-
-
-/**
- * Create a new experiment from the values submitted in the form
- * @return null
- */
-public static function create_experiment()
-{
-    $airavataclient = Session::get("airavataClient");
-
-    $experiment = Utilities::assemble_experiment();
-    $expId = null;
-
-    try
-    {
-        if($experiment)
-        {
-            $expId = $airavataclient->createExperiment( Session::get("gateway_id"), $experiment);
-        }
-
-        if ($expId)
-        {
-            /*
-            Utilities::print_success_message("Experiment {$_POST['experiment-name']} created!" .
-                ' <a href="experiment_summary.php?expId=' . $expId . '">Go to experiment summary page</a>');
-            */
-        }
-        else
-        {
-            Utilities::print_error_message("Error creating experiment {$_POST['experiment-name']}!");
-        }
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
-    }
-    catch (AiravataSystemException $ase)
-    {
-        Utilities::print_error_message('AiravataSystemException!<br><br>' . $ase->getMessage());
-    }
-
-    return $expId;
-}
-
-/*
- * Required in Experiment Sumamry page.
- *
-*/
-
-public static function list_output_files($experiment, $expStatus)
-{   
-
-    $expStatusVal = array_search($expStatus, ExperimentState::$__names);
-
-    if($expStatusVal == ExperimentState::COMPLETED )
-    {
-        $utility = new Utilities();
-        $experimentOutputs = $experiment->experimentOutputs;
-
-        foreach ((array)$experimentOutputs as $output)
-        {   
-            if ($output->type == DataType::URI || $output->type == DataType::STDOUT || $output->type == DataType::STDERR )
-            {
-                $explode = explode('/', $output->value);
-                //echo '<p>' . $output->key .  ': <a href="' . $output->value . '">' . $output->value . '</a></p>';
-                $outputPath = str_replace(Utilities::$experimentDataPathAbsolute, Constant::EXPERIMENT_DATA_ROOT, $output->value);
-                $outputPathArray = explode("/", $outputPath);
-
-                echo '<p>' . $output->name  . ' : ' . '<a target="_blank"
-                            href="' . URL::to("/") . "/.." . str_replace(Utilities::$experimentDataPathAbsolute, Constant::EXPERIMENT_DATA_ROOT, $output->value) . '">' . 
-                        $outputPathArray[ sizeof( $outputPathArray) - 1] . ' <span class="glyphicon glyphicon-new-window"></span></a></p>';
-            }
-            elseif ($output->type == DataType::STRING)
-            {
-                echo '<p>' . $output->value . '</p>';
-            }
-        }
-    }
-    else
-        echo "Experiment hasn't completed. Experiment Status is : " . $expStatus;
-}
-
-public static function get_experiment_values( $experiment, $project, $forSearch = false)
-{
-    $airavataclient = Session::get("airavataClient");
-    //var_dump( $experiment); exit;
-    $expVal = array();
-    $expVal["experimentStatusString"] = "";
-    $expVal["experimentTimeOfStateChange"] = "";
-    $expVal["experimentCreationTime"] = "";
-
-    if( $experiment->experimentStatus != null)
-    {
-        $experimentStatus = $experiment->experimentStatus;
-        $experimentState = $experimentStatus->experimentState;
-        $experimentStatusString = ExperimentState::$__names[$experimentState];
-        $expVal["experimentStatusString"] = $experimentStatusString;
-        $expVal["experimentTimeOfStateChange"] = date('Y-m-d H:i:s', $experimentStatus->timeOfStateChange/1000); // divide by 1000 since timeOfStateChange is in ms
-        $expVal["experimentCreationTime"] = date('Y-m-d H:i:s', $experiment->creationTime/1000); // divide by 1000 since creationTime is in ms
-    }
-    $jobStatus = $airavataclient->getJobStatuses($experiment->experimentID);
-
-    if ($jobStatus)
-    {
-        $jobName = array_keys($jobStatus);
-        $jobState = JobState::$__names[$jobStatus[$jobName[0]]->jobState];
-    }
-    else
-    {
-        $jobState = null;
-    }
-
-    $expVal["jobState"] = $jobState;
-    
-    if(! $forSearch)
-    {
-        $userConfigData = $experiment->userConfigurationData;
-        $scheduling = $userConfigData->computationalResourceScheduling;
-        $expVal['scheduling'] = $scheduling;
-        $expVal["computeResource"] = Utilities::get_compute_resource($scheduling->resourceHostId);
-    }
-    $expVal["applicationInterface"] = Utilities::get_application_interface($experiment->applicationId);
-
-
-    switch ($experimentStatusString)
-    {
-        case 'CREATED':
-        case 'VALIDATED':
-        case 'SCHEDULED':
-        case 'CANCELED':
-        case 'FAILED':
-            $expVal["editable"] = true;
-            break;
-        default:
-            $expVal["editable"] = false;
-            break;
-    }
-
-    switch ($experimentStatusString)
-    {
-        case 'CREATED':
-        case 'VALIDATED':
-        case 'SCHEDULED':
-        case 'LAUNCHED':
-        case 'EXECUTING':
-            $expVal["cancelable"] = true;
-            break;
-        default:
-            $expVal["cancelable"] = false;
-            break;
-    }
-
-    return $expVal;
-
-}
-
-public static function get_projsearch_results( $searchKey, $searchValue)
-{
-    $airavataclient = Session::get("airavataClient");;
-
-    $projects = array();
-
-    try
-    {
-        switch ( $searchKey)
-        {
-            case 'project-name':
-                $projects = $airavataclient->searchProjectsByProjectName( Session::get("gateway_id"), Session::get("username"), $searchValue);
-                break;
-            case 'project-description':
-                $projects = $airavataclient->searchProjectsByProjectDesc( Session::get("gateway_id"), Session::get("username"), $searchValue);
-                break;
-        }
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
-    }
-    catch (AiravataSystemException $ase)
-    {
-        if ($ase->airavataErrorType == 2) // 2 = INTERNAL_ERROR
-        {
-            Utilities::print_info_message('<p>You have not created any projects yet, so no results will be returned!</p>
-                                <p>Click <a href="create_project.php">here</a> to create a new project.</p>');
-        }
-        else
-        {
-            Utilities::print_error_message('There was a problem with Airavata. Please try again later, or report a bug using the link in the Help menu.');
-            //print_error_message('AiravataSystemException!<br><br>' . $ase->airavataErrorType . ': ' . $ase->getMessage());
-        }
-    }
-    catch (TTransportException $tte)
-    {
-        Utilities::print_error_message('TTransportException!<br><br>' . $tte->getMessage());
-    }
-
-    return $projects;
-}
-
-
-/**
- * Create options for the search key select input
- * @param $values
- * @param $labels
- * @param $disabled
- */
-public static function create_options($values, $labels, $disabled)
-{
-    for ($i = 0; $i < sizeof($values); $i++)
-    {
-        $selected = '';
-
-        // if option was previously selected, mark it as selected
-        if (isset($_POST['search-key']))
-        {
-            if ($values[$i] == $_POST['search-key'])
-            {
-                $selected = 'selected';
-            }
-        }
-
-        echo '<option value="' . $values[$i] . '" ' . $disabled[$i] . ' ' . $selected . '>' . $labels[$i] . '</option>';
-    }
-}
-
-/**
- * Get results of the user's search of experiments
- * @return array|null
- */
-public static function get_expsearch_results( $inputs)
-{
-    $airavataclient = Session::get("airavataClient");
-    $experiments = array();
-
-    try
-    {
-        switch ( $inputs["search-key"])
-        {
-            case 'experiment-name':
-                $experiments = $airavataclient->searchExperimentsByName(Session::get('gateway_id'), Session::get('username'), $inputs["search-value"]);
-                break;
-            case 'experiment-description':
-                $experiments = $airavataclient->searchExperimentsByDesc(Session::get('gateway_id'), Session::get('username'), $inputs["search-value"]);
-                break;
-            case 'application':
-                $experiments = $airavataclient->searchExperimentsByApplication(Session::get('gateway_id'), Session::get('username'), $inputs["search-value"]);
-                break;
-            case 'creation-time':
-                $experiments = $airavataclient->searchExperimentsByCreationTime(Session::get('gateway_id'), Session::get('username'), strtotime( $inputs["from-date"])*1000, strtotime( $inputs["to-date"])*1000 );
-                break;
-            case '':
-        }
-    }
-    catch (InvalidRequestException $ire)
-    {
-        Utilities::print_error_message('InvalidRequestException!<br><br>' . $ire->getMessage());
-    }
-    catch (AiravataClientException $ace)
-    {
-        Utilities::print_error_message('AiravataClientException!<br><br>' . $ace->getMessage());
-    }
-    catch (AiravataSystemException $ase)
-    {
-        if ($ase->airavataErrorType == 2) // 2 = INTERNAL_ERROR
-        {
-            Utilities::print_info_message('<p>You have not created any experiments yet, so no results will be returned!</p>
-                                <p>Click <a href="create_experiment.php">here</a> to create an experiment, or
-                                <a href="create_project.php">here</a> to create a new project.</p>');
-        }
-        else
-        {
-            Utilities::print_error_message('There was a problem with Airavata. Please try again later or report a bug using the link in the Help menu.');
-            //print_error_message('AiravataSystemException!<br><br>' . $ase->airavataErrorType . ': ' . $ase->getMessage());
-        }
-    }
-    catch (TTransportException $tte)
-    {
-        Utilities::print_error_message('TTransportException!<br><br>' . $tte->getMessage());
-    }
-
-    //get values of all experiments
-    $expContainer = array();
-    $expNum = 0;
-    foreach( $experiments as $experiment)
-    {
-        $expValue = Utilities::get_experiment_values( $experiment, Utilities::get_project($experiment->projectID), true );
-        $expContainer[$expNum]['experiment'] = $experiment;
-        if( $expValue["experimentStatusString"] == "FAILED")
-            $expValue["editable"] = false;
-        $expContainer[$expNum]['expValue'] = $expValue;
-        $expNum++;
-    }
-
-    return $expContainer;
-}
-
-public static function getExpStates(){
-    return ExperimentState::$__names;
-}
-
-
-public static function apply_changes_to_experiment($experiment, $input)
-{
-    $experiment->name = $input['experiment-name'];
-    $experiment->description = rtrim($input['experiment-description']);
-    $experiment->projectID = $input['project'];
-    //$experiment->applicationId = $_POST['application'];
-
-    $userConfigDataUpdated = $experiment->userConfigurationData;
-    $schedulingUpdated = $userConfigDataUpdated->computationalResourceScheduling;
-
-    $schedulingUpdated->resourceHostId = $input['compute-resource'];
-    $schedulingUpdated->nodeCount = $input['node-count'];
-    $schedulingUpdated->queueName = $_POST['queue-name'];
-    $schedulingUpdated->totalCPUCount = $input['cpu-count'];
-    //$schedulingUpdated->numberOfThreads = $input['threads'];
-    $schedulingUpdated->wallTimeLimit = $input['wall-time'];
-    //$schedulingUpdated->totalPhysicalMemory = $input['memory'];
-
-    /*
-    switch ($_POST['compute-resource'])
-    {
-        case 'trestles.sdsc.edu':
-            $schedulingUpdated->ComputationalProjectAccount = 'sds128';
-            break;
-        case 'stampede.tacc.xsede.org':
-        case 'lonestar.tacc.utexas.edu':
-            $schedulingUpdated->ComputationalProjectAccount = 'TG-STA110014S';
-            break;
-        default:
-            $schedulingUpdated->ComputationalProjectAccount = 'admin';
-    }
-    */
-
-    $userConfigDataUpdated->computationalResourceScheduling = $schedulingUpdated;
-    if( isset( $input["userDN"]) )
-        $userConfigDataUpdated->userDN = $input["userDN"];
-
-    $experiment->userConfigurationData = $userConfigDataUpdated;
-
-    $applicationInputs = Utilities::get_application_inputs($experiment->applicationId);
-
-    $experimentInputs = $experiment->experimentInputs; // get current inputs
-    //var_dump($experimentInputs);
-    $experimentInputs = Utilities::process_inputs($applicationInputs, $experimentInputs); // get new inputs
-    //var_dump($experimentInputs);
-
-    if ($experimentInputs)
-    {
-        $experiment->experimentInputs = $experimentInputs;
-        //var_dump($experiment);
-        return $experiment;
-    }
-}
-
-public static function read_config( $fileName = null){
-    $wsis_config = null;
-
-    if( $fileName == null)
-        $fileName = "app_config.ini";
-    try {
-        if (file_exists( app_path() . "/config/" . $fileName ) ) {
-
-            try
-            {
-                $wsis_config = parse_ini_file( app_path() . "/config/" . $fileName );
-            }
-
-            catch( \Exception $e)
-            {
-                print_r( $e); exit;
-            }
-        } 
-        else 
-        {
-            throw new Exception("Error: Cannot open file!");
-        }
-
-        if (!$wsis_config) 
-        {
-            throw new Exception('Error: Unable to read the file!');
-        }
-    }catch (Exception $e) {
-        throw new Exception('Unable to instantiate the client. Try editing the file.', 0, NULL);
-    }
-    return $wsis_config;
-
-}
-
-public static function get_job_details( $experimentId){
-    $airavataclient = Session::get("airavataClient");
-    return $airavataclient->getJobDetails( $experimentId);
-}
-
-public static function get_transfer_details( $experimentId){
-    $airavataclient = Session::get("airavataClient");
-    return $airavataclient->getDataTransferDetails( $experimentId);
-}
-
-}
-
-?>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a88b5d69/app/routes.php
----------------------------------------------------------------------
diff --git a/app/routes.php b/app/routes.php
index ad7ea27..547ea9c 100755
--- a/app/routes.php
+++ b/app/routes.php
@@ -27,6 +27,10 @@ Route::post("login", "AccountController@loginSubmit");
 Route::get("logout", "AccountController@logout");
 
 Route::get("forgot-password", "AccountController@forgotPassword");
+
+Route::get("setUserTimezone", function(){
+	Session::set("user_timezone", Input::get("timezone"));
+});
 /*
  * The following routes will not work without logging in.
  *
@@ -72,6 +76,8 @@ Route::post("experiment/edit", "ExperimentController@editSubmit");
 
 Route::post("experiment/cancel", "ExperimentController@expCancel");
 
+Route::get("experiment/getQueueView", "ExperimentController@getQueueView");
+
 /*
  * Compute Resources Routes
 */
@@ -80,21 +86,21 @@ Route::get("cr/create", function(){
 	return Redirect::to("cr/create/step1");
 });
 
-Route::get("cr/create", "ComputeResource@createView"); 
+Route::get("cr/create", "ResourceController@createView"); 
 
-Route::post("cr/create", "ComputeResource@createSubmit");
+Route::post("cr/create", "ResourceController@createSubmit");
 
-Route::get("cr/edit", "ComputeResource@editView"); 
+Route::get("cr/edit", "ResourceController@editView"); 
 
-Route::post("cr/edit", "ComputeResource@editSubmit"); 
+Route::post("cr/edit", "ResourceController@editSubmit"); 
 
-Route::get("cr/browse", "ComputeResource@browseView");
+Route::get("cr/browse", "ResourceController@browseView");
 
-Route::post("cr/delete-jsi", "ComputeResource@deleteActions");
+Route::post("cr/delete-jsi", "ResourceController@deleteActions");
 
-Route::post("cr/delete-dmi", "ComputeResource@deleteActions");
+Route::post("cr/delete-dmi", "ResourceController@deleteActions");
 
-Route::post("cr/delete-cr", "ComputeResource@deleteActions");
+Route::post("cr/delete-cr", "ResourceController@deleteActions");
 
 /*
  * Application Catalog Routes

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a88b5d69/app/views/experiment/create-complete.blade.php
----------------------------------------------------------------------
diff --git a/app/views/experiment/create-complete.blade.php b/app/views/experiment/create-complete.blade.php
index a3ee8be..c654497 100644
--- a/app/views/experiment/create-complete.blade.php
+++ b/app/views/experiment/create-complete.blade.php
@@ -15,7 +15,7 @@
         <input type="hidden" name="project" value="{{$expInputs['project']}}">
         <input type="hidden" name="application" value="{{$expInputs['application']}}">
         
-        @include('partials/experiment-inputs', array("expInputs" => $expInputs) )
+        @include('partials/experiment-inputs', array("expInputs" => $expInputs, "queueDefaults" => $expInputs['queueDefaults']) )
 
         <div class="form-group btn-toolbar">
             <div class="btn-group">
@@ -66,5 +66,20 @@
         var emailInput = $(this).parent().find("#emailAddresses").clone();
         emailInput.removeAttr("id").removeAttr("required").val("").appendTo(".emailAddresses");
     });
+
+    $("#compute-resource").change( function(){
+        var crId = $(this).val();
+        $(".loading-img ").removeClass("hide");
+        $.ajax({
+            url: '../experiment/getQueueView',
+            type: 'get',
+            data: {crId: crId},
+            success: function(data) {
+                $(".queue-view").html( data);
+                $(".loading-img ").addClass("hide");
+            }
+        });
+    });
+
     </script>
 @stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a88b5d69/app/views/layout/basic.blade.php
----------------------------------------------------------------------
diff --git a/app/views/layout/basic.blade.php b/app/views/layout/basic.blade.php
index 7bebad9..a35d28a 100755
--- a/app/views/layout/basic.blade.php
+++ b/app/views/layout/basic.blade.php
@@ -95,6 +95,20 @@
             $(this).val( $.trim( $(this).val() ) );
         });
 
+        //find users' current time.
+        if("{{ Session::get('user_time') }}".length==0){
+            var visitortime = new Date();
+            var visitortimezone = visitortime.getTimezoneOffset()/60;
+            $.ajax({
+                type: "GET",
+                url: "../setUserTimezone",
+                data: 'timezone='+ visitortimezone,
+                success: function(){
+                    //location.reload();
+                }
+            });
+        }
+
     </script>
 
 @show

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a88b5d69/app/views/partials/experiment-inputs.blade.php
----------------------------------------------------------------------
diff --git a/app/views/partials/experiment-inputs.blade.php b/app/views/partials/experiment-inputs.blade.php
index 475e065..591beea 100644
--- a/app/views/partials/experiment-inputs.blade.php
+++ b/app/views/partials/experiment-inputs.blade.php
@@ -42,47 +42,25 @@
         </div>
         <div class="form-group">
             <label for="compute-resource">Compute Resource</label>
-            @if( isset( $expInputs['cloning']))
-                {{ Utilities::create_compute_resources_select($expInputs['experiment']->applicationId, $expInputs['expVal']['scheduling']->resourceHostId) }}
+            @if( count( $expInputs['computeResources']) > 0)
+                <select class="form-control" name="compute-resource" id="compute-resource">
+                @foreach ($expInputs['computeResources'] as $id => $name)
+                    <option value="{{$id}}" {{ ($expInputs['resourceHostId'] == $id)? ' selected' : '' }}>{{$name}}</option>
+                @endforeach
+                </select>
             @else
-                {{ Utilities::create_compute_resources_select($expInputs['application'], null) }}
+                <h4>No Compute Resources exist at the moment
             @endif
         </div>
-
-        <div class="form-group">
-            <label for="node-count">Queue Name</label>
-            <input type="text" class="form-control" name="queue-name" id="queue-name" 
-            value="@if(isset($expInputs['expVal']) ){{ $expInputs['expVal']['scheduling']->queueName }}  @else{{$expInputs['queueName']}} @endif"
-            @if(isset($expInputs['expVal']) ) @if(!$expInputs['expVal']['editable']){{ disabled }} @endif @endif>
-        </div>
-        <div class="form-group">
-            <label for="node-count">Node Count</label>
-            <input type="number" class="form-control" name="node-count" id="node-count" min="1"
-            value="@if(isset($expInputs['expVal']) ){{ $expInputs['expVal']['scheduling']->nodeCount }}@else{{$expInputs['nodeCount']}}@endif"
-            @if(isset($expInputs['expVal']) ) @if(!$expInputs['expVal']['editable']){{disabled}} @endif @endif>
-        </div>
-        <div class="form-group">
-            <label for="cpu-count">Total Core Count</label>
-            <input type="number" class="form-control" name="cpu-count" id="cpu-count" min="1"
-            value="@if(isset($expInputs['expVal']) ){{ $expInputs['expVal']['scheduling']->totalCPUCount }}@else{{$expInputs['cpuCount']}}@endif"
-            @if(isset($expInputs['expVal'])) @if(!$expInputs['expVal']['editable']){{disabled}} @endif @endif>
-        </div>
-        <div class="form-group">
-            <label for="wall-time">Wall Time Limit</label>
-            <div class="input-group">
-                <input type="number" class="form-control" name="wall-time" id="wall-time" min="0"
-                value="@if(isset($expInputs['expVal']) ){{ $expInputs['expVal']['scheduling']->wallTimeLimit }}@else{{$expInputs['wallTimeLimit']}}@endif"
-                @if(isset($expInputs['expVal'])) @if(!$expInputs['expVal']['editable']){{disabled}} @endif @endif>
-                <span class="input-group-addon">minutes</span>
+        <div class="queue-block">
+            <div class="loading-img text-center hide">
+                <img src="../assets/ajax-loader.gif"/>
             </div>
-        </div>
-        <div class="form-group">
-            <label for="wall-time">Total Physical Memory</label>
-            <div class="input-group">
-                <input type="number" class="form-control" name="total-physical-memory" id="wall-time" min="0"
-                value="@if(isset($expInputs['expVal']) ){{ $expInputs['expVal']['scheduling']->totalPhysicalMemory }}@endif"
-                @if(isset($expInputs['expVal'])) @if(!$expInputs['expVal']['editable']){{disabled}} @endif @endif>
-                <span class="input-group-addon">MB</span>
+            <input type="hidden" name="selected-queue" value="@if(isset($expInputs['expVal']) ){{ $expInputs['expVal']['scheduling']->queueName }} @endif"/>
+            <div class="queue-view">
+                @if(isset($expInputs['expVal']) )
+                    @include( 'partials/experiment-queue-block', array('expVal' => $expVal) )
+                @endif
             </div>
         </div>
     </div>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a88b5d69/app/views/partials/experiment-queue-block.blade.php
----------------------------------------------------------------------
diff --git a/app/views/partials/experiment-queue-block.blade.php b/app/views/partials/experiment-queue-block.blade.php
new file mode 100644
index 0000000..1edc1b8
--- /dev/null
+++ b/app/views/partials/experiment-queue-block.blade.php
@@ -0,0 +1,107 @@
+<input type="hidden" id="queue-array" value="{{ htmlentities( json_encode( $queues ) ) }}"/>
+<div class="form-group required">
+	@if( count( $queues) > 0 )
+	    <label for="node-count">Select a Queue</label>
+	    <select name="queue-name" class="form-control" id="select-queue" @if(isset($expVal) ) @if(!$expVal['editable']){{ disabled }} @endif @endif required>
+	    	<option></option>
+	    @foreach( $queues as $queue)
+	    	<option value="{{$queue->queueName}}"
+	    			@if(isset($expVal) ) @if( $expVal['scheduling']->queueName == $queue->queueName ) selected @endif @endif
+	    			>
+	    			{{$queue->queueName}}
+	    	</option>
+	    @endforeach
+	   	</select>
+	@else
+		<div class="alert alert-warning">
+			This resources has no queues available at the moment. Please contact the administrator.
+		</div>
+	@endif
+</div>
+
+<div class="queue-data @if(! isset($expVal) ) hide @endif">
+<div class="form-group">
+    <label for="node-count">Node Count <span>( Max Allowed Nodes - <span class="node-count alert-warning"></span>)</span></label>
+    <input type="number" class="form-control" name="node-count" id="node-count" min="1"
+    value="@if(isset($expVal) ){{ $expVal['scheduling']->nodeCount }}@else{{$queueDefaults['nodeCount']}}@endif"
+    @if(isset($expVal) ) @if(!$expVal['editable']){{disabled}} @endif @endif>
+</div>
+<div class="form-group">
+    <label for="cpu-count">Total Core Count <span>( Max Allowed Cores - <span class="core-count alert-warning"></span>)</span></label>
+    <input type="number" class="form-control" name="cpu-count" id="cpu-count" min="1"
+    value="@if(isset($expVal) ){{ $expVal['scheduling']->totalCPUCount }}@else{{$queueDefaults['cpuCount']}}@endif"
+    @if(isset($expVal)) @if(!$expVal['editable']){{disabled}} @endif @endif>
+</div>
+<div class="form-group">
+    <label for="wall-time">Wall Time Limit <span>( Max Allowed Wall Time - <span class="walltime-count alert-warning"></span>)</span></label>
+    <div class="input-group">
+        <input type="number" class="form-control" name="wall-time" id="wall-time" min="0"
+        value="@if(isset($expVal) ){{ $expVal['scheduling']->wallTimeLimit }}@else{{$queueDefaults['wallTimeLimit']}}@endif"
+        @if(isset($expVal)) @if(!$expVal['editable']){{disabled}} @endif @endif>
+        <span class="input-group-addon">minutes</span>
+    </div>
+</div>
+<div class="form-group">
+    <label for="wall-time">Total Physical Memory <span>( Max Allowed Memory - <span class="memory-count alert-warning"></span>)</span></label>
+    <div class="input-group">
+        <input type="number" class="form-control" name="total-physical-memory" id="memory-count" min="0"
+        value="@if(isset($expVal) ){{ $expVal['scheduling']->totalPhysicalMemory }}@endif"
+        @if(isset($expVal)) @if(!$expVal['editable']){{disabled}} @endif @endif>
+        <span class="input-group-addon">MB</span>
+    </div>
+</div>
+</div>
+
+<script>
+$("#select-queue").change( function(){
+	var selectedQueue = $(this).val();
+	var queues = $.parseJSON( $("#queue-array").val() );
+	console.log( queues);
+	for( var i =0; i< queues.length; i++)
+	{
+		if( queues[i]['queueName'] == selectedQueue)
+		{
+			//node-count
+			if( queues[i]['maxNodes'] != 0 || queues[i]['maxNodes'] != null )
+			{
+				$("#node-count").attr("max", queues[i]['maxNodes']).val(1);
+				$(".node-count").html( queues[i]['maxNodes']);
+				$(".node-count").parent().removeClass("hide");
+			}
+			else
+				$(".node-count").parent().addClass("hide");
+
+
+			//core-count
+			if( queues[i]['maxProcessors'] != 0 || queues[i]['maxProcessors'] != null )
+			{
+				$("#cpu-count").attr("max", queues[i]['maxProcessors']).val(1);
+				$(".cpu-count").html( queues[i]['maxProcessors']);
+				$(".cpu-count").parent().removeClass("hide");
+			}
+			else
+				$(".cpu-count").parent().addClass("hide");
+
+			//walltime-count
+			if( queues[i]['maxRunTime'] != 0 || queues[i]['maxRunTime'] != null )
+			{
+				$("#wall-time").attr("max", queues[i]['maxRunTime']).val(0);
+				$(".wall-time").html( queues[i]['maxRunTime']);
+				$(".walltime-count").parent().removeClass("hide");
+			}
+			else
+				$(".core-count").parent().addClass("hide");
+
+			//memory-count
+			if( queues[i]['maxMemory'] != 0 || queues[i]['maxMemory'] != null )
+			{
+				$("#memory-count").attr("max", queues[i]['maxMemory']).val(0);
+				$(".memory-count").html( queues[i]['maxMemory']);
+				$(".memory-count").parent().removeClass("hide");
+			}
+			else
+				$(".memory-count").parent().addClass("hide");
+		}
+	}
+	$(".queue-data").removeClass("hide");
+});
\ No newline at end of file


[11/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/changes.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/changes.json b/vendor/laravel/framework/src/Illuminate/Foundation/changes.json
new file mode 100755
index 0000000..4d9a112
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/changes.json
@@ -0,0 +1,215 @@
+{
+	"4.2.*": [
+		{"message": "View and Pagination 'Environment' classes renamed to 'Factory'.", "backport": null},
+		{"message": "Configurable encryption for Iron.io queue messages.", "backport": null},
+		{"message": "Make FrameGuard middleware opt-in.", "backport": null},
+		{"message": "Convert View '$errors' shared variable into ViewErrorBag. Allows multiple bags per view. Should be backwards compatible.", "backport": null},
+		{"message": "Calling 'create' on a HasOne or HasMany relation will now use 'fill' method so mutators are executed on related model.", "backport": null},
+		{"message": "Use rawurldecode when decoding parameters in Route::parameters.", "backport": null},
+		{"message": "When date_format validation rule is used, before and after validation dates must match given format.", "backport": null},
+		{"message": "Added ability to register global Eloquent scopes using traits and addGlobalScope.", "backport": null},
+		{"message": "Soft deleting converted to use new global scope facilities.", "backport": null},
+		{"message": "Added ability to extend Eloquent Builder using 'macro' method.", "backport": null},
+		{"message": "Soft deleting models now use SoftDeletingTrait instead of softDelete property.", "backport": null},
+		{"message": "The queue:listen command will now write the names of the jobs it processes to the console.", "backport": null},
+		{"message": "Added Mailgun API transport for Mail::send. Depends on new 'services' configuration file.", "backport": null},
+		{"message": "Added Mandrill API transport for Mail::send. Depends on new 'services' configuration file.", "backport": null},
+		{"message": "Added 'log' mail transport for Mail::send. Writes raw MIME string to log files.", "backport": null},
+		{"message": "Added simplePaginate method to query and Eloquent builder.", "backport": null},
+		{"message": "Destructive migration operations now require confirmation or --force when being run in production.", "backport": null},
+		{"message": "Added Cache::pull method for retrieving a value and then deleting it.", "backport": null},
+		{"message": "Added Session::pull method for retrieving a value and then deleting it.", "backport": null},
+		{"message": "Added rel attribute to basic pagination links.", "backport": null},
+		{"message": "The 'page' query variable is now ignored when calling the paginator 'appends' method.", "backport": null},
+		{"message": "Empty arrays that are 'required' validate as false when empty.", "backport": null},
+		{"message": "Added --daemon option to the queue:work command.", "backport": null},
+		{"message": "Added convenient traits for authentication and password reminding.", "backport": null},
+		{"message": "Added 'reject' method to Collection.", "backport": null},
+		{"message": "Added 'updateOrCreate' method to Eloquent model.", "backport": null},
+		{"message": "Added 'keyBy' method to Collection.", "backport": null},
+		{"message": "Added 'contains' method to base Collection.", "backport": null},
+		{"message": "Allow 'where' route constraints to be passed in array definition of Route.", "backport": null},
+		{"message": "Properly support Route 'where' constraints on a Route group.", "backport": null},
+		{"message": "When 'increment' or 'decrement' is called on a single Model instance, the local attribute value is updated as well.", "backport": null},
+		{"message": "Automatically retry queries on database connections that have 'gone away'.", "backport": null},
+		{"message": "Allow accessing of read / write database connections using ::read and ::write syntax.", "backport": null}
+	],
+	"4.1.*": [
+		{"message": "Added new SSH task runner tools.", "backport": null},
+		{"message": "Allow before and after validation rules to reference other fields.", "backport": null},
+		{"message": "Added splice method to Collection class.", "backport": null},
+		{"message": "Added newest and oldest methods to query builder for timestamp short-hand queries.", "backport": null},
+		{"message": "Rebuild the routing layer for speed and efficiency.", "backport": null},
+		{"message": "Added morphToMany relation for polymorphic many-to-many relations.", "backport": null},
+		{"message": "Make Boris available from Tinker command when available.", "backport": null},
+		{"message": "Allow route names to be specified on resources.", "backport": null},
+		{"message": "Collection `push` now appends. New `prepend` method on collections.", "backport": null},
+		{"message": "Use environment for log file name.", "backport": null},
+		{"message": "Use 'bit' as storage type for boolean on SQL Server.", "backport": null},
+		{"message": "Added new 'firing' method to event dispatcher, deprecated passing of event as last parameter.", "backport": null},
+		{"message": "Added QueryException with better formatted error messages.", "backport": null},
+		{"message": "Added 'input' method to Router.", "backport": null},
+		{"message": "Laravel now generates a single laravel.log file instead of many files.", "backport": null},
+		{"message": "Added new 'tail' Artisan command for tailing remote log files.", "backport": null},
+		{"message": "Support passing an array of files or dynamic arguments into File::delete.", "backport": null},
+		{"message": "Support calling local controller methods as filters using @method syntax.", "backport": null},
+		{"message": "Support passing Carbon instances into Cache put style methods.", "backport": null},
+		{"message": "New SessionInterface implementation - moved away from Symfony's implementation.", "backport": null},
+		{"message": "Native session driver has been replaced by 'file'. Specifying 'native' driver will just use the new file driver.", "backport": null},
+		{"message": "Now using Stack\\Builder in Application::run.", "backport": null},
+		{"message": "Cookies should now be accessed via Input::cookie - Cookie::get will continue to work for this release.", "backport": null},
+		{"message": "When accessing cookies outside of a request context, you will need to decrypt them manually.", "backport": null},
+		{"message": "When unit testing, the application instance is now refreshed once per test class - not every test.", "backport": null},
+		{"message": "Added 'whereNotBetween' support to the query builder.", "backport": null},
+		{"message": "Added App::middleware method to inject middlewares onto Stack.", "backport": null},
+		{"message": "Deprecate 'close' application hooks, Stack middlewares should be used instead.", "backport": null},
+		{"message": "A new packages directory within `lang` can now override package language files.", "backport": null},
+		{"message": "Added new 'Auth::viaRemember method to determine if user was authed via 'remember me' cookie.", "backport": null},
+		{"message": "Allow passing a view name to paginator's 'links' method.", "backport": null},
+		{"message": "Added new hasManyThrough relationship type.", "backport": null},
+		{"message": "Cloned Eloquent query builders now clone the underlying query builder.", "backport": null},
+		{"message": "Allow for passing of custom attributes into Validator::make as fourth parameter.", "backport": null},
+		{"message": "Allow comma delimited list of queues to be passed to queue:listen / queue:work to implement queue priority.", "backport": null},
+		{"message": "When new bindings are added to container, old aliases bound to that key will now be dropped.", "backport": null},
+		{"message": "Added new 'resolvable' and 'isAlias' methods to the container.", "backport": null},
+		{"message": "BelongsTo relationships may now reference any key on parent model, not just primary key.", "backport": null},
+		{"message": "HasOne, HasMany, and morph relationships may now use any key on parent model, not just primary key.", "backport": null},
+		{"message": "Eloquent 'has' method will now maintain where clauses set on relation.", "backport": null},
+		{"message": "New 'whereHas' and 'orWhereHas' Eloquent methods that allow extra constraints on 'has' type queries.", "backport": null},
+		{"message": "New 'or' syntax in Blade echos can be used to build isset statements and echos.", "backport": null},
+		{"message": "Allow the 'name' of belongsTo and belongsToMany to be explictly set.", "backport": null},
+		{"message": "New Cache::tags feature that allows tagging cached items and flushing them by any tag.", "backport": null},
+		{"message": "New FrameGuard middleware sends SAMEORIGIN X-Frame-Options header on each response by default.", "backport": null},
+		{"message": "Added 'joinWhere' and 'leftJoinWhere' to query builder for joins with bindings.", "backport": null},
+		{"message": "Added 'require_without_all' validation rule.", "backport": null},
+		{"message": "Controller method is now passed to missingMethod as first parameter.", "backport": null},
+		{"message": "New @append Blade directive for appending content onto a section.", "backport": null},
+		{"message": "Session IDs are now automatically regenerated on login.", "backport": null},
+		{"message": "Improve Auth::once to get rid of redundant database call.", "backport": null},
+		{"message": "In addition to the 'remember' function, query builder now supports 'rememberForever'.", "backport": null},
+		{"message": "Changes (breaking) to the return values of password reminder functions to provide more freedom to developer.", "backport": null},
+		{"message": "Added new `auth:reminders-controller' command to generate an entire password reminder controller.", "backport": null},
+		{"message": "New 'Password::validator' function that allows custom validation on passwords when resetting.", "backport": null},
+		{"message": "Added support for checking job attempts to Iron.io queue jobs.", "backport": null},
+		{"message": "Added support for releasing pushed Iron.io jobs back onto the queue.", "backport": null},
+		{"message": "Allow strict mode option to be enabled for MySQL connections.", "backport": null},
+		{"message": "Added 'wherePivot' and 'orWherePivot' methods to BelongsToMany relationship for convenience.", "backport": null},
+		{"message": "Added automatic separation of read / write connections into database layer.", "backport": null},
+		{"message": "Added automatic failed job handling for all queue drivers. New --tries switch for queue:listen and queue:work.", "backport": null},
+		{"message": "Cache:add now returns true when the value is actually added. False is returned otherwise.", "backport": null},
+		{"message": "Added merge, diff, and intersect to the Collection class.", "backport": null},
+		{"message": "Added fragment method to paginator.", "backport": null},
+		{"message": "Added 'renderSections' method to the View.", "backport": null},
+		{"message": "Added pessimistic locking to query builder via 'lock', 'lockForUpdate', and 'sharedLock'.", "backport": null},
+		{"message": "Closure can now be passed to Collection->first, functions similarly to array_first.", "backport": null},
+		{"message": "Added Mail::failures to get the failed recipients for a message.", "backport": null},
+		{"message": "Renamed `Model::tags($cacheTags)` to `Model::cacheTags($cacheTags)`", "backport": null},
+		{"message": "Model::destroy now returns the total number of records deleted.", "backport": null},
+		{"message": "Fixed relative URL generation.", "backport": null},
+		{"message": "Added --seeder option to migrate:refresh Artisan command.", "backport": null},
+		{"message": "Added 'cacheDriver' method to query builder.", "backport": null},
+		{"message": "Added support for whereHas on belongsTo relationships.", "backport": null},
+		{"message": "Added groupBy to Collection class.", "backport": null},
+		{"message": "Added the View::composers method.", "backport": null},
+		{"message": "Added new 'sometimes' validation rule short-cut to only run validation if rule is present.", "backport": null},
+		{"message": "Duplicate service providers can't be registered without 'force' parameter.", "backport": null},
+		{"message": "Added --lines option to the 'tail' Artisan command.", "backport": null},
+		{"message": "Allow 'keytext' option to be set on Remote configuration.", "backport": null},
+		{"message": "Added support for '.env' files in the project root directory for loading $_ENV and $_SERVER.", "backport": null},
+		{"message": "Added 'getString' method to the SSH class to allow fetching remote file into a string.", "backport": null},
+		{"message": "Added 'append_config' helper to assign high keys to configuration items.", "backport": null},
+		{"message": "Nested where queries using Closures with Eloquent will now use Eloquent query builder.", "backport": null},
+		{"message": "Allow passing a string into the 'sortBy' and 'sortByDesc' Collection methods.", "backport": null},
+		{"message": "Added 'sum' method to the base Support collection.", "backport": null},
+		{"message": "Return an empty Collection if the array given to Eloquent::find is empty.", "backport": null},
+		{"message": "Added 'toBase' method to Eloquent collection.", "backport": null},
+		{"message": "New 'Route::matched' event available.", "backport": null},
+		{"message": "Added new 'selectRaw' method to query builder.", "backport": null},
+		{"message": "Fixed required_with behavior to match required_without. Added required_with_any.", "backport": null},
+		{"message": "Added ability to register custom message replacers with the Validator.", "backport": null},
+		{"message": "Added support for 'char' columns in the Schema builder.", "backport": null},
+		{"message": "Added 'forgetBeforeFilter' and 'forgetAfterFilter' to controllers.", "backport": null},
+		{"message": "Allow container parameter overrides to be specified by argument name.", "backport": null},
+		{"message": "BelongsToMany 'sync' method now returns array with information on what changed.", "backport": null},
+		{"message": "TTR configuration option now supported on Beanstalk queues.", "backport": null},
+		{"message": "Added support for eager loading of MorphTo relationships.", "backport": null},
+		{"message": "Added 'assertViewMissing' method to TestCase.", "backport": null},
+		{"message": "Added 'whereYear', 'whereMonth', and 'whereDay'.", "backport": null},
+		{"message": "Added events for committing, rolling back, and starting transactions on databsae connections.", "backport": null},
+		{"message": "Added 'Auth::id' method to just get the authenticate user ID from the session / recaller cookie.", "backport": null},
+		{"message": "New 'Input::exists' function for checking for the mere presence of input items.", "backport": null},
+		{"message": "New system for invalidating remember me cookies on logout.", "backport": null},
+		{"message": "Iron queue now accepts ssl_verifypeer configuration option.", "backport": null},
+		{"message": "Make column quoting more robust for greater security when passing an array of user input into update methods.", "backport": null}
+	],
+	"4.0.*": [
+		{"message": "Added implode method to query builder and Collection class.", "backport": null},
+		{"message": "Fixed bug that caused Model->push method to fail.", "backport": null},
+		{"message": "Make session cookie HttpOnly by default.", "backport": null},
+		{"message": "Added mail.pretend configuration option.", "backport": null},
+		{"message": "Query elapsed time is now reported as float instead of string.", "backport": null},
+		{"message": "Added Model::query method for generating an empty query builder.", "backport": null},
+		{"message": "The @yield Blade directive now accepts a default value as the second argument.", "backport": null},
+		{"message": "Fixed bug causing null to be passed to auth.logout event.", "backport": null},
+		{"message": "Added polyfill for array_column forward compatibility.", "backport": null},
+		{"message": "Passing NULL to validator exists rule as extra condition will do where null check.", "backport": null},
+		{"message": "Auth::extend Closures should only return UserProviderInterface implementations.", "backport": null},
+		{"message": "Make it easier to extend the Request class.", "backport": null},
+		{"message": "Transparent support for APCu cache via 'apc' driver.", "backport": null},
+		{"message": "Add morphs short-cut for adding polymorphic schema columns.", "backport": null},
+		{"message": "Namespaces are now excluded from guessed model names.", "backport": null},
+		{"message": "Added new --command option to command:make Artisan command.", "backport": null},
+		{"message": "Added mediumText and longText to schema builder.", "backport": null},
+		{"message": "Added support for macros on the Response class.", "backport": null},
+		{"message": "Added support for view creators in addition to composers.", "backport": null},
+		{"message": "Allow App::down to be bypassed if the event returns null.", "backport": null},
+		{"message": "Added Request::format function to get human-readable expected Response format.", "backport": null},
+		{"message": "Allow array sizes to be checked by validator.", "backport": null},
+		{"message": "Added support for where conditions on unique validation rule.", "backport": null},
+		{"message": "Restore method on Eloquent models now fires restoring and restored events.", "backport": null},
+		{"message": "Fixed re-population of radio buttons and checkboxes in FormBuilder.", "backport": null},
+		{"message": "Postgres ENUMs are now more truly implemented using 'check' constraints.", "backport": null},
+		{"message": "Added selectMonth and selectYear to FormBuilder.", "backport": null},
+		{"message": "Fix container resolution of default values for non-scalar dependencies.", "backport": null},
+		{"message": "Allow optional path to be specified with calling _path helpers.", "backport": null},
+		{"message": "Emulate nested transactions in the database connection layer.", "backport": null},
+		{"message": "Added new appends property to Eloquent for adding to arrays and JSON.", "backport": null},
+		{"message": "Allow connection to be configurable when using Redis based sessions.", "backport": null},
+		{"message": "Allow passing DateTime objects to Queue::later.", "backport": null},
+		{"message": "Added Queue::bulk method for pushing several jobs out at once.", "backport": null},
+		{"message": "Added 'dates' property to Eloquent model for convenient setting of date columns.", "backport": null},
+		{"message": "Added 'chunk' method to query builder and Eloquent for doing work on large result sets.", "backport": null},
+		{"message": "Facades are now mockable without an application root.", "backport": null},
+		{"message": "Data may now be dynamically bound to views via magic methods.", "backport": null},
+		{"message": "Added support for XCache cache driver.", "backport": null},
+		{"message": "Added 'env' command to get current environment.", "backport": null},
+		{"message": "Added new --path and --name options to 'routes' Artisan command.", "backport": null},
+		{"message": "Implement JSONable and Arrayable interfaces on Paginator.", "backport": null},
+		{"message": "Foreign characters now supported in validation 'alpha' rules.", "backport": null},
+		{"message": "Added 'prepend' method to Filesystem.", "backport": null},
+		{"message": "Added 'reduce' collection to Collection, and 'min' and 'max' to Eloquent Collection.", "backport": null},
+		{"message": "Added 'firstOrCreate' and 'firstOrNew' methods to Eloquent model.", "backport": null},
+		{"message": "Added Redirect::away method to always redirect to external URL with no validation.", "backport": null},
+		{"message": "Added 'double' method to Schema builder.", "backport": null},
+		{"message": "Pass keys to 'map' method on Collection.", "backport": null},
+		{"message": "Added 'orderByRaw' method to query builder.", "backport": null},
+		{"message": "Added --bench option to controller:make Artisan command.", "backport": null},
+		{"message": "Moved newPivot method into model for custom Pivot model instances.", "backport": null},
+		{"message": "Added 'shared' method to View to pull a single shared item out.", "backport": null},
+		{"message": "Added assertHasOldInput test assertion.", "backport": null},
+		{"message": "Added slick new 'sometimes' method to Validator for conditionally adding rules.", "backport": null},
+		{"message": "Added new '--sleep' option to queue:listen command to control time between jobs.", "backport": null},
+		{"message": "Allow Blade processing on echos to be escaped using the @ sign.", "backport": null},
+		{"message": "Allow custom messages to be registered when using Validator::extend.", "backport": null},
+		{"message": "Added new auth:clear-reminders command for clearing expired password reminders.", "backport": null},
+		{"message": "Added Cookie::queue method for creating cookies that are automatically attached to the final response.", "backport": null},
+		{"message": "Allow environment to be checked via App::environment method.", "backport": null},
+		{"message": "Add support for order by and limit on MySQL update queries.", "backport": null},
+		{"message": "Tweak Container::resolve to accept a type, new resolvingAny method for all objects.", "backport": null},
+		{"message": "Do not run queue workers while application is in maintenance mode.", "backport": null},
+		{"message": "Values returned from scopes are now returned for chaining.", "backport": null},
+		{"message": "New 'nullableTimestamps' method on Schema builder.", "backport": null},
+		{"message": "Added 'extend' alias method for 'addConnector' in QueueManager class.", "backport": null},
+		{"message": "Fixed exception handling bug that caused HTML to be dumped into console.", "backport": null}
+	]
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/start.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/start.php b/vendor/laravel/framework/src/Illuminate/Foundation/start.php
new file mode 100755
index 0000000..ad84ec1
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/start.php
@@ -0,0 +1,271 @@
+<?php
+
+/*
+|--------------------------------------------------------------------------
+| Set PHP Error Reporting Options
+|--------------------------------------------------------------------------
+|
+| Here we will set the strictest error reporting options, and also turn
+| off PHP's error reporting, since all errors will be handled by the
+| framework and we don't want any output leaking back to the user.
+|
+*/
+
+error_reporting(-1);
+
+/*
+|--------------------------------------------------------------------------
+| Check Extensions
+|--------------------------------------------------------------------------
+|
+| Laravel requires a few extensions to function. Here we will check the
+| loaded extensions to make sure they are present. If not we'll just
+| bail from here. Otherwise, Composer will crazily fall back code.
+|
+*/
+
+if ( ! extension_loaded('mcrypt'))
+{
+	echo 'Mcrypt PHP extension required.'.PHP_EOL;
+
+	exit(1);
+}
+
+/*
+|--------------------------------------------------------------------------
+| Register Class Imports
+|--------------------------------------------------------------------------
+|
+| Here we will just import a few classes that we need during the booting
+| of the framework. These are mainly classes that involve loading the
+| config files for this application, such as the config repository.
+|
+*/
+
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Facade;
+use Illuminate\Foundation\AliasLoader;
+use Illuminate\Config\EnvironmentVariables;
+use Illuminate\Config\Repository as Config;
+
+/*
+|--------------------------------------------------------------------------
+| Bind The Application In The Container
+|--------------------------------------------------------------------------
+|
+| This may look strange, but we actually want to bind the app into itself
+| in case we need to Facade test an application. This will allow us to
+| resolve the "app" key out of this container for this app's facade.
+|
+*/
+
+$app->instance('app', $app);
+
+/*
+|--------------------------------------------------------------------------
+| Check For The Test Environment
+|--------------------------------------------------------------------------
+|
+| If the "unitTesting" variable is set, it means we are running the unit
+| tests for the application and should override this environment here
+| so we use the right configuration. The flag gets set by TestCase.
+|
+*/
+
+if (isset($unitTesting))
+{
+	$app['env'] = $env = $testEnvironment;
+}
+
+/*
+|--------------------------------------------------------------------------
+| Load The Illuminate Facades
+|--------------------------------------------------------------------------
+|
+| The facades provide a terser static interface over the various parts
+| of the application, allowing their methods to be accessed through
+| a mixtures of magic methods and facade derivatives. It's slick.
+|
+*/
+
+Facade::clearResolvedInstances();
+
+Facade::setFacadeApplication($app);
+
+/*
+|--------------------------------------------------------------------------
+| Register Facade Aliases To Full Classes
+|--------------------------------------------------------------------------
+|
+| By default, we use short keys in the container for each of the core
+| pieces of the framework. Here we will register the aliases for a
+| list of all of the fully qualified class names making DI easy.
+|
+*/
+
+$app->registerCoreContainerAliases();
+
+/*
+|--------------------------------------------------------------------------
+| Register The Environment Variables
+|--------------------------------------------------------------------------
+|
+| Here we will register all of the $_ENV and $_SERVER variables into the
+| process so that they're globally available configuration options so
+| sensitive configuration information can be swept out of the code.
+|
+*/
+
+with($envVariables = new EnvironmentVariables(
+	$app->getEnvironmentVariablesLoader()))->load($env);
+
+/*
+|--------------------------------------------------------------------------
+| Register The Configuration Repository
+|--------------------------------------------------------------------------
+|
+| The configuration repository is used to lazily load in the options for
+| this application from the configuration files. The files are easily
+| separated by their concerns so they do not become really crowded.
+|
+*/
+
+$app->instance('config', $config = new Config(
+
+	$app->getConfigLoader(), $env
+
+));
+
+/*
+|--------------------------------------------------------------------------
+| Register Application Exception Handling
+|--------------------------------------------------------------------------
+|
+| We will go ahead and register the application exception handling here
+| which will provide a great output of exception details and a stack
+| trace in the case of exceptions while an application is running.
+|
+*/
+
+$app->startExceptionHandling();
+
+if ($env != 'testing') ini_set('display_errors', 'Off');
+
+/*
+|--------------------------------------------------------------------------
+| Set The Default Timezone
+|--------------------------------------------------------------------------
+|
+| Here we will set the default timezone for PHP. PHP is notoriously mean
+| if the timezone is not explicitly set. This will be used by each of
+| the PHP date and date-time functions throughout the application.
+|
+*/
+
+$config = $app['config']['app'];
+
+date_default_timezone_set($config['timezone']);
+
+/*
+|--------------------------------------------------------------------------
+| Register The Alias Loader
+|--------------------------------------------------------------------------
+|
+| The alias loader is responsible for lazy loading the class aliases setup
+| for the application. We will only register it if the "config" service
+| is bound in the application since it contains the alias definitions.
+|
+*/
+
+$aliases = $config['aliases'];
+
+AliasLoader::getInstance($aliases)->register();
+
+/*
+|--------------------------------------------------------------------------
+| Enable HTTP Method Override
+|--------------------------------------------------------------------------
+|
+| Next we will tell the request class to allow HTTP method overriding
+| since we use this to simulate PUT and DELETE requests from forms
+| as they are not currently supported by plain HTML form setups.
+|
+*/
+
+Request::enableHttpMethodParameterOverride();
+
+/*
+|--------------------------------------------------------------------------
+| Register The Core Service Providers
+|--------------------------------------------------------------------------
+|
+| The Illuminate core service providers register all of the core pieces
+| of the Illuminate framework including session, caching, encryption
+| and more. It's simply a convenient wrapper for the registration.
+|
+*/
+
+$providers = $config['providers'];
+
+$app->getProviderRepository()->load($app, $providers);
+
+/*
+|--------------------------------------------------------------------------
+| Register Booted Start Files
+|--------------------------------------------------------------------------
+|
+| Once the application has been booted there are several "start" files
+| we will want to include. We'll register our "booted" handler here
+| so the files are included after the application gets booted up.
+|
+*/
+
+$app->booted(function() use ($app, $env)
+{
+
+	/*
+	|--------------------------------------------------------------------------
+	| Load The Application Start Script
+	|--------------------------------------------------------------------------
+	|
+	| The start scripts gives this application the opportunity to override
+	| any of the existing IoC bindings, as well as register its own new
+	| bindings for things like repositories, etc. We'll load it here.
+	|
+	*/
+
+	$path = $app['path'].'/start/global.php';
+
+	if (file_exists($path)) require $path;
+
+	/*
+	|--------------------------------------------------------------------------
+	| Load The Environment Start Script
+	|--------------------------------------------------------------------------
+	|
+	| The environment start script is only loaded if it exists for the app
+	| environment currently active, which allows some actions to happen
+	| in one environment while not in the other, keeping things clean.
+	|
+	*/
+
+	$path = $app['path']."/start/{$env}.php";
+
+	if (file_exists($path)) require $path;
+
+	/*
+	|--------------------------------------------------------------------------
+	| Load The Application Routes
+	|--------------------------------------------------------------------------
+	|
+	| The Application routes are kept separate from the application starting
+	| just to keep the file a little cleaner. We'll go ahead and load in
+	| all of the routes now and return the application to the callers.
+	|
+	*/
+
+	$routes = $app['path'].'/routes.php';
+
+	if (file_exists($routes)) require $routes;
+
+});

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php b/vendor/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php
new file mode 100755
index 0000000..935c5d5
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php
@@ -0,0 +1,73 @@
+<?php namespace Illuminate\Hashing;
+
+class BcryptHasher implements HasherInterface {
+
+	/**
+	 * Default crypt cost factor.
+	 *
+	 * @var int
+	 */
+	protected $rounds = 10;
+
+	/**
+	 * Hash the given value.
+	 *
+	 * @param  string  $value
+	 * @param  array   $options
+	 * @return string
+	 *
+	 * @throws \RuntimeException
+	 */
+	public function make($value, array $options = array())
+	{
+		$cost = isset($options['rounds']) ? $options['rounds'] : $this->rounds;
+
+		$hash = password_hash($value, PASSWORD_BCRYPT, array('cost' => $cost));
+
+		if ($hash === false)
+		{
+			throw new \RuntimeException("Bcrypt hashing not supported.");
+		}
+
+		return $hash;
+	}
+
+	/**
+	 * Check the given plain value against a hash.
+	 *
+	 * @param  string  $value
+	 * @param  string  $hashedValue
+	 * @param  array   $options
+	 * @return bool
+	 */
+	public function check($value, $hashedValue, array $options = array())
+	{
+		return password_verify($value, $hashedValue);
+	}
+
+	/**
+	 * Check if the given hash has been hashed using the given options.
+	 *
+	 * @param  string  $hashedValue
+	 * @param  array   $options
+	 * @return bool
+	 */
+	public function needsRehash($hashedValue, array $options = array())
+	{
+		$cost = isset($options['rounds']) ? $options['rounds'] : $this->rounds;
+
+		return password_needs_rehash($hashedValue, PASSWORD_BCRYPT, array('cost' => $cost));
+	}
+
+	/**
+	 * Set the default crypt cost factor.
+	 *
+	 * @param  int  $rounds
+	 * @return void
+	 */
+	public function setRounds($rounds)
+	{
+		$this->rounds = (int) $rounds;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Hashing/HashServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Hashing/HashServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Hashing/HashServiceProvider.php
new file mode 100755
index 0000000..cc1f5c2
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Hashing/HashServiceProvider.php
@@ -0,0 +1,34 @@
+<?php namespace Illuminate\Hashing;
+
+use Illuminate\Support\ServiceProvider;
+
+class HashServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('hash', function() { return new BcryptHasher; });
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('hash');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Hashing/HasherInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Hashing/HasherInterface.php b/vendor/laravel/framework/src/Illuminate/Hashing/HasherInterface.php
new file mode 100755
index 0000000..7070690
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Hashing/HasherInterface.php
@@ -0,0 +1,33 @@
+<?php namespace Illuminate\Hashing;
+
+interface HasherInterface {
+
+	/**
+	 * Hash the given value.
+	 *
+	 * @param  string  $value
+	 * @param  array   $options
+	 * @return string
+	 */
+	public function make($value, array $options = array());
+
+	/**
+	 * Check the given plain value against a hash.
+	 *
+	 * @param  string  $value
+	 * @param  string  $hashedValue
+	 * @param  array   $options
+	 * @return bool
+	 */
+	public function check($value, $hashedValue, array $options = array());
+
+	/**
+	 * Check if the given hash has been hashed using the given options.
+	 *
+	 * @param  string  $hashedValue
+	 * @param  array   $options
+	 * @return bool
+	 */
+	public function needsRehash($hashedValue, array $options = array());
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Hashing/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Hashing/composer.json b/vendor/laravel/framework/src/Illuminate/Hashing/composer.json
new file mode 100755
index 0000000..b85b2cc
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Hashing/composer.json
@@ -0,0 +1,27 @@
+{
+    "name": "illuminate/hashing",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/support": "4.2.*",
+        "ircmaxell/password-compat": "~1.0"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Hashing": ""
+        }
+    },
+    "target-dir": "Illuminate/Hashing",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Html/FormBuilder.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Html/FormBuilder.php b/vendor/laravel/framework/src/Illuminate/Html/FormBuilder.php
new file mode 100755
index 0000000..0e60ddb
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Html/FormBuilder.php
@@ -0,0 +1,985 @@
+<?php namespace Illuminate\Html;
+
+use Illuminate\Routing\UrlGenerator;
+use Illuminate\Session\Store as Session;
+use Illuminate\Support\Traits\MacroableTrait;
+
+class FormBuilder {
+
+	use MacroableTrait;
+
+	/**
+	 * The HTML builder instance.
+	 *
+	 * @var \Illuminate\Html\HtmlBuilder
+	 */
+	protected $html;
+
+	/**
+	 * The URL generator instance.
+	 *
+	 * @var \Illuminate\Routing\UrlGenerator  $url
+	 */
+	protected $url;
+
+	/**
+	 * The CSRF token used by the form builder.
+	 *
+	 * @var string
+	 */
+	protected $csrfToken;
+
+	/**
+	 * The session store implementation.
+	 *
+	 * @var \Illuminate\Session\Store
+	 */
+	protected $session;
+
+	/**
+	 * The current model instance for the form.
+	 *
+	 * @var mixed
+	 */
+	protected $model;
+
+	/**
+	 * An array of label names we've created.
+	 *
+	 * @var array
+	 */
+	protected $labels = array();
+
+	/**
+	 * The reserved form open attributes.
+	 *
+	 * @var array
+	 */
+	protected $reserved = array('method', 'url', 'route', 'action', 'files');
+
+	/**
+	 * The form methods that should be spoofed, in uppercase.
+	 *
+	 * @var array
+	 */
+	protected $spoofedMethods = array('DELETE', 'PATCH', 'PUT');
+
+	/**
+	 * The types of inputs to not fill values on by default.
+	 *
+	 * @var array
+	 */
+	protected $skipValueTypes = array('file', 'password', 'checkbox', 'radio');
+
+	/**
+	 * Create a new form builder instance.
+	 *
+	 * @param  \Illuminate\Routing\UrlGenerator  $url
+	 * @param  \Illuminate\Html\HtmlBuilder  $html
+	 * @param  string  $csrfToken
+	 * @return void
+	 */
+	public function __construct(HtmlBuilder $html, UrlGenerator $url, $csrfToken)
+	{
+		$this->url = $url;
+		$this->html = $html;
+		$this->csrfToken = $csrfToken;
+	}
+
+	/**
+	 * Open up a new HTML form.
+	 *
+	 * @param  array   $options
+	 * @return string
+	 */
+	public function open(array $options = array())
+	{
+		$method = array_get($options, 'method', 'post');
+
+		// We need to extract the proper method from the attributes. If the method is
+		// something other than GET or POST we'll use POST since we will spoof the
+		// actual method since forms don't support the reserved methods in HTML.
+		$attributes['method'] = $this->getMethod($method);
+
+		$attributes['action'] = $this->getAction($options);
+
+		$attributes['accept-charset'] = 'UTF-8';
+
+		// If the method is PUT, PATCH or DELETE we will need to add a spoofer hidden
+		// field that will instruct the Symfony request to pretend the method is a
+		// different method than it actually is, for convenience from the forms.
+		$append = $this->getAppendage($method);
+
+		if (isset($options['files']) && $options['files'])
+		{
+			$options['enctype'] = 'multipart/form-data';
+		}
+
+		// Finally we're ready to create the final form HTML field. We will attribute
+		// format the array of attributes. We will also add on the appendage which
+		// is used to spoof requests for this PUT, PATCH, etc. methods on forms.
+		$attributes = array_merge(
+
+			$attributes, array_except($options, $this->reserved)
+
+		);
+
+		// Finally, we will concatenate all of the attributes into a single string so
+		// we can build out the final form open statement. We'll also append on an
+		// extra value for the hidden _method field if it's needed for the form.
+		$attributes = $this->html->attributes($attributes);
+
+		return '<form'.$attributes.'>'.$append;
+	}
+
+	/**
+	 * Create a new model based form builder.
+	 *
+	 * @param  mixed  $model
+	 * @param  array  $options
+	 * @return string
+	 */
+	public function model($model, array $options = array())
+	{
+		$this->model = $model;
+
+		return $this->open($options);
+	}
+
+	/**
+	 * Set the model instance on the form builder.
+	 *
+	 * @param  mixed  $model
+	 * @return void
+	 */
+	public function setModel($model)
+	{
+		$this->model = $model;
+	}
+
+	/**
+	 * Close the current form.
+	 *
+	 * @return string
+	 */
+	public function close()
+	{
+		$this->labels = array();
+
+		$this->model = null;
+
+		return '</form>';
+	}
+
+	/**
+	 * Generate a hidden field with the current CSRF token.
+	 *
+	 * @return string
+	 */
+	public function token()
+	{
+		return $this->hidden('_token', $this->csrfToken);
+	}
+
+	/**
+	 * Create a form label element.
+	 *
+	 * @param  string  $name
+	 * @param  string  $value
+	 * @param  array   $options
+	 * @return string
+	 */
+	public function label($name, $value = null, $options = array())
+	{
+		$this->labels[] = $name;
+
+		$options = $this->html->attributes($options);
+
+		$value = e($this->formatLabel($name, $value));
+
+		return '<label for="'.$name.'"'.$options.'>'.$value.'</label>';
+	}
+
+	/**
+	 * Format the label value.
+	 *
+	 * @param  string  $name
+	 * @param  string|null  $value
+	 * @return string
+	 */
+	protected function formatLabel($name, $value)
+	{
+		return $value ?: ucwords(str_replace('_', ' ', $name));
+	}
+
+	/**
+	 * Create a form input field.
+	 *
+	 * @param  string  $type
+	 * @param  string  $name
+	 * @param  string  $value
+	 * @param  array   $options
+	 * @return string
+	 */
+	public function input($type, $name, $value = null, $options = array())
+	{
+		if ( ! isset($options['name'])) $options['name'] = $name;
+
+		// We will get the appropriate value for the given field. We will look for the
+		// value in the session for the value in the old input data then we'll look
+		// in the model instance if one is set. Otherwise we will just use empty.
+		$id = $this->getIdAttribute($name, $options);
+
+		if ( ! in_array($type, $this->skipValueTypes))
+		{
+			$value = $this->getValueAttribute($name, $value);
+		}
+
+		// Once we have the type, value, and ID we can merge them into the rest of the
+		// attributes array so we can convert them into their HTML attribute format
+		// when creating the HTML element. Then, we will return the entire input.
+		$merge = compact('type', 'value', 'id');
+
+		$options = array_merge($options, $merge);
+
+		return '<input'.$this->html->attributes($options).'>';
+	}
+
+	/**
+	 * Create a text input field.
+	 *
+	 * @param  string  $name
+	 * @param  string  $value
+	 * @param  array   $options
+	 * @return string
+	 */
+	public function text($name, $value = null, $options = array())
+	{
+		return $this->input('text', $name, $value, $options);
+	}
+
+	/**
+	 * Create a password input field.
+	 *
+	 * @param  string  $name
+	 * @param  array   $options
+	 * @return string
+	 */
+	public function password($name, $options = array())
+	{
+		return $this->input('password', $name, '', $options);
+	}
+
+	/**
+	 * Create a hidden input field.
+	 *
+	 * @param  string  $name
+	 * @param  string  $value
+	 * @param  array   $options
+	 * @return string
+	 */
+	public function hidden($name, $value = null, $options = array())
+	{
+		return $this->input('hidden', $name, $value, $options);
+	}
+
+	/**
+	 * Create an e-mail input field.
+	 *
+	 * @param  string  $name
+	 * @param  string  $value
+	 * @param  array   $options
+	 * @return string
+	 */
+	public function email($name, $value = null, $options = array())
+	{
+		return $this->input('email', $name, $value, $options);
+	}
+
+	/**
+	 * Create a url input field.
+	 *
+	 * @param  string  $name
+	 * @param  string  $value
+	 * @param  array   $options
+	 * @return string
+	 */
+	public function url($name, $value = null, $options = array())
+	{
+		return $this->input('url', $name, $value, $options);
+	}
+
+	/**
+	 * Create a file input field.
+	 *
+	 * @param  string  $name
+	 * @param  array   $options
+	 * @return string
+	 */
+	public function file($name, $options = array())
+	{
+		return $this->input('file', $name, null, $options);
+	}
+
+	/**
+	 * Create a textarea input field.
+	 *
+	 * @param  string  $name
+	 * @param  string  $value
+	 * @param  array   $options
+	 * @return string
+	 */
+	public function textarea($name, $value = null, $options = array())
+	{
+		if ( ! isset($options['name'])) $options['name'] = $name;
+
+		// Next we will look for the rows and cols attributes, as each of these are put
+		// on the textarea element definition. If they are not present, we will just
+		// assume some sane default values for these attributes for the developer.
+		$options = $this->setTextAreaSize($options);
+
+		$options['id'] = $this->getIdAttribute($name, $options);
+
+		$value = (string) $this->getValueAttribute($name, $value);
+
+		unset($options['size']);
+
+		// Next we will convert the attributes into a string form. Also we have removed
+		// the size attribute, as it was merely a short-cut for the rows and cols on
+		// the element. Then we'll create the final textarea elements HTML for us.
+		$options = $this->html->attributes($options);
+
+		return '<textarea'.$options.'>'.e($value).'</textarea>';
+	}
+
+	/**
+	 * Set the text area size on the attributes.
+	 *
+	 * @param  array  $options
+	 * @return array
+	 */
+	protected function setTextAreaSize($options)
+	{
+		if (isset($options['size']))
+		{
+			return $this->setQuickTextAreaSize($options);
+		}
+
+		// If the "size" attribute was not specified, we will just look for the regular
+		// columns and rows attributes, using sane defaults if these do not exist on
+		// the attributes array. We'll then return this entire options array back.
+		$cols = array_get($options, 'cols', 50);
+
+		$rows = array_get($options, 'rows', 10);
+
+		return array_merge($options, compact('cols', 'rows'));
+	}
+
+	/**
+	 * Set the text area size using the quick "size" attribute.
+	 *
+	 * @param  array  $options
+	 * @return array
+	 */
+	protected function setQuickTextAreaSize($options)
+	{
+		$segments = explode('x', $options['size']);
+
+		return array_merge($options, array('cols' => $segments[0], 'rows' => $segments[1]));
+	}
+
+	/**
+	 * Create a number input field.
+	 *
+	 * @param  string  $name
+	 * @param  string|null  $value
+	 * @param  array  $options
+	 * @return string
+	 */
+	public function number($name, $value = null, $options = array())
+	{
+		return $this->input('number', $name, $value, $options);
+	}
+
+	/**
+	 * Create a select box field.
+	 *
+	 * @param  string  $name
+	 * @param  array   $list
+	 * @param  string  $selected
+	 * @param  array   $options
+	 * @return string
+	 */
+	public function select($name, $list = array(), $selected = null, $options = array())
+	{
+		// When building a select box the "value" attribute is really the selected one
+		// so we will use that when checking the model or session for a value which
+		// should provide a convenient method of re-populating the forms on post.
+		$selected = $this->getValueAttribute($name, $selected);
+
+		$options['id'] = $this->getIdAttribute($name, $options);
+
+		if ( ! isset($options['name'])) $options['name'] = $name;
+
+		// We will simply loop through the options and build an HTML value for each of
+		// them until we have an array of HTML declarations. Then we will join them
+		// all together into one single HTML element that can be put on the form.
+		$html = array();
+
+		foreach ($list as $value => $display)
+		{
+			$html[] = $this->getSelectOption($display, $value, $selected);
+		}
+
+		// Once we have all of this HTML, we can join this into a single element after
+		// formatting the attributes into an HTML "attributes" string, then we will
+		// build out a final select statement, which will contain all the values.
+		$options = $this->html->attributes($options);
+
+		$list = implode('', $html);
+
+		return "<select{$options}>{$list}</select>";
+	}
+
+	/**
+	 * Create a select range field.
+	 *
+	 * @param  string  $name
+	 * @param  string  $begin
+	 * @param  string  $end
+	 * @param  string  $selected
+	 * @param  array   $options
+	 * @return string
+	 */
+	public function selectRange($name, $begin, $end, $selected = null, $options = array())
+	{
+		$range = array_combine($range = range($begin, $end), $range);
+
+		return $this->select($name, $range, $selected, $options);
+	}
+
+	/**
+	 * Create a select year field.
+	 *
+	 * @param  string  $name
+	 * @param  string  $begin
+	 * @param  string  $end
+	 * @param  string  $selected
+	 * @param  array   $options
+	 * @return string
+	 */
+	public function selectYear()
+	{
+		return call_user_func_array(array($this, 'selectRange'), func_get_args());
+	}
+
+	/**
+	 * Create a select month field.
+	 *
+	 * @param  string  $name
+	 * @param  string  $selected
+	 * @param  array   $options
+	 * @param  string  $format
+	 * @return string
+	 */
+	public function selectMonth($name, $selected = null, $options = array(), $format = '%B')
+	{
+		$months = array();
+
+		foreach (range(1, 12) as $month)
+		{
+			$months[$month] = strftime($format, mktime(0, 0, 0, $month, 1));
+		}
+
+		return $this->select($name, $months, $selected, $options);
+	}
+
+	/**
+	 * Get the select option for the given value.
+	 *
+	 * @param  string  $display
+	 * @param  string  $value
+	 * @param  string  $selected
+	 * @return string
+	 */
+	public function getSelectOption($display, $value, $selected)
+	{
+		if (is_array($display))
+		{
+			return $this->optionGroup($display, $value, $selected);
+		}
+
+		return $this->option($display, $value, $selected);
+	}
+
+	/**
+	 * Create an option group form element.
+	 *
+	 * @param  array   $list
+	 * @param  string  $label
+	 * @param  string  $selected
+	 * @return string
+	 */
+	protected function optionGroup($list, $label, $selected)
+	{
+		$html = array();
+
+		foreach ($list as $value => $display)
+		{
+			$html[] = $this->option($display, $value, $selected);
+		}
+
+		return '<optgroup label="'.e($label).'">'.implode('', $html).'</optgroup>';
+	}
+
+	/**
+	 * Create a select element option.
+	 *
+	 * @param  string  $display
+	 * @param  string  $value
+	 * @param  string  $selected
+	 * @return string
+	 */
+	protected function option($display, $value, $selected)
+	{
+		$selected = $this->getSelectedValue($value, $selected);
+
+		$options = array('value' => e($value), 'selected' => $selected);
+
+		return '<option'.$this->html->attributes($options).'>'.e($display).'</option>';
+	}
+
+	/**
+	 * Determine if the value is selected.
+	 *
+	 * @param  string  $value
+	 * @param  string  $selected
+	 * @return string
+	 */
+	protected function getSelectedValue($value, $selected)
+	{
+		if (is_array($selected))
+		{
+			return in_array($value, $selected) ? 'selected' : null;
+		}
+
+		return ((string) $value == (string) $selected) ? 'selected' : null;
+	}
+
+	/**
+	 * Create a checkbox input field.
+	 *
+	 * @param  string  $name
+	 * @param  mixed   $value
+	 * @param  bool    $checked
+	 * @param  array   $options
+	 * @return string
+	 */
+	public function checkbox($name, $value = 1, $checked = null, $options = array())
+	{
+		return $this->checkable('checkbox', $name, $value, $checked, $options);
+	}
+
+	/**
+	 * Create a radio button input field.
+	 *
+	 * @param  string  $name
+	 * @param  mixed   $value
+	 * @param  bool    $checked
+	 * @param  array   $options
+	 * @return string
+	 */
+	public function radio($name, $value = null, $checked = null, $options = array())
+	{
+		if (is_null($value)) $value = $name;
+
+		return $this->checkable('radio', $name, $value, $checked, $options);
+	}
+
+	/**
+	 * Create a checkable input field.
+	 *
+	 * @param  string  $type
+	 * @param  string  $name
+	 * @param  mixed   $value
+	 * @param  bool    $checked
+	 * @param  array   $options
+	 * @return string
+	 */
+	protected function checkable($type, $name, $value, $checked, $options)
+	{
+		$checked = $this->getCheckedState($type, $name, $value, $checked);
+
+		if ($checked) $options['checked'] = 'checked';
+
+		return $this->input($type, $name, $value, $options);
+	}
+
+	/**
+	 * Get the check state for a checkable input.
+	 *
+	 * @param  string  $type
+	 * @param  string  $name
+	 * @param  mixed   $value
+	 * @param  bool    $checked
+	 * @return bool
+	 */
+	protected function getCheckedState($type, $name, $value, $checked)
+	{
+		switch ($type)
+		{
+			case 'checkbox':
+				return $this->getCheckboxCheckedState($name, $value, $checked);
+
+			case 'radio':
+				return $this->getRadioCheckedState($name, $value, $checked);
+
+			default:
+				return $this->getValueAttribute($name) == $value;
+		}
+	}
+
+	/**
+	 * Get the check state for a checkbox input.
+	 *
+	 * @param  string  $name
+	 * @param  mixed  $value
+	 * @param  bool  $checked
+	 * @return bool
+	 */
+	protected function getCheckboxCheckedState($name, $value, $checked)
+	{
+		if (isset($this->session) && ! $this->oldInputIsEmpty() && is_null($this->old($name))) return false;
+
+		if ($this->missingOldAndModel($name)) return $checked;
+
+		$posted = $this->getValueAttribute($name);
+
+		return is_array($posted) ? in_array($value, $posted) : (bool) $posted;
+	}
+
+	/**
+	 * Get the check state for a radio input.
+	 *
+	 * @param  string  $name
+	 * @param  mixed  $value
+	 * @param  bool  $checked
+	 * @return bool
+	 */
+	protected function getRadioCheckedState($name, $value, $checked)
+	{
+		if ($this->missingOldAndModel($name)) return $checked;
+
+		return $this->getValueAttribute($name) == $value;
+	}
+
+	/**
+	 * Determine if old input or model input exists for a key.
+	 *
+	 * @param  string  $name
+	 * @return bool
+	 */
+	protected function missingOldAndModel($name)
+	{
+		return (is_null($this->old($name)) && is_null($this->getModelValueAttribute($name)));
+	}
+
+	/**
+	 * Create a HTML reset input element.
+	 *
+	 * @param  string  $value
+	 * @param  array   $attributes
+	 * @return string
+	 */
+	public function reset($value, $attributes = array())
+	{
+		return $this->input('reset', null, $value, $attributes);
+	}
+
+	/**
+	 * Create a HTML image input element.
+	 *
+	 * @param  string  $url
+	 * @param  string  $name
+	 * @param  array   $attributes
+	 * @return string
+	 */
+	public function image($url, $name = null, $attributes = array())
+	{
+		$attributes['src'] = $this->url->asset($url);
+
+		return $this->input('image', $name, null, $attributes);
+	}
+
+	/**
+	 * Create a submit button element.
+	 *
+	 * @param  string  $value
+	 * @param  array   $options
+	 * @return string
+	 */
+	public function submit($value = null, $options = array())
+	{
+		return $this->input('submit', null, $value, $options);
+	}
+
+	/**
+	 * Create a button element.
+	 *
+	 * @param  string  $value
+	 * @param  array   $options
+	 * @return string
+	 */
+	public function button($value = null, $options = array())
+	{
+		if ( ! array_key_exists('type', $options))
+		{
+			$options['type'] = 'button';
+		}
+
+		return '<button'.$this->html->attributes($options).'>'.$value.'</button>';
+	}
+
+	/**
+	 * Parse the form action method.
+	 *
+	 * @param  string  $method
+	 * @return string
+	 */
+	protected function getMethod($method)
+	{
+		$method = strtoupper($method);
+
+		return $method != 'GET' ? 'POST' : $method;
+	}
+
+	/**
+	 * Get the form action from the options.
+	 *
+	 * @param  array   $options
+	 * @return string
+	 */
+	protected function getAction(array $options)
+	{
+		// We will also check for a "route" or "action" parameter on the array so that
+		// developers can easily specify a route or controller action when creating
+		// a form providing a convenient interface for creating the form actions.
+		if (isset($options['url']))
+		{
+			return $this->getUrlAction($options['url']);
+		}
+
+		if (isset($options['route']))
+		{
+			return $this->getRouteAction($options['route']);
+		}
+
+		// If an action is available, we are attempting to open a form to a controller
+		// action route. So, we will use the URL generator to get the path to these
+		// actions and return them from the method. Otherwise, we'll use current.
+		elseif (isset($options['action']))
+		{
+			return $this->getControllerAction($options['action']);
+		}
+
+		return $this->url->current();
+	}
+
+	/**
+	 * Get the action for a "url" option.
+	 *
+	 * @param  array|string  $options
+	 * @return string
+	 */
+	protected function getUrlAction($options)
+	{
+		if (is_array($options))
+		{
+			return $this->url->to($options[0], array_slice($options, 1));
+		}
+
+		return $this->url->to($options);
+	}
+
+	/**
+	 * Get the action for a "route" option.
+	 *
+	 * @param  array|string  $options
+	 * @return string
+	 */
+	protected function getRouteAction($options)
+	{
+		if (is_array($options))
+		{
+			return $this->url->route($options[0], array_slice($options, 1));
+		}
+
+		return $this->url->route($options);
+	}
+
+	/**
+	 * Get the action for an "action" option.
+	 *
+	 * @param  array|string  $options
+	 * @return string
+	 */
+	protected function getControllerAction($options)
+	{
+		if (is_array($options))
+		{
+			return $this->url->action($options[0], array_slice($options, 1));
+		}
+
+		return $this->url->action($options);
+	}
+
+	/**
+	 * Get the form appendage for the given method.
+	 *
+	 * @param  string  $method
+	 * @return string
+	 */
+	protected function getAppendage($method)
+	{
+		list($method, $appendage) = array(strtoupper($method), '');
+
+		// If the HTTP method is in this list of spoofed methods, we will attach the
+		// method spoofer hidden input to the form. This allows us to use regular
+		// form to initiate PUT and DELETE requests in addition to the typical.
+		if (in_array($method, $this->spoofedMethods))
+		{
+			$appendage .= $this->hidden('_method', $method);
+		}
+
+		// If the method is something other than GET we will go ahead and attach the
+		// CSRF token to the form, as this can't hurt and is convenient to simply
+		// always have available on every form the developers creates for them.
+		if ($method != 'GET')
+		{
+			$appendage .= $this->token();
+		}
+
+		return $appendage;
+	}
+
+	/**
+	 * Get the ID attribute for a field name.
+	 *
+	 * @param  string  $name
+	 * @param  array   $attributes
+	 * @return string
+	 */
+	public function getIdAttribute($name, $attributes)
+	{
+		if (array_key_exists('id', $attributes))
+		{
+			return $attributes['id'];
+		}
+
+		if (in_array($name, $this->labels))
+		{
+			return $name;
+		}
+	}
+
+	/**
+	 * Get the value that should be assigned to the field.
+	 *
+	 * @param  string  $name
+	 * @param  string  $value
+	 * @return string
+	 */
+	public function getValueAttribute($name, $value = null)
+	{
+		if (is_null($name)) return $value;
+
+		if ( ! is_null($this->old($name)))
+		{
+			return $this->old($name);
+		}
+
+		if ( ! is_null($value)) return $value;
+
+		if (isset($this->model))
+		{
+			return $this->getModelValueAttribute($name);
+		}
+	}
+
+	/**
+	 * Get the model value that should be assigned to the field.
+	 *
+	 * @param  string  $name
+	 * @return string
+	 */
+	protected function getModelValueAttribute($name)
+	{
+		if (is_object($this->model))
+		{
+			return object_get($this->model, $this->transformKey($name));
+		}
+		elseif (is_array($this->model))
+		{
+			return array_get($this->model, $this->transformKey($name));
+		}
+	}
+
+	/**
+	 * Get a value from the session's old input.
+	 *
+	 * @param  string  $name
+	 * @return string
+	 */
+	public function old($name)
+	{
+		if (isset($this->session))
+		{
+			return $this->session->getOldInput($this->transformKey($name));
+		}
+	}
+
+	/**
+	 * Determine if the old input is empty.
+	 *
+	 * @return bool
+	 */
+	public function oldInputIsEmpty()
+	{
+		return (isset($this->session) && count($this->session->getOldInput()) == 0);
+	}
+
+	/**
+	 * Transform key from array to dot syntax.
+	 *
+	 * @param  string  $key
+	 * @return string
+	 */
+	protected function transformKey($key)
+	{
+		return str_replace(array('.', '[]', '[', ']'), array('_', '', '.', ''), $key);
+	}
+
+	/**
+	 * Get the session store implementation.
+	 *
+	 * @return  \Illuminate\Session\Store  $session
+	 */
+	public function getSessionStore()
+	{
+		return $this->session;
+	}
+
+	/**
+	 * Set the session store implementation.
+	 *
+	 * @param  \Illuminate\Session\Store  $session
+	 * @return $this
+	 */
+	public function setSessionStore(Session $session)
+	{
+		$this->session = $session;
+
+		return $this;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Html/HtmlBuilder.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Html/HtmlBuilder.php b/vendor/laravel/framework/src/Illuminate/Html/HtmlBuilder.php
new file mode 100755
index 0000000..fdab724
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Html/HtmlBuilder.php
@@ -0,0 +1,375 @@
+<?php namespace Illuminate\Html;
+
+use Illuminate\Routing\UrlGenerator;
+use Illuminate\Support\Traits\MacroableTrait;
+
+class HtmlBuilder {
+
+	use MacroableTrait;
+
+	/**
+	 * The URL generator instance.
+	 *
+	 * @var \Illuminate\Routing\UrlGenerator
+	 */
+	protected $url;
+
+	/**
+	 * Create a new HTML builder instance.
+	 *
+	 * @param  \Illuminate\Routing\UrlGenerator  $url
+	 * @return void
+	 */
+	public function __construct(UrlGenerator $url = null)
+	{
+		$this->url = $url;
+	}
+
+	/**
+	 * Convert an HTML string to entities.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	public function entities($value)
+	{
+		return htmlentities($value, ENT_QUOTES, 'UTF-8', false);
+	}
+
+	/**
+	 * Convert entities to HTML characters.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	public function decode($value)
+	{
+		return html_entity_decode($value, ENT_QUOTES, 'UTF-8');
+	}
+
+	/**
+	 * Generate a link to a JavaScript file.
+	 *
+	 * @param  string  $url
+	 * @param  array   $attributes
+	 * @param  bool    $secure
+	 * @return string
+	 */
+	public function script($url, $attributes = array(), $secure = null)
+	{
+		$attributes['src'] = $this->url->asset($url, $secure);
+
+		return '<script'.$this->attributes($attributes).'></script>'.PHP_EOL;
+	}
+
+	/**
+	 * Generate a link to a CSS file.
+	 *
+	 * @param  string  $url
+	 * @param  array   $attributes
+	 * @param  bool    $secure
+	 * @return string
+	 */
+	public function style($url, $attributes = array(), $secure = null)
+	{
+		$defaults = array('media' => 'all', 'type' => 'text/css', 'rel' => 'stylesheet');
+
+		$attributes = $attributes + $defaults;
+
+		$attributes['href'] = $this->url->asset($url, $secure);
+
+		return '<link'.$this->attributes($attributes).'>'.PHP_EOL;
+	}
+
+	/**
+	 * Generate an HTML image element.
+	 *
+	 * @param  string  $url
+	 * @param  string  $alt
+	 * @param  array   $attributes
+	 * @param  bool    $secure
+	 * @return string
+	 */
+	public function image($url, $alt = null, $attributes = array(), $secure = null)
+	{
+		$attributes['alt'] = $alt;
+
+		return '<img src="'.$this->url->asset($url, $secure).'"'.$this->attributes($attributes).'>';
+	}
+
+	/**
+	 * Generate a HTML link.
+	 *
+	 * @param  string  $url
+	 * @param  string  $title
+	 * @param  array   $attributes
+	 * @param  bool    $secure
+	 * @return string
+	 */
+	public function link($url, $title = null, $attributes = array(), $secure = null)
+	{
+		$url = $this->url->to($url, array(), $secure);
+
+		if (is_null($title) || $title === false) $title = $url;
+
+		return '<a href="'.$url.'"'.$this->attributes($attributes).'>'.$this->entities($title).'</a>';
+	}
+
+	/**
+	 * Generate a HTTPS HTML link.
+	 *
+	 * @param  string  $url
+	 * @param  string  $title
+	 * @param  array   $attributes
+	 * @return string
+	 */
+	public function secureLink($url, $title = null, $attributes = array())
+	{
+		return $this->link($url, $title, $attributes, true);
+	}
+
+	/**
+	 * Generate a HTML link to an asset.
+	 *
+	 * @param  string  $url
+	 * @param  string  $title
+	 * @param  array   $attributes
+	 * @param  bool    $secure
+	 * @return string
+	 */
+	public function linkAsset($url, $title = null, $attributes = array(), $secure = null)
+	{
+		$url = $this->url->asset($url, $secure);
+
+		return $this->link($url, $title ?: $url, $attributes, $secure);
+	}
+
+	/**
+	 * Generate a HTTPS HTML link to an asset.
+	 *
+	 * @param  string  $url
+	 * @param  string  $title
+	 * @param  array   $attributes
+	 * @return string
+	 */
+	public function linkSecureAsset($url, $title = null, $attributes = array())
+	{
+		return $this->linkAsset($url, $title, $attributes, true);
+	}
+
+	/**
+	 * Generate a HTML link to a named route.
+	 *
+	 * @param  string  $name
+	 * @param  string  $title
+	 * @param  array   $parameters
+	 * @param  array   $attributes
+	 * @return string
+	 */
+	public function linkRoute($name, $title = null, $parameters = array(), $attributes = array())
+	{
+		return $this->link($this->url->route($name, $parameters), $title, $attributes);
+	}
+
+	/**
+	 * Generate a HTML link to a controller action.
+	 *
+	 * @param  string  $action
+	 * @param  string  $title
+	 * @param  array   $parameters
+	 * @param  array   $attributes
+	 * @return string
+	 */
+	public function linkAction($action, $title = null, $parameters = array(), $attributes = array())
+	{
+		return $this->link($this->url->action($action, $parameters), $title, $attributes);
+	}
+
+	/**
+	 * Generate a HTML link to an email address.
+	 *
+	 * @param  string  $email
+	 * @param  string  $title
+	 * @param  array   $attributes
+	 * @return string
+	 */
+	public function mailto($email, $title = null, $attributes = array())
+	{
+		$email = $this->email($email);
+
+		$title = $title ?: $email;
+
+		$email = $this->obfuscate('mailto:') . $email;
+
+		return '<a href="'.$email.'"'.$this->attributes($attributes).'>'.$this->entities($title).'</a>';
+	}
+
+	/**
+	 * Obfuscate an e-mail address to prevent spam-bots from sniffing it.
+	 *
+	 * @param  string  $email
+	 * @return string
+	 */
+	public function email($email)
+	{
+		return str_replace('@', '&#64;', $this->obfuscate($email));
+	}
+
+	/**
+	 * Generate an ordered list of items.
+	 *
+	 * @param  array   $list
+	 * @param  array   $attributes
+	 * @return string
+	 */
+	public function ol($list, $attributes = array())
+	{
+		return $this->listing('ol', $list, $attributes);
+	}
+
+	/**
+	 * Generate an un-ordered list of items.
+	 *
+	 * @param  array   $list
+	 * @param  array   $attributes
+	 * @return string
+	 */
+	public function ul($list, $attributes = array())
+	{
+		return $this->listing('ul', $list, $attributes);
+	}
+
+	/**
+	 * Create a listing HTML element.
+	 *
+	 * @param  string  $type
+	 * @param  array   $list
+	 * @param  array   $attributes
+	 * @return string
+	 */
+	protected function listing($type, $list, $attributes = array())
+	{
+		$html = '';
+
+		if (count($list) == 0) return $html;
+
+		// Essentially we will just spin through the list and build the list of the HTML
+		// elements from the array. We will also handled nested lists in case that is
+		// present in the array. Then we will build out the final listing elements.
+		foreach ($list as $key => $value)
+		{
+			$html .= $this->listingElement($key, $type, $value);
+		}
+
+		$attributes = $this->attributes($attributes);
+
+		return "<{$type}{$attributes}>{$html}</{$type}>";
+	}
+
+	/**
+	 * Create the HTML for a listing element.
+	 *
+	 * @param  mixed    $key
+	 * @param  string  $type
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected function listingElement($key, $type, $value)
+	{
+		if (is_array($value))
+		{
+			return $this->nestedListing($key, $type, $value);
+		}
+
+		return '<li>'.e($value).'</li>';
+	}
+
+	/**
+	 * Create the HTML for a nested listing attribute.
+	 *
+	 * @param  mixed    $key
+	 * @param  string  $type
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected function nestedListing($key, $type, $value)
+	{
+		if (is_int($key))
+		{
+			return $this->listing($type, $value);
+		}
+
+		return '<li>'.$key.$this->listing($type, $value).'</li>';
+	}
+
+	/**
+	 * Build an HTML attribute string from an array.
+	 *
+	 * @param  array  $attributes
+	 * @return string
+	 */
+	public function attributes($attributes)
+	{
+		$html = array();
+
+		// For numeric keys we will assume that the key and the value are the same
+		// as this will convert HTML attributes such as "required" to a correct
+		// form like required="required" instead of using incorrect numerics.
+		foreach ((array) $attributes as $key => $value)
+		{
+			$element = $this->attributeElement($key, $value);
+
+			if ( ! is_null($element)) $html[] = $element;
+		}
+
+		return count($html) > 0 ? ' '.implode(' ', $html) : '';
+	}
+
+	/**
+	 * Build a single attribute element.
+	 *
+	 * @param  string  $key
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected function attributeElement($key, $value)
+	{
+		if (is_numeric($key)) $key = $value;
+
+		if ( ! is_null($value)) return $key.'="'.e($value).'"';
+	}
+
+	/**
+	 * Obfuscate a string to prevent spam-bots from sniffing it.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	public function obfuscate($value)
+	{
+		$safe = '';
+
+		foreach (str_split($value) as $letter)
+		{
+			if (ord($letter) > 128) return $letter;
+
+			// To properly obfuscate the value, we will randomly convert each letter to
+			// its entity or hexadecimal representation, keeping a bot from sniffing
+			// the randomly obfuscated letters out of the string on the responses.
+			switch (rand(1, 3))
+			{
+				case 1:
+					$safe .= '&#'.ord($letter).';'; break;
+
+				case 2:
+					$safe .= '&#x'.dechex(ord($letter)).';'; break;
+
+				case 3:
+					$safe .= $letter;
+			}
+		}
+
+		return $safe;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Html/HtmlServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Html/HtmlServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Html/HtmlServiceProvider.php
new file mode 100755
index 0000000..702051e
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Html/HtmlServiceProvider.php
@@ -0,0 +1,64 @@
+<?php namespace Illuminate\Html;
+
+use Illuminate\Support\ServiceProvider;
+
+class HtmlServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->registerHtmlBuilder();
+
+		$this->registerFormBuilder();
+	}
+
+	/**
+	 * Register the HTML builder instance.
+	 *
+	 * @return void
+	 */
+	protected function registerHtmlBuilder()
+	{
+		$this->app->bindShared('html', function($app)
+		{
+			return new HtmlBuilder($app['url']);
+		});
+	}
+
+	/**
+	 * Register the form builder instance.
+	 *
+	 * @return void
+	 */
+	protected function registerFormBuilder()
+	{
+		$this->app->bindShared('form', function($app)
+		{
+			$form = new FormBuilder($app['html'], $app['url'], $app['session.store']->getToken());
+
+			return $form->setSessionStore($app['session.store']);
+		});
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('html', 'form');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Html/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Html/composer.json b/vendor/laravel/framework/src/Illuminate/Html/composer.json
new file mode 100755
index 0000000..a498acf
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Html/composer.json
@@ -0,0 +1,28 @@
+{
+    "name": "illuminate/html",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/http": "4.2.*",
+        "illuminate/session": "4.2.*",
+        "illuminate/support": "4.2.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Html": ""
+        }
+    },
+    "target-dir": "Illuminate/Html",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Http/FrameGuard.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Http/FrameGuard.php b/vendor/laravel/framework/src/Illuminate/Http/FrameGuard.php
new file mode 100644
index 0000000..9237605
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Http/FrameGuard.php
@@ -0,0 +1,45 @@
+<?php namespace Illuminate\Http;
+
+use Symfony\Component\HttpKernel\HttpKernelInterface;
+use Symfony\Component\HttpFoundation\Request as SymfonyRequest;
+
+class FrameGuard implements HttpKernelInterface {
+
+	/**
+	 * The wrapped kernel implementation.
+	 *
+	 * @var \Symfony\Component\HttpKernel\HttpKernelInterface
+	 */
+	protected $app;
+
+	/**
+	 * Create a new FrameGuard instance.
+	 *
+	 * @param  \Symfony\Component\HttpKernel\HttpKernelInterface  $app
+	 * @return void
+	 */
+	public function __construct(HttpKernelInterface $app)
+	{
+		$this->app = $app;
+	}
+
+	/**
+	 * Handle the given request and get the response.
+	 *
+	 * @implements HttpKernelInterface::handle
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @param  int   $type
+	 * @param  bool  $catch
+	 * @return \Symfony\Component\HttpFoundation\Response
+	 */
+	public function handle(SymfonyRequest $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
+	{
+		$response = $this->app->handle($request, $type, $catch);
+
+		$response->headers->set('X-Frame-Options', 'SAMEORIGIN', false);
+
+		return $response;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Http/JsonResponse.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Http/JsonResponse.php b/vendor/laravel/framework/src/Illuminate/Http/JsonResponse.php
new file mode 100755
index 0000000..5d1b69b
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Http/JsonResponse.php
@@ -0,0 +1,78 @@
+<?php namespace Illuminate\Http;
+
+use Illuminate\Support\Contracts\JsonableInterface;
+
+class JsonResponse extends \Symfony\Component\HttpFoundation\JsonResponse {
+
+	use ResponseTrait;
+
+	/**
+	 * The json encoding options.
+	 *
+	 * @var int
+	 */
+	protected $jsonOptions;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param  mixed  $data
+	 * @param  int    $status
+	 * @param  array  $headers
+	 * @param  int    $options
+	*/
+	public function __construct($data = null, $status = 200, $headers = array(), $options = 0)
+	{
+		$this->jsonOptions = $options;
+
+		parent::__construct($data, $status, $headers);
+	}
+
+	/**
+	 * Get the json_decoded data from the response
+	 *
+	 * @param  bool  $assoc
+	 * @param  int   $depth
+	 * @return mixed
+	 */
+	public function getData($assoc = false, $depth = 512)
+	{
+		return json_decode($this->data, $assoc, $depth);
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function setData($data = array())
+	{
+		$this->data = $data instanceof JsonableInterface
+								   ? $data->toJson($this->jsonOptions)
+								   : json_encode($data, $this->jsonOptions);
+
+		return $this->update();
+	}
+
+	/**
+	 * Get the JSON encoding options.
+	 *
+	 * @return int
+	 */
+	public function getJsonOptions()
+	{
+		return $this->jsonOptions;
+	}
+
+	/**
+	 * Set the JSON encoding options.
+	 *
+	 * @param  int  $options
+	 * @return mixed
+	 */
+	public function setJsonOptions($options)
+	{
+		$this->jsonOptions = $options;
+
+		return $this->setData($this->getData());
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Http/RedirectResponse.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Http/RedirectResponse.php b/vendor/laravel/framework/src/Illuminate/Http/RedirectResponse.php
new file mode 100755
index 0000000..56debbf
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Http/RedirectResponse.php
@@ -0,0 +1,224 @@
+<?php namespace Illuminate\Http;
+
+use Illuminate\Support\MessageBag;
+use Illuminate\Support\ViewErrorBag;
+use Symfony\Component\HttpFoundation\Cookie;
+use Illuminate\Session\Store as SessionStore;
+use Symfony\Component\HttpFoundation\File\UploadedFile;
+use Illuminate\Support\Contracts\MessageProviderInterface;
+
+class RedirectResponse extends \Symfony\Component\HttpFoundation\RedirectResponse {
+
+	/**
+	 * The request instance.
+	 *
+	 * @var \Illuminate\Http\Request
+	 */
+	protected $request;
+
+	/**
+	 * The session store implementation.
+	 *
+	 * @var \Illuminate\Session\Store
+	 */
+	protected $session;
+
+	/**
+	 * Set a header on the Response.
+	 *
+	 * @param  string  $key
+	 * @param  string  $value
+	 * @param  bool  $replace
+	 * @return $this
+	 */
+	public function header($key, $value, $replace = true)
+	{
+		$this->headers->set($key, $value, $replace);
+
+		return $this;
+	}
+
+	/**
+	 * Flash a piece of data to the session.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return \Illuminate\Http\RedirectResponse
+	 */
+	public function with($key, $value = null)
+	{
+		$key = is_array($key) ? $key : [$key => $value];
+
+		foreach ($key as $k => $v)
+		{
+			$this->session->flash($k, $v);
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Add a cookie to the response.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Cookie  $cookie
+	 * @return $this
+	 */
+	public function withCookie(Cookie $cookie)
+	{
+		$this->headers->setCookie($cookie);
+
+		return $this;
+	}
+
+	/**
+	 * Add multiple cookies to the response.
+	 *
+	 * @param  array  $cookie
+	 * @return $this
+	 */
+	public function withCookies(array $cookies)
+	{
+		foreach ($cookies as $cookie)
+		{
+			$this->headers->setCookie($cookie);
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Flash an array of input to the session.
+	 *
+	 * @param  array  $input
+	 * @return $this
+	 */
+	public function withInput(array $input = null)
+	{
+		$input = $input ?: $this->request->input();
+
+		$this->session->flashInput(array_filter($input, function ($value)
+		{
+			return ! $value instanceof UploadedFile;
+		}));
+
+		return $this;
+	}
+
+	/**
+	 * Flash an array of input to the session.
+	 *
+	 * @param  mixed  string
+	 * @return $this
+	 */
+	public function onlyInput()
+	{
+		return $this->withInput($this->request->only(func_get_args()));
+	}
+
+	/**
+	 * Flash an array of input to the session.
+	 *
+	 * @param  mixed  string
+	 * @return \Illuminate\Http\RedirectResponse
+	 */
+	public function exceptInput()
+	{
+		return $this->withInput($this->request->except(func_get_args()));
+	}
+
+	/**
+	 * Flash a container of errors to the session.
+	 *
+	 * @param  \Illuminate\Support\Contracts\MessageProviderInterface|array  $provider
+	 * @param  string  $key
+	 * @return $this
+	 */
+	public function withErrors($provider, $key = 'default')
+	{
+		$value = $this->parseErrors($provider);
+
+		$this->session->flash(
+			'errors', $this->session->get('errors', new ViewErrorBag)->put($key, $value)
+		);
+
+		return $this;
+	}
+
+	/**
+	 * Parse the given errors into an appropriate value.
+	 *
+	 * @param  \Illuminate\Support\Contracts\MessageProviderInterface|array  $provider
+	 * @return \Illuminate\Support\MessageBag
+	 */
+	protected function parseErrors($provider)
+	{
+		if ($provider instanceof MessageProviderInterface)
+		{
+			return $provider->getMessageBag();
+		}
+
+		return new MessageBag((array) $provider);
+	}
+
+	/**
+	 * Get the request instance.
+	 *
+	 * @return  \Illuminate\Http\Request
+	 */
+	public function getRequest()
+	{
+		return $this->request;
+	}
+
+	/**
+	 * Set the request instance.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return void
+	 */
+	public function setRequest(Request $request)
+	{
+		$this->request = $request;
+	}
+
+	/**
+	 * Get the session store implementation.
+	 *
+	 * @return \Illuminate\Session\Store
+	 */
+	public function getSession()
+	{
+		return $this->session;
+	}
+
+	/**
+	 * Set the session store implementation.
+	 *
+	 * @param  \Illuminate\Session\Store  $session
+	 * @return void
+	 */
+	public function setSession(SessionStore $session)
+	{
+		$this->session = $session;
+	}
+
+	/**
+	 * Dynamically bind flash data in the session.
+	 *
+	 * @param  string  $method
+	 * @param  array  $parameters
+	 * @return void
+	 *
+	 * @throws \BadMethodCallException
+	 */
+	public function __call($method, $parameters)
+	{
+		if (starts_with($method, 'with'))
+		{
+			return $this->with(snake_case(substr($method, 4)), $parameters[0]);
+		}
+
+		throw new \BadMethodCallException("Method [$method] does not exist on Redirect.");
+	}
+
+}


[45/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/Airavata/Model/AppCatalog/AppInterface/Types.php
----------------------------------------------------------------------
diff --git a/app/libraries/Airavata/Model/AppCatalog/AppInterface/Types.php b/app/libraries/Airavata/Model/AppCatalog/AppInterface/Types.php
new file mode 100644
index 0000000..e6748f4
--- /dev/null
+++ b/app/libraries/Airavata/Model/AppCatalog/AppInterface/Types.php
@@ -0,0 +1,797 @@
+<?php
+namespace Airavata\Model\AppCatalog\AppInterface;
+
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+use Thrift\Base\TBase;
+use Thrift\Type\TType;
+use Thrift\Type\TMessageType;
+use Thrift\Exception\TException;
+use Thrift\Exception\TProtocolException;
+use Thrift\Protocol\TProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
+use Thrift\Exception\TApplicationException;
+
+
+final class DataType {
+  const STRING = 0;
+  const INTEGER = 1;
+  const FLOAT = 2;
+  const URI = 3;
+  const STDOUT = 4;
+  const STDERR = 5;
+  static public $__names = array(
+    0 => 'STRING',
+    1 => 'INTEGER',
+    2 => 'FLOAT',
+    3 => 'URI',
+    4 => 'STDOUT',
+    5 => 'STDERR',
+  );
+}
+
+class InputDataObjectType {
+  static $_TSPEC;
+
+  public $name = null;
+  public $value = null;
+  public $type = null;
+  public $applicationArgument = null;
+  public $standardInput = false;
+  public $userFriendlyDescription = null;
+  public $metaData = null;
+  public $inputOrder = null;
+  public $isRequired = null;
+  public $requiredToAddedToCommandLine = null;
+  public $dataStaged = false;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'name',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'value',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'type',
+          'type' => TType::I32,
+          ),
+        4 => array(
+          'var' => 'applicationArgument',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'standardInput',
+          'type' => TType::BOOL,
+          ),
+        6 => array(
+          'var' => 'userFriendlyDescription',
+          'type' => TType::STRING,
+          ),
+        7 => array(
+          'var' => 'metaData',
+          'type' => TType::STRING,
+          ),
+        8 => array(
+          'var' => 'inputOrder',
+          'type' => TType::I32,
+          ),
+        9 => array(
+          'var' => 'isRequired',
+          'type' => TType::BOOL,
+          ),
+        10 => array(
+          'var' => 'requiredToAddedToCommandLine',
+          'type' => TType::BOOL,
+          ),
+        11 => array(
+          'var' => 'dataStaged',
+          'type' => TType::BOOL,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['name'])) {
+        $this->name = $vals['name'];
+      }
+      if (isset($vals['value'])) {
+        $this->value = $vals['value'];
+      }
+      if (isset($vals['type'])) {
+        $this->type = $vals['type'];
+      }
+      if (isset($vals['applicationArgument'])) {
+        $this->applicationArgument = $vals['applicationArgument'];
+      }
+      if (isset($vals['standardInput'])) {
+        $this->standardInput = $vals['standardInput'];
+      }
+      if (isset($vals['userFriendlyDescription'])) {
+        $this->userFriendlyDescription = $vals['userFriendlyDescription'];
+      }
+      if (isset($vals['metaData'])) {
+        $this->metaData = $vals['metaData'];
+      }
+      if (isset($vals['inputOrder'])) {
+        $this->inputOrder = $vals['inputOrder'];
+      }
+      if (isset($vals['isRequired'])) {
+        $this->isRequired = $vals['isRequired'];
+      }
+      if (isset($vals['requiredToAddedToCommandLine'])) {
+        $this->requiredToAddedToCommandLine = $vals['requiredToAddedToCommandLine'];
+      }
+      if (isset($vals['dataStaged'])) {
+        $this->dataStaged = $vals['dataStaged'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'InputDataObjectType';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->name);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->value);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->type);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->applicationArgument);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->standardInput);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->userFriendlyDescription);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->metaData);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 8:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->inputOrder);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 9:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->isRequired);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 10:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->requiredToAddedToCommandLine);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 11:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->dataStaged);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('InputDataObjectType');
+    if ($this->name !== null) {
+      $xfer += $output->writeFieldBegin('name', TType::STRING, 1);
+      $xfer += $output->writeString($this->name);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->value !== null) {
+      $xfer += $output->writeFieldBegin('value', TType::STRING, 2);
+      $xfer += $output->writeString($this->value);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->type !== null) {
+      $xfer += $output->writeFieldBegin('type', TType::I32, 3);
+      $xfer += $output->writeI32($this->type);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationArgument !== null) {
+      $xfer += $output->writeFieldBegin('applicationArgument', TType::STRING, 4);
+      $xfer += $output->writeString($this->applicationArgument);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->standardInput !== null) {
+      $xfer += $output->writeFieldBegin('standardInput', TType::BOOL, 5);
+      $xfer += $output->writeBool($this->standardInput);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->userFriendlyDescription !== null) {
+      $xfer += $output->writeFieldBegin('userFriendlyDescription', TType::STRING, 6);
+      $xfer += $output->writeString($this->userFriendlyDescription);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->metaData !== null) {
+      $xfer += $output->writeFieldBegin('metaData', TType::STRING, 7);
+      $xfer += $output->writeString($this->metaData);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->inputOrder !== null) {
+      $xfer += $output->writeFieldBegin('inputOrder', TType::I32, 8);
+      $xfer += $output->writeI32($this->inputOrder);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->isRequired !== null) {
+      $xfer += $output->writeFieldBegin('isRequired', TType::BOOL, 9);
+      $xfer += $output->writeBool($this->isRequired);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->requiredToAddedToCommandLine !== null) {
+      $xfer += $output->writeFieldBegin('requiredToAddedToCommandLine', TType::BOOL, 10);
+      $xfer += $output->writeBool($this->requiredToAddedToCommandLine);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->dataStaged !== null) {
+      $xfer += $output->writeFieldBegin('dataStaged', TType::BOOL, 11);
+      $xfer += $output->writeBool($this->dataStaged);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class OutputDataObjectType {
+  static $_TSPEC;
+
+  public $name = null;
+  public $value = null;
+  public $type = null;
+  public $applicationArgument = null;
+  public $isRequired = null;
+  public $requiredToAddedToCommandLine = null;
+  public $dataMovement = null;
+  public $location = null;
+  public $searchQuery = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'name',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'value',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'type',
+          'type' => TType::I32,
+          ),
+        4 => array(
+          'var' => 'applicationArgument',
+          'type' => TType::STRING,
+          ),
+        5 => array(
+          'var' => 'isRequired',
+          'type' => TType::BOOL,
+          ),
+        6 => array(
+          'var' => 'requiredToAddedToCommandLine',
+          'type' => TType::BOOL,
+          ),
+        7 => array(
+          'var' => 'dataMovement',
+          'type' => TType::BOOL,
+          ),
+        8 => array(
+          'var' => 'location',
+          'type' => TType::STRING,
+          ),
+        9 => array(
+          'var' => 'searchQuery',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['name'])) {
+        $this->name = $vals['name'];
+      }
+      if (isset($vals['value'])) {
+        $this->value = $vals['value'];
+      }
+      if (isset($vals['type'])) {
+        $this->type = $vals['type'];
+      }
+      if (isset($vals['applicationArgument'])) {
+        $this->applicationArgument = $vals['applicationArgument'];
+      }
+      if (isset($vals['isRequired'])) {
+        $this->isRequired = $vals['isRequired'];
+      }
+      if (isset($vals['requiredToAddedToCommandLine'])) {
+        $this->requiredToAddedToCommandLine = $vals['requiredToAddedToCommandLine'];
+      }
+      if (isset($vals['dataMovement'])) {
+        $this->dataMovement = $vals['dataMovement'];
+      }
+      if (isset($vals['location'])) {
+        $this->location = $vals['location'];
+      }
+      if (isset($vals['searchQuery'])) {
+        $this->searchQuery = $vals['searchQuery'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'OutputDataObjectType';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->name);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->value);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->type);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->applicationArgument);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->isRequired);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->requiredToAddedToCommandLine);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 7:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->dataMovement);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 8:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->location);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 9:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->searchQuery);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('OutputDataObjectType');
+    if ($this->name !== null) {
+      $xfer += $output->writeFieldBegin('name', TType::STRING, 1);
+      $xfer += $output->writeString($this->name);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->value !== null) {
+      $xfer += $output->writeFieldBegin('value', TType::STRING, 2);
+      $xfer += $output->writeString($this->value);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->type !== null) {
+      $xfer += $output->writeFieldBegin('type', TType::I32, 3);
+      $xfer += $output->writeI32($this->type);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationArgument !== null) {
+      $xfer += $output->writeFieldBegin('applicationArgument', TType::STRING, 4);
+      $xfer += $output->writeString($this->applicationArgument);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->isRequired !== null) {
+      $xfer += $output->writeFieldBegin('isRequired', TType::BOOL, 5);
+      $xfer += $output->writeBool($this->isRequired);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->requiredToAddedToCommandLine !== null) {
+      $xfer += $output->writeFieldBegin('requiredToAddedToCommandLine', TType::BOOL, 6);
+      $xfer += $output->writeBool($this->requiredToAddedToCommandLine);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->dataMovement !== null) {
+      $xfer += $output->writeFieldBegin('dataMovement', TType::BOOL, 7);
+      $xfer += $output->writeBool($this->dataMovement);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->location !== null) {
+      $xfer += $output->writeFieldBegin('location', TType::STRING, 8);
+      $xfer += $output->writeString($this->location);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->searchQuery !== null) {
+      $xfer += $output->writeFieldBegin('searchQuery', TType::STRING, 9);
+      $xfer += $output->writeString($this->searchQuery);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ApplicationInterfaceDescription {
+  static $_TSPEC;
+
+  public $applicationInterfaceId = "DO_NOT_SET_AT_CLIENTS";
+  public $applicationName = null;
+  public $applicationDescription = null;
+  public $applicationModules = null;
+  public $applicationInputs = null;
+  public $applicationOutputs = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'applicationInterfaceId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'applicationName',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'applicationDescription',
+          'type' => TType::STRING,
+          ),
+        4 => array(
+          'var' => 'applicationModules',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        5 => array(
+          'var' => 'applicationInputs',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\AppInterface\InputDataObjectType',
+            ),
+          ),
+        6 => array(
+          'var' => 'applicationOutputs',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType',
+            ),
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['applicationInterfaceId'])) {
+        $this->applicationInterfaceId = $vals['applicationInterfaceId'];
+      }
+      if (isset($vals['applicationName'])) {
+        $this->applicationName = $vals['applicationName'];
+      }
+      if (isset($vals['applicationDescription'])) {
+        $this->applicationDescription = $vals['applicationDescription'];
+      }
+      if (isset($vals['applicationModules'])) {
+        $this->applicationModules = $vals['applicationModules'];
+      }
+      if (isset($vals['applicationInputs'])) {
+        $this->applicationInputs = $vals['applicationInputs'];
+      }
+      if (isset($vals['applicationOutputs'])) {
+        $this->applicationOutputs = $vals['applicationOutputs'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ApplicationInterfaceDescription';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->applicationInterfaceId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->applicationName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->applicationDescription);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::LST) {
+            $this->applicationModules = array();
+            $_size0 = 0;
+            $_etype3 = 0;
+            $xfer += $input->readListBegin($_etype3, $_size0);
+            for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
+            {
+              $elem5 = null;
+              $xfer += $input->readString($elem5);
+              $this->applicationModules []= $elem5;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::LST) {
+            $this->applicationInputs = array();
+            $_size6 = 0;
+            $_etype9 = 0;
+            $xfer += $input->readListBegin($_etype9, $_size6);
+            for ($_i10 = 0; $_i10 < $_size6; ++$_i10)
+            {
+              $elem11 = null;
+              $elem11 = new \Airavata\Model\AppCatalog\AppInterface\InputDataObjectType();
+              $xfer += $elem11->read($input);
+              $this->applicationInputs []= $elem11;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 6:
+          if ($ftype == TType::LST) {
+            $this->applicationOutputs = array();
+            $_size12 = 0;
+            $_etype15 = 0;
+            $xfer += $input->readListBegin($_etype15, $_size12);
+            for ($_i16 = 0; $_i16 < $_size12; ++$_i16)
+            {
+              $elem17 = null;
+              $elem17 = new \Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType();
+              $xfer += $elem17->read($input);
+              $this->applicationOutputs []= $elem17;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ApplicationInterfaceDescription');
+    if ($this->applicationInterfaceId !== null) {
+      $xfer += $output->writeFieldBegin('applicationInterfaceId', TType::STRING, 1);
+      $xfer += $output->writeString($this->applicationInterfaceId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationName !== null) {
+      $xfer += $output->writeFieldBegin('applicationName', TType::STRING, 2);
+      $xfer += $output->writeString($this->applicationName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationDescription !== null) {
+      $xfer += $output->writeFieldBegin('applicationDescription', TType::STRING, 3);
+      $xfer += $output->writeString($this->applicationDescription);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationModules !== null) {
+      if (!is_array($this->applicationModules)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('applicationModules', TType::LST, 4);
+      {
+        $output->writeListBegin(TType::STRING, count($this->applicationModules));
+        {
+          foreach ($this->applicationModules as $iter18)
+          {
+            $xfer += $output->writeString($iter18);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationInputs !== null) {
+      if (!is_array($this->applicationInputs)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('applicationInputs', TType::LST, 5);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->applicationInputs));
+        {
+          foreach ($this->applicationInputs as $iter19)
+          {
+            $xfer += $iter19->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->applicationOutputs !== null) {
+      if (!is_array($this->applicationOutputs)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('applicationOutputs', TType::LST, 6);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->applicationOutputs));
+        {
+          foreach ($this->applicationOutputs as $iter20)
+          {
+            $xfer += $iter20->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+$GLOBALS['applicationInterfaceModel_CONSTANTS']['DEFAULT_ID'] = "DO_NOT_SET_AT_CLIENTS";
+
+


[34/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/bootstrap/paths.php
----------------------------------------------------------------------
diff --git a/bootstrap/paths.php b/bootstrap/paths.php
new file mode 100755
index 0000000..5a1f640
--- /dev/null
+++ b/bootstrap/paths.php
@@ -0,0 +1,57 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Application Path
+	|--------------------------------------------------------------------------
+	|
+	| Here we just defined the path to the application directory. Most likely
+	| you will never need to change this value as the default setup should
+	| work perfectly fine for the vast majority of all our applications.
+	|
+	*/
+
+	'app' => __DIR__.'/../app',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Public Path
+	|--------------------------------------------------------------------------
+	|
+	| The public path contains the assets for your web application, such as
+	| your JavaScript and CSS files, and also contains the primary entry
+	| point for web requests into these applications from the outside.
+	|
+	*/
+
+	'public' => __DIR__.'/../public',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Base Path
+	|--------------------------------------------------------------------------
+	|
+	| The base path is the root of the Laravel installation. Most likely you
+	| will not need to change this value. But, if for some wild reason it
+	| is necessary you will do so here, just proceed with some caution.
+	|
+	*/
+
+	'base' => __DIR__.'/..',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Storage Path
+	|--------------------------------------------------------------------------
+	|
+	| The storage path is used by Laravel to store cached Blade views, logs
+	| and other pieces of information. You may modify the path here when
+	| you want to change the location of this directory for your apps.
+	|
+	*/
+
+	'storage' => __DIR__.'/../app/storage',
+
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/bootstrap/start.php
----------------------------------------------------------------------
diff --git a/bootstrap/start.php b/bootstrap/start.php
new file mode 100755
index 0000000..84559be
--- /dev/null
+++ b/bootstrap/start.php
@@ -0,0 +1,73 @@
+<?php
+
+/*
+|--------------------------------------------------------------------------
+| Create The Application
+|--------------------------------------------------------------------------
+|
+| The first thing we will do is create a new Laravel application instance
+| which serves as the "glue" for all the components of Laravel, and is
+| the IoC container for the system binding all of the various parts.
+|
+*/
+
+$app = new Illuminate\Foundation\Application;
+
+/*
+|--------------------------------------------------------------------------
+| Detect The Application Environment
+|--------------------------------------------------------------------------
+|
+| Laravel takes a dead simple approach to your application environments
+| so you can just specify a machine name for the host that matches a
+| given environment, then we will automatically detect it for you.
+|
+*/
+
+$env = $app->detectEnvironment(array(
+
+	'local' => array('homestead'),
+
+));
+
+/*
+|--------------------------------------------------------------------------
+| Bind Paths
+|--------------------------------------------------------------------------
+|
+| Here we are binding the paths configured in paths.php to the app. You
+| should not be changing these here. If you need to change these you
+| may do so within the paths.php file and they will be bound here.
+|
+*/
+
+$app->bindInstallPaths(require __DIR__.'/paths.php');
+
+/*
+|--------------------------------------------------------------------------
+| Load The Application
+|--------------------------------------------------------------------------
+|
+| Here we will load this Illuminate application. We will keep this in a
+| separate location so we can isolate the creation of an application
+| from the actual running of the application with a given request.
+|
+*/
+
+$framework = $app['path.base'].
+                 '/vendor/laravel/framework/src';
+
+require $framework.'/Illuminate/Foundation/start.php';
+
+/*
+|--------------------------------------------------------------------------
+| Return The Application
+|--------------------------------------------------------------------------
+|
+| This script returns the application instance. The instance is given to
+| the calling script so we can separate the building of the instances
+| from the actual running of the application and sending responses.
+|
+*/
+
+return $app;

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/composer.json
----------------------------------------------------------------------
diff --git a/composer.json b/composer.json
new file mode 100755
index 0000000..9758a4c
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,36 @@
+{
+	"name": "laravel/laravel",
+	"description": "The Laravel Framework.",
+	"keywords": ["framework", "laravel"],
+	"license": "MIT",
+	"require": {
+		"laravel/framework": "4.2.*",
+		"apache/thrift": "1.0.*@dev"
+	},
+	"autoload": {
+		"classmap": [
+			"app/controllers",
+			"app/models",
+			"app/database/seeds",
+			"app/tests/TestCase.php",
+			"app/libraries"
+		]
+	},
+	"scripts": {
+		"post-install-cmd": [
+			"php artisan clear-compiled",
+			"php artisan optimize"
+		],
+		"post-update-cmd": [
+			"php artisan clear-compiled",
+			"php artisan optimize"
+		],
+		"post-create-project-cmd": [
+			"php artisan key:generate"
+		]
+	},
+	"config": {
+		"preferred-install": "dist"
+	},
+	"minimum-stability": "stable"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/composer.lock
----------------------------------------------------------------------
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 0000000..ecfa53b
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,1701 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+        "This file is @generated automatically"
+    ],
+    "hash": "eb3ef5641d65b98713bc235b252b2153",
+    "packages": [
+        {
+            "name": "apache/thrift",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://git-wip-us.apache.org/repos/asf/thrift.git",
+                "reference": "dc799ca078627a8e400cfcdbb965acf6abf86eef"
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Thrift": "lib/php/lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Apache Thrift Developers",
+                    "email": "dev@thrift.apache.org",
+                    "homepage": "http://thrift.apache.org"
+                }
+            ],
+            "description": "Apache Thrift RPC system",
+            "homepage": "http://thrift.apache.org/",
+            "time": "2015-04-27 21:02:05"
+        },
+        {
+            "name": "classpreloader/classpreloader",
+            "version": "1.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/ClassPreloader/ClassPreloader.git",
+                "reference": "2c9f3bcbab329570c57339895bd11b5dd3b00877"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ClassPreloader/ClassPreloader/zipball/2c9f3bcbab329570c57339895bd11b5dd3b00877",
+                "reference": "2c9f3bcbab329570c57339895bd11b5dd3b00877",
+                "shasum": ""
+            },
+            "require": {
+                "nikic/php-parser": "~0.9",
+                "php": ">=5.3.3",
+                "symfony/console": "~2.1",
+                "symfony/filesystem": "~2.1",
+                "symfony/finder": "~2.1"
+            },
+            "bin": [
+                "classpreloader.php"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "ClassPreloader": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case",
+            "keywords": [
+                "autoload",
+                "class",
+                "preload"
+            ],
+            "time": "2014-03-12 00:05:31"
+        },
+        {
+            "name": "d11wtq/boris",
+            "version": "v1.0.10",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/borisrepl/boris.git",
+                "reference": "31055b15e2d3fe47f31f6aa8e277f8f3fc7eb483"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/borisrepl/boris/zipball/31055b15e2d3fe47f31f6aa8e277f8f3fc7eb483",
+                "reference": "31055b15e2d3fe47f31f6aa8e277f8f3fc7eb483",
+                "shasum": ""
+            },
+            "require": {
+                "ext-pcntl": "*",
+                "ext-posix": "*",
+                "ext-readline": "*",
+                "php": ">=5.3.0"
+            },
+            "bin": [
+                "bin/boris"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Boris": "lib"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A tiny, but robust REPL (Read-Evaluate-Print-Loop) for PHP.",
+            "time": "2015-03-01 08:05:19"
+        },
+        {
+            "name": "filp/whoops",
+            "version": "1.1.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/filp/whoops.git",
+                "reference": "c982fe62c44798c433229cb0425c61b487cc1883"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/filp/whoops/zipball/c982fe62c44798c433229cb0425c61b487cc1883",
+                "reference": "c982fe62c44798c433229cb0425c61b487cc1883",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "require-dev": {
+                "mockery/mockery": "0.9.*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Whoops": "src/"
+                },
+                "classmap": [
+                    "src/deprecated"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Filipe Dobreira",
+                    "homepage": "https://github.com/filp",
+                    "role": "Developer"
+                }
+            ],
+            "description": "php error handling for cool kids",
+            "homepage": "https://github.com/filp/whoops",
+            "keywords": [
+                "error",
+                "exception",
+                "handling",
+                "library",
+                "silex-provider",
+                "whoops",
+                "zf2"
+            ],
+            "time": "2015-03-30 15:26:59"
+        },
+        {
+            "name": "ircmaxell/password-compat",
+            "version": "v1.0.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/ircmaxell/password_compat.git",
+                "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/5c5cde8822a69545767f7c7f3058cb15ff84614c",
+                "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c",
+                "shasum": ""
+            },
+            "require-dev": {
+                "phpunit/phpunit": "4.*"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "lib/password.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Anthony Ferrara",
+                    "email": "ircmaxell@php.net",
+                    "homepage": "http://blog.ircmaxell.com"
+                }
+            ],
+            "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash",
+            "homepage": "https://github.com/ircmaxell/password_compat",
+            "keywords": [
+                "hashing",
+                "password"
+            ],
+            "time": "2014-11-20 16:49:30"
+        },
+        {
+            "name": "jeremeamia/SuperClosure",
+            "version": "1.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/jeremeamia/super_closure.git",
+                "reference": "4d89ca74994feab128ea46d5b3add92e6cb84554"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/jeremeamia/super_closure/zipball/4d89ca74994feab128ea46d5b3add92e6cb84554",
+                "reference": "4d89ca74994feab128ea46d5b3add92e6cb84554",
+                "shasum": ""
+            },
+            "require": {
+                "nikic/php-parser": "~0.9",
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~3.7"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Jeremeamia\\SuperClosure": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jeremy Lindblom"
+                }
+            ],
+            "description": "Doing interesting things with closures like serialization.",
+            "homepage": "https://github.com/jeremeamia/super_closure",
+            "keywords": [
+                "closure",
+                "function",
+                "parser",
+                "serializable",
+                "serialize",
+                "tokenizer"
+            ],
+            "time": "2015-01-10 01:09:28"
+        },
+        {
+            "name": "laravel/framework",
+            "version": "v4.2.17",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laravel/framework.git",
+                "reference": "3359de6d6cd322e8a1b251c2f8d9dd42a3e4e232"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/framework/zipball/3359de6d6cd322e8a1b251c2f8d9dd42a3e4e232",
+                "reference": "3359de6d6cd322e8a1b251c2f8d9dd42a3e4e232",
+                "shasum": ""
+            },
+            "require": {
+                "classpreloader/classpreloader": "~1.0.2",
+                "d11wtq/boris": "~1.0",
+                "filp/whoops": "1.1.*",
+                "ircmaxell/password-compat": "~1.0",
+                "jeremeamia/superclosure": "~1.0.1",
+                "monolog/monolog": "~1.6",
+                "nesbot/carbon": "~1.0",
+                "patchwork/utf8": "~1.1",
+                "php": ">=5.4.0",
+                "phpseclib/phpseclib": "0.3.*",
+                "predis/predis": "0.8.*",
+                "stack/builder": "~1.0",
+                "swiftmailer/swiftmailer": "~5.1",
+                "symfony/browser-kit": "2.5.*",
+                "symfony/console": "2.5.*",
+                "symfony/css-selector": "2.5.*",
+                "symfony/debug": "2.5.*",
+                "symfony/dom-crawler": "2.5.*",
+                "symfony/finder": "2.5.*",
+                "symfony/http-foundation": "2.5.*",
+                "symfony/http-kernel": "2.5.*",
+                "symfony/process": "2.5.*",
+                "symfony/routing": "2.5.*",
+                "symfony/security-core": "2.5.*",
+                "symfony/translation": "2.5.*"
+            },
+            "replace": {
+                "illuminate/auth": "self.version",
+                "illuminate/cache": "self.version",
+                "illuminate/config": "self.version",
+                "illuminate/console": "self.version",
+                "illuminate/container": "self.version",
+                "illuminate/cookie": "self.version",
+                "illuminate/database": "self.version",
+                "illuminate/encryption": "self.version",
+                "illuminate/events": "self.version",
+                "illuminate/exception": "self.version",
+                "illuminate/filesystem": "self.version",
+                "illuminate/foundation": "self.version",
+                "illuminate/hashing": "self.version",
+                "illuminate/html": "self.version",
+                "illuminate/http": "self.version",
+                "illuminate/log": "self.version",
+                "illuminate/mail": "self.version",
+                "illuminate/pagination": "self.version",
+                "illuminate/queue": "self.version",
+                "illuminate/redis": "self.version",
+                "illuminate/remote": "self.version",
+                "illuminate/routing": "self.version",
+                "illuminate/session": "self.version",
+                "illuminate/support": "self.version",
+                "illuminate/translation": "self.version",
+                "illuminate/validation": "self.version",
+                "illuminate/view": "self.version",
+                "illuminate/workbench": "self.version"
+            },
+            "require-dev": {
+                "aws/aws-sdk-php": "~2.6",
+                "iron-io/iron_mq": "~1.5",
+                "mockery/mockery": "~0.9",
+                "pda/pheanstalk": "~2.1",
+                "phpunit/phpunit": "~4.0"
+            },
+            "suggest": {
+                "doctrine/dbal": "Allow renaming columns and dropping SQLite columns."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.2-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/Illuminate/Queue/IlluminateQueueClosure.php"
+                ],
+                "files": [
+                    "src/Illuminate/Support/helpers.php"
+                ],
+                "psr-0": {
+                    "Illuminate": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylorotwell@gmail.com"
+                }
+            ],
+            "description": "The Laravel Framework.",
+            "keywords": [
+                "framework",
+                "laravel"
+            ],
+            "time": "2015-02-11 20:37:15"
+        },
+        {
+            "name": "monolog/monolog",
+            "version": "1.13.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Seldaek/monolog.git",
+                "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c31a2c4e8db5da8b46c74cf275d7f109c0f249ac",
+                "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0",
+                "psr/log": "~1.0"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0.0"
+            },
+            "require-dev": {
+                "aws/aws-sdk-php": "~2.4, >2.4.8",
+                "doctrine/couchdb": "~1.0@dev",
+                "graylog2/gelf-php": "~1.0",
+                "phpunit/phpunit": "~4.0",
+                "raven/raven": "~0.5",
+                "ruflin/elastica": "0.90.*",
+                "swiftmailer/swiftmailer": "~5.3",
+                "videlalvaro/php-amqplib": "~2.4"
+            },
+            "suggest": {
+                "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
+                "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
+                "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+                "ext-mongo": "Allow sending log messages to a MongoDB server",
+                "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
+                "raven/raven": "Allow sending log messages to a Sentry server",
+                "rollbar/rollbar": "Allow sending log messages to Rollbar",
+                "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
+                "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.13.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Monolog\\": "src/Monolog"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                }
+            ],
+            "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
+            "homepage": "http://github.com/Seldaek/monolog",
+            "keywords": [
+                "log",
+                "logging",
+                "psr-3"
+            ],
+            "time": "2015-03-09 09:58:04"
+        },
+        {
+            "name": "nesbot/carbon",
+            "version": "1.17.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/briannesbitt/Carbon.git",
+                "reference": "a1dd1ad9abfc8b3c4d8768068e6c71d293424e86"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/a1dd1ad9abfc8b3c4d8768068e6c71d293424e86",
+                "reference": "a1dd1ad9abfc8b3c4d8768068e6c71d293424e86",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Carbon": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Brian Nesbitt",
+                    "email": "brian@nesbot.com",
+                    "homepage": "http://nesbot.com"
+                }
+            ],
+            "description": "A simple API extension for DateTime.",
+            "homepage": "http://carbon.nesbot.com",
+            "keywords": [
+                "date",
+                "datetime",
+                "time"
+            ],
+            "time": "2015-03-08 14:05:44"
+        },
+        {
+            "name": "nikic/php-parser",
+            "version": "v0.9.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nikic/PHP-Parser.git",
+                "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ef70767475434bdb3615b43c327e2cae17ef12eb",
+                "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb",
+                "shasum": ""
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "php": ">=5.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "0.9-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "PHPParser": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Nikita Popov"
+                }
+            ],
+            "description": "A PHP parser written in PHP",
+            "keywords": [
+                "parser",
+                "php"
+            ],
+            "time": "2014-07-23 18:24:17"
+        },
+        {
+            "name": "patchwork/utf8",
+            "version": "v1.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/tchwork/utf8.git",
+                "reference": "7287a6fb2c46a66ac6bfbaf0e4975229b27efcba"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/tchwork/utf8/zipball/7287a6fb2c46a66ac6bfbaf0e4975229b27efcba",
+                "reference": "7287a6fb2c46a66ac6bfbaf0e4975229b27efcba",
+                "shasum": ""
+            },
+            "require": {
+                "lib-pcre": ">=7.3",
+                "php": ">=5.3.0"
+            },
+            "suggest": {
+                "ext-iconv": "Use iconv for best performance",
+                "ext-intl": "Use Intl for best performance",
+                "ext-mbstring": "Use Mbstring for best performance",
+                "ext-wfio": "Use WFIO for UTF-8 filesystem access on Windows"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Patchwork": "class/",
+                    "Normalizer": "class/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "(Apache-2.0 or GPL-2.0)"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                }
+            ],
+            "description": "Portable and performant UTF-8, Unicode and Grapheme Clusters for PHP",
+            "homepage": "https://github.com/tchwork/utf8",
+            "keywords": [
+                "grapheme",
+                "i18n",
+                "unicode",
+                "utf-8",
+                "utf8"
+            ],
+            "time": "2015-04-26 09:51:43"
+        },
+        {
+            "name": "phpseclib/phpseclib",
+            "version": "0.3.10",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpseclib/phpseclib.git",
+                "reference": "d15bba1edcc7c89e09cc74c5d961317a8b947bf4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/d15bba1edcc7c89e09cc74c5d961317a8b947bf4",
+                "reference": "d15bba1edcc7c89e09cc74c5d961317a8b947bf4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.0.0"
+            },
+            "require-dev": {
+                "phing/phing": "~2.7",
+                "phpunit/phpunit": "~4.0",
+                "sami/sami": "~2.0",
+                "squizlabs/php_codesniffer": "~1.5"
+            },
+            "suggest": {
+                "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
+                "ext-mcrypt": "Install the Mcrypt extension in order to speed up a wide variety of cryptographic operations.",
+                "pear-pear/PHP_Compat": "Install PHP_Compat to get phpseclib working on PHP < 4.3.3."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "0.3-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Crypt": "phpseclib/",
+                    "File": "phpseclib/",
+                    "Math": "phpseclib/",
+                    "Net": "phpseclib/",
+                    "System": "phpseclib/"
+                },
+                "files": [
+                    "phpseclib/Crypt/Random.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "phpseclib/"
+            ],
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jim Wigginton",
+                    "email": "terrafrost@php.net",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Patrick Monnerat",
+                    "email": "pm@datasphere.ch",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Andreas Fischer",
+                    "email": "bantu@phpbb.com",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Hans-Jürgen Petrich",
+                    "email": "petrich@tronic-media.com",
+                    "role": "Developer"
+                }
+            ],
+            "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
+            "homepage": "http://phpseclib.sourceforge.net",
+            "keywords": [
+                "BigInteger",
+                "aes",
+                "asn.1",
+                "asn1",
+                "blowfish",
+                "crypto",
+                "cryptography",
+                "encryption",
+                "rsa",
+                "security",
+                "sftp",
+                "signature",
+                "signing",
+                "ssh",
+                "twofish",
+                "x.509",
+                "x509"
+            ],
+            "time": "2015-01-28 21:50:33"
+        },
+        {
+            "name": "predis/predis",
+            "version": "v0.8.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nrk/predis.git",
+                "reference": "4123fcd85d61354c6c9900db76c9597dbd129bf6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nrk/predis/zipball/4123fcd85d61354c6c9900db76c9597dbd129bf6",
+                "reference": "4123fcd85d61354c6c9900db76c9597dbd129bf6",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.2"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.0"
+            },
+            "suggest": {
+                "ext-curl": "Allows access to Webdis when paired with phpiredis",
+                "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Predis": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Daniele Alessandri",
+                    "email": "suppakilla@gmail.com",
+                    "homepage": "http://clorophilla.net"
+                }
+            ],
+            "description": "Flexible and feature-complete PHP client library for Redis",
+            "homepage": "http://github.com/nrk/predis",
+            "keywords": [
+                "nosql",
+                "predis",
+                "redis"
+            ],
+            "time": "2014-08-01 09:43:10"
+        },
+        {
+            "name": "psr/log",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b",
+                "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
+                "shasum": ""
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Psr\\Log\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for logging libraries",
+            "keywords": [
+                "log",
+                "psr",
+                "psr-3"
+            ],
+            "time": "2012-12-21 11:40:51"
+        },
+        {
+            "name": "stack/builder",
+            "version": "v1.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/stackphp/builder.git",
+                "reference": "c1f8a4693b55c563405024f708a76ef576c3b276"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/stackphp/builder/zipball/c1f8a4693b55c563405024f708a76ef576c3b276",
+                "reference": "c1f8a4693b55c563405024f708a76ef576c3b276",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0",
+                "symfony/http-foundation": "~2.1",
+                "symfony/http-kernel": "~2.1"
+            },
+            "require-dev": {
+                "silex/silex": "~1.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Stack": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Igor Wiedler",
+                    "email": "igor@wiedler.ch"
+                }
+            ],
+            "description": "Builder for stack middlewares based on HttpKernelInterface.",
+            "keywords": [
+                "stack"
+            ],
+            "time": "2014-11-23 20:37:11"
+        },
+        {
+            "name": "swiftmailer/swiftmailer",
+            "version": "v5.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/swiftmailer/swiftmailer.git",
+                "reference": "31454f258f10329ae7c48763eb898a75c39e0a9f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/31454f258f10329ae7c48763eb898a75c39e0a9f",
+                "reference": "31454f258f10329ae7c48763eb898a75c39e0a9f",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "mockery/mockery": "~0.9.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.4-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "lib/swift_required.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Chris Corbyn"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Swiftmailer, free feature-rich PHP mailer",
+            "homepage": "http://swiftmailer.org",
+            "keywords": [
+                "mail",
+                "mailer"
+            ],
+            "time": "2015-03-14 06:06:39"
+        },
+        {
+            "name": "symfony/browser-kit",
+            "version": "v2.5.11",
+            "target-dir": "Symfony/Component/BrowserKit",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/BrowserKit.git",
+                "reference": "b2b78b850a32251cbbd9915ab61453302e7ecd72"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/b2b78b850a32251cbbd9915ab61453302e7ecd72",
+                "reference": "b2b78b850a32251cbbd9915ab61453302e7ecd72",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "symfony/dom-crawler": "~2.0,>=2.0.5"
+            },
+            "require-dev": {
+                "symfony/css-selector": "~2.0,>=2.0.5",
+                "symfony/process": "~2.0,>=2.0.5"
+            },
+            "suggest": {
+                "symfony/process": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\BrowserKit\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Symfony BrowserKit Component",
+            "homepage": "http://symfony.com",
+            "time": "2015-01-03 08:01:13"
+        },
+        {
+            "name": "symfony/console",
+            "version": "v2.5.11",
+            "target-dir": "Symfony/Component/Console",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/Console.git",
+                "reference": "a43e750b4c74f3bdfca77c79c343033d35a6cd6e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/Console/zipball/a43e750b4c74f3bdfca77c79c343033d35a6cd6e",
+                "reference": "a43e750b4c74f3bdfca77c79c343033d35a6cd6e",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/event-dispatcher": "~2.1"
+            },
+            "suggest": {
+                "psr/log": "For using the console logger",
+                "symfony/event-dispatcher": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\Console\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Symfony Console Component",
+            "homepage": "http://symfony.com",
+            "time": "2015-02-08 07:07:45"
+        },
+        {
+            "name": "symfony/css-selector",
+            "version": "v2.5.11",
+            "target-dir": "Symfony/Component/CssSelector",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/CssSelector.git",
+                "reference": "d45b306421462295e76b94bcf76b963867450327"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/CssSelector/zipball/d45b306421462295e76b94bcf76b963867450327",
+                "reference": "d45b306421462295e76b94bcf76b963867450327",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\CssSelector\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                },
+                {
+                    "name": "Jean-François Simon",
+                    "email": "jeanfrancois.simon@sensiolabs.com"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Symfony CssSelector Component",
+            "homepage": "http://symfony.com",
+            "time": "2015-01-03 08:01:13"
+        },
+        {
+            "name": "symfony/debug",
+            "version": "v2.5.11",
+            "target-dir": "Symfony/Component/Debug",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/Debug.git",
+                "reference": "ed3019589cdadf32c521d1e181f9d72955645c67"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/Debug/zipball/ed3019589cdadf32c521d1e181f9d72955645c67",
+                "reference": "ed3019589cdadf32c521d1e181f9d72955645c67",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "conflict": {
+                "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
+            },
+            "require-dev": {
+                "symfony/class-loader": "~2.2",
+                "symfony/http-foundation": "~2.1",
+                "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2"
+            },
+            "suggest": {
+                "symfony/http-foundation": "",
+                "symfony/http-kernel": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\Debug\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Symfony Debug Component",
+            "homepage": "http://symfony.com",
+            "time": "2015-01-16 14:51:58"
+        },
+        {
+            "name": "symfony/dom-crawler",
+            "version": "v2.5.11",
+            "target-dir": "Symfony/Component/DomCrawler",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/DomCrawler.git",
+                "reference": "3860edcf7ff7e173cfe2151f0d425e610e77cc35"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/3860edcf7ff7e173cfe2151f0d425e610e77cc35",
+                "reference": "3860edcf7ff7e173cfe2151f0d425e610e77cc35",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "symfony/css-selector": "~2.3"
+            },
+            "suggest": {
+                "symfony/css-selector": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\DomCrawler\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Symfony DomCrawler Component",
+            "homepage": "http://symfony.com",
+            "time": "2015-01-03 08:01:13"
+        },
+        {
+            "name": "symfony/event-dispatcher",
+            "version": "v2.6.6",
+            "target-dir": "Symfony/Component/EventDispatcher",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/EventDispatcher.git",
+                "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/70f7c8478739ad21e3deef0d977b38c77f1fb284",
+                "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "~2.0,>=2.0.5",
+                "symfony/dependency-injection": "~2.6",
+                "symfony/expression-language": "~2.6",
+                "symfony/phpunit-bridge": "~2.7",
+                "symfony/stopwatch": "~2.3"
+            },
+            "suggest": {
+                "symfony/dependency-injection": "",
+                "symfony/http-kernel": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.6-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\EventDispatcher\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Symfony EventDispatcher Component",
+            "homepage": "http://symfony.com",
+            "time": "2015-03-13 17:37:22"
+        },
+        {
+            "name": "symfony/filesystem",
+            "version": "v2.6.6",
+            "target-dir": "Symfony/Component/Filesystem",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/Filesystem.git",
+                "reference": "4983964b3693e4f13449cb3800c64a9112c301b4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/Filesystem/zipball/4983964b3693e4f13449cb3800c64a9112c301b4",
+                "reference": "4983964b3693e4f13449cb3800c64a9112c301b4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "symfony/phpunit-bridge": "~2.7"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.6-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\Filesystem\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Symfony Filesystem Component",
+            "homepage": "http://symfony.com",
+            "time": "2015-03-22 16:55:57"
+        },
+        {
+            "name": "symfony/finder",
+            "version": "v2.5.11",
+            "target-dir": "Symfony/Component/Finder",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/Finder.git",
+                "reference": "e527ebf47ff912a45e148b7d0b107b80ec0b3cc2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/Finder/zipball/e527ebf47ff912a45e148b7d0b107b80ec0b3cc2",
+                "reference": "e527ebf47ff912a45e148b7d0b107b80ec0b3cc2",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\Finder\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Symfony Finder Component",
+            "homepage": "http://symfony.com",
+            "time": "2015-01-03 08:01:13"
+        },
+        {
+            "name": "symfony/http-foundation",
+            "version": "v2.5.11",
+            "target-dir": "Symfony/Component/HttpFoundation",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/HttpFoundation.git",
+                "reference": "08e783861dd9579bac4092814bbfb0cae6666b65"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/08e783861dd9579bac4092814bbfb0cae6666b65",
+                "reference": "08e783861dd9579bac4092814bbfb0cae6666b65",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "symfony/expression-language": "~2.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\HttpFoundation\\": ""
+                },
+                "classmap": [
+                    "Symfony/Component/HttpFoundation/Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Symfony HttpFoundation Component",
+            "homepage": "http://symfony.com",
+            "time": "2015-04-01 15:49:36"
+        },
+        {
+            "name": "symfony/http-kernel",
+            "version": "v2.5.11",
+            "target-dir": "Symfony/Component/HttpKernel",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/HttpKernel.git",
+                "reference": "7b1632cf2bdbc69c59a44942b70d5aae91034304"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/7b1632cf2bdbc69c59a44942b70d5aae91034304",
+                "reference": "7b1632cf2bdbc69c59a44942b70d5aae91034304",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "psr/log": "~1.0",
+                "symfony/debug": "~2.5.9|~2.6,>=2.6.2",
+                "symfony/event-dispatcher": "~2.5.9|~2.6,>=2.6.2",
+                "symfony/http-foundation": "~2.5"
+            },
+            "require-dev": {
+                "symfony/browser-kit": "~2.3",
+                "symfony/class-loader": "~2.1",
+                "symfony/config": "~2.0,>=2.0.5",
+                "symfony/console": "~2.2",
+                "symfony/css-selector": "~2.0,>=2.0.5",
+                "symfony/dependency-injection": "~2.2",
+                "symfony/dom-crawler": "~2.0,>=2.0.5",
+                "symfony/expression-language": "~2.4",
+                "symfony/finder": "~2.0,>=2.0.5",
+                "symfony/process": "~2.0,>=2.0.5",
+                "symfony/routing": "~2.2",
+                "symfony/stopwatch": "~2.3",
+                "symfony/templating": "~2.2"
+            },
+            "suggest": {
+                "symfony/browser-kit": "",
+                "symfony/class-loader": "",
+                "symfony/config": "",
+                "symfony/console": "",
+                "symfony/dependency-injection": "",
+                "symfony/finder": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\HttpKernel\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Symfony HttpKernel Component",
+            "homepage": "http://symfony.com",
+            "time": "2015-04-01 16:01:45"
+        },
+        {
+            "name": "symfony/process",
+            "version": "v2.5.11",
+            "target-dir": "Symfony/Component/Process",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/Process.git",
+                "reference": "00a1308e8b5aec5eba7c8f1708426a78f929be8c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/Process/zipball/00a1308e8b5aec5eba7c8f1708426a78f929be8c",
+                "reference": "00a1308e8b5aec5eba7c8f1708426a78f929be8c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\Process\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Symfony Process Component",
+            "homepage": "http://symfony.com",
+            "time": "2015-02-08 07:07:45"
+        },
+        {
+            "name": "symfony/routing",
+            "version": "v2.5.11",
+            "target-dir": "Symfony/Component/Routing",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/Routing.git",
+                "reference": "46142c34ea830f47429df6e15faec3a33292d618"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/Routing/zipball/46142c34ea830f47429df6e15faec3a33292d618",
+                "reference": "46142c34ea830f47429df6e15faec3a33292d618",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "doctrine/annotations": "~1.0",
+                "doctrine/common": "~2.2",
+                "psr/log": "~1.0",
+                "symfony/config": "~2.2",
+                "symfony/expression-language": "~2.4",
+                "symfony/http-foundation": "~2.3",
+                "symfony/yaml": "~2.0,>=2.0.5"
+            },
+            "suggest": {
+                "doctrine/annotations": "For using the annotation loader",
+                "symfony/config": "For using the all-in-one router or any loader",
+                "symfony/expression-language": "For using expression matching",
+                "symfony/yaml": "For using the YAML loader"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\Routing\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Symfony Routing Component",
+            "homepage": "http://symfony.com",
+            "keywords": [
+                "router",
+                "routing",
+                "uri",
+                "url"
+            ],
+            "time": "2015-02-08 07:07:45"
+        },
+        {
+            "name": "symfony/security-core",
+            "version": "v2.5.11",
+            "target-dir": "Symfony/Component/Security/Core",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/security-core.git",
+                "reference": "3a27d7b34ee62cb0fdf5ad970e7777912ef4722f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/security-core/zipball/3a27d7b34ee62cb0fdf5ad970e7777912ef4722f",
+                "reference": "3a27d7b34ee62cb0fdf5ad970e7777912ef4722f",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "ircmaxell/password-compat": "1.0.*",
+                "psr/log": "~1.0",
+                "symfony/event-dispatcher": "~2.1",
+                "symfony/expression-language": "~2.4",
+                "symfony/http-foundation": "~2.4",
+                "symfony/translation": "~2.0,>=2.0.5",
+                "symfony/validator": "~2.5,>=2.5.5"
+            },
+            "suggest": {
+                "ircmaxell/password-compat": "For using the BCrypt password encoder in PHP <5.5",
+                "symfony/event-dispatcher": "",
+                "symfony/expression-language": "For using the expression voter",
+                "symfony/http-foundation": "",
+                "symfony/validator": "For using the user password constraint"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\Security\\Core\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Symfony Security Component - Core Library",
+            "homepage": "http://symfony.com",
+            "time": "2015-01-25 04:37:39"
+        },
+        {
+            "name": "symfony/translation",
+            "version": "v2.5.11",
+            "target-dir": "Symfony/Component/Translation",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/Translation.git",
+                "reference": "165b5348cd20f8c4b2fcf1097c9c8300d1093b90"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/Translation/zipball/165b5348cd20f8c4b2fcf1097c9c8300d1093b90",
+                "reference": "165b5348cd20f8c4b2fcf1097c9c8300d1093b90",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "symfony/config": "~2.3,>=2.3.12",
+                "symfony/intl": "~2.3",
+                "symfony/yaml": "~2.2"
+            },
+            "suggest": {
+                "symfony/config": "",
+                "symfony/yaml": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Symfony\\Component\\Translation\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Symfony Community",
+                    "homepage": "http://symfony.com/contributors"
+                },
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Symfony Translation Component",
+            "homepage": "http://symfony.com",
+            "time": "2015-01-03 15:23:51"
+        }
+    ],
+    "packages-dev": [],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": {
+        "apache/thrift": 20
+    },
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": [],
+    "platform-dev": []
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/phpunit.xml
----------------------------------------------------------------------
diff --git a/phpunit.xml b/phpunit.xml
new file mode 100755
index 0000000..c330420
--- /dev/null
+++ b/phpunit.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit backupGlobals="false"
+         backupStaticAttributes="false"
+         bootstrap="bootstrap/autoload.php"
+         colors="true"
+         convertErrorsToExceptions="true"
+         convertNoticesToExceptions="true"
+         convertWarningsToExceptions="true"
+         processIsolation="false"
+         stopOnFailure="false"
+         syntaxCheck="false"
+>
+    <testsuites>
+        <testsuite name="Application Test Suite">
+            <directory>./app/tests/</directory>
+        </testsuite>
+    </testsuites>
+</phpunit>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/.htaccess
----------------------------------------------------------------------
diff --git a/public/.htaccess b/public/.htaccess
new file mode 100755
index 0000000..77827ae
--- /dev/null
+++ b/public/.htaccess
@@ -0,0 +1,15 @@
+<IfModule mod_rewrite.c>
+    <IfModule mod_negotiation.c>
+        Options -MultiViews
+    </IfModule>
+
+    RewriteEngine On
+
+    # Redirect Trailing Slashes...
+    RewriteRule ^(.*)/$ /$1 [L,R=301]
+
+    # Handle Front Controller...
+    RewriteCond %{REQUEST_FILENAME} !-d
+    RewriteCond %{REQUEST_FILENAME} !-f
+    RewriteRule ^ index.php [L]
+</IfModule>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/assets/PoweredbyAiravata_Small.png
----------------------------------------------------------------------
diff --git a/public/assets/PoweredbyAiravata_Small.png b/public/assets/PoweredbyAiravata_Small.png
new file mode 100755
index 0000000..7178e31
Binary files /dev/null and b/public/assets/PoweredbyAiravata_Small.png differ

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/assets/ajax-loader.gif
----------------------------------------------------------------------
diff --git a/public/assets/ajax-loader.gif b/public/assets/ajax-loader.gif
new file mode 100644
index 0000000..39f1cdf
Binary files /dev/null and b/public/assets/ajax-loader.gif differ

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/assets/favicon.ico
----------------------------------------------------------------------
diff --git a/public/assets/favicon.ico b/public/assets/favicon.ico
new file mode 100755
index 0000000..541659e
Binary files /dev/null and b/public/assets/favicon.ico differ

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/assets/scigap-header-logo.png
----------------------------------------------------------------------
diff --git a/public/assets/scigap-header-logo.png b/public/assets/scigap-header-logo.png
new file mode 100755
index 0000000..6e8bf4a
Binary files /dev/null and b/public/assets/scigap-header-logo.png differ

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/css/admin.css
----------------------------------------------------------------------
diff --git a/public/css/admin.css b/public/css/admin.css
new file mode 100644
index 0000000..3c93a7d
--- /dev/null
+++ b/public/css/admin.css
@@ -0,0 +1,307 @@
+/*!
+ * Start Bootstrap - SB Admin Bootstrap Admin Template (http://startbootstrap.com)
+ * Code licensed under the Apache License v2.0.
+ * For details, see http://www.apache.org/licenses/LICENSE-2.0.
+ */
+
+/* Global Styles */
+
+body {
+    /*margin-top: 100px;*/
+    background-color: #222;
+}
+
+@media(min-width:768px) {
+    body {
+        /*margin-top: 50px;*/
+    }
+}
+
+#wrapper {
+    padding-left: 0;
+}
+
+#page-wrapper {
+    width: 100%;
+    padding: 0;
+    background-color: #fff;
+}
+
+.huge {
+    font-size: 50px;
+    line-height: normal;
+}
+
+@media(min-width:768px) {
+    #wrapper {
+        padding-left: 225px;
+    }
+
+    #page-wrapper {
+        padding: 10px;
+    }
+}
+
+/* Top Navigation */
+
+.top-nav {
+    padding: 0 15px;
+}
+
+.top-nav>li {
+    display: inline-block;
+    float: left;
+}
+
+.top-nav>li>a {
+    padding-top: 15px;
+    padding-bottom: 15px;
+    line-height: 20px;
+    color: #999;
+}
+
+.top-nav>li>a:hover,
+.top-nav>li>a:focus,
+.top-nav>.open>a,
+.top-nav>.open>a:hover,
+.top-nav>.open>a:focus {
+    color: #fff;
+    background-color: #000;
+}
+
+.top-nav>.open>.dropdown-menu {
+    float: left;
+    position: absolute;
+    margin-top: 0;
+    border: 1px solid rgba(0,0,0,.15);
+    border-top-left-radius: 0;
+    border-top-right-radius: 0;
+    background-color: #fff;
+    -webkit-box-shadow: 0 6px 12px rgba(0,0,0,.175);
+    box-shadow: 0 6px 12px rgba(0,0,0,.175);
+}
+
+.top-nav>.open>.dropdown-menu>li>a {
+    white-space: normal;
+}
+
+ul.message-dropdown {
+    padding: 0;
+    max-height: 250px;
+    overflow-x: hidden;
+    overflow-y: auto;
+}
+
+li.message-preview {
+    width: 275px;
+    border-bottom: 1px solid rgba(0,0,0,.15);
+}
+
+li.message-preview>a {
+    padding-top: 15px;
+    padding-bottom: 15px;
+}
+
+li.message-footer {
+    margin: 5px 0;
+}
+
+ul.alert-dropdown {
+    width: 200px;
+}
+
+/* Side Navigation */
+
+@media(min-width:768px) {
+    .side-nav {
+        position: fixed;
+        top: 51px;
+        left: 225px;
+        width: 225px;
+        margin-left: -225px;
+        border: none;
+        border-radius: 0;
+        overflow-y: auto;
+        background-color: #222;
+    }
+
+    .side-nav>li>a {
+        width: 225px;
+    }
+
+    .side-nav li a:hover,
+    .side-nav li a:focus {
+        outline: none;
+        background-color: #000 !important;
+    }
+}
+
+.side-nav>li>ul {
+    padding: 0;
+}
+
+.side-nav>li>ul>li>a {
+    display: block;
+    padding: 10px 15px 10px 38px;
+    text-decoration: none;
+    color: #999;
+}
+
+.side-nav>li>ul>li>a:hover {
+    color: #fff;
+}
+
+/* Flot Chart Containers */
+
+.flot-chart {
+    display: block;
+    height: 400px;
+}
+
+.flot-chart-content {
+    width: 100%;
+    height: 100%;
+}
+
+/* Custom Colored Panels */
+
+.huge {
+    font-size: 40px;
+}
+
+.panel-green {
+    border-color: #5cb85c;
+}
+
+.panel-green .panel-heading {
+    border-color: #5cb85c;
+    color: #fff;
+    background-color: #5cb85c;
+}
+
+.panel-green a {
+    color: #5cb85c;
+}
+
+.panel-green a:hover {
+    color: #3d8b3d;
+}
+
+.panel-red {
+    border-color: #d9534f;
+}
+
+.panel-red .panel-heading {
+    border-color: #d9534f;
+    color: #fff;
+    background-color: #d9534f;
+}
+
+.panel-red a {
+    color: #d9534f;
+}
+
+.panel-red a:hover {
+    color: #b52b27;
+}
+
+.panel-yellow {
+    border-color: #f0ad4e;
+}
+
+.panel-yellow .panel-heading {
+    border-color: #f0ad4e;
+    color: #fff;
+    background-color: #f0ad4e;
+}
+
+.panel-yellow a {
+    color: #f0ad4e;
+}
+
+.panel-yellow a:hover {
+    color: #df8a13;
+}
+
+/* ------------------------------------ css addition ------------------*/
+
+.navbar {
+    margin-bottom: 0;
+}
+.navbar-ex1-collapse li a{
+    color: #9d9d9d;
+}
+
+.navbar-ex1-collapse .active a{
+    background-color: #000;
+    color: #fff;
+}
+.add-role, .add-tenant{ display: none;}
+
+
+
+/*------------------------------------experiment Stages CSS --------------*/
+
+.tree {
+    min-height:20px;
+    padding:19px;
+    margin-bottom:20px;
+    background-color:#fbfbfb;
+    border:1px solid #999;
+    -webkit-border-radius:4px;
+    -moz-border-radius:4px;
+    border-radius:4px;
+    -webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);
+    -moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);
+    box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05)
+}
+.tree li {
+    list-style-type:none;
+    margin:0;
+    padding:10px 5px 0 5px;
+    position:relative
+}
+.tree li::before, .tree li::after {
+    content:'';
+    left:-20px;
+    position:absolute;
+    right:auto
+}
+.tree li::before {
+    border-left:1px solid #999;
+    bottom:50px;
+    height:100%;
+    top:0;
+    width:1px
+}
+.tree li::after {
+    border-top:1px solid #999;
+    height:20px;
+    top:25px;
+    width:25px
+}
+.tree li span {
+    -moz-border-radius:5px;
+    -webkit-border-radius:5px;
+    border:1px solid #999;
+    border-radius:5px;
+    display:inline-block;
+    padding:3px 8px;
+    text-decoration:none
+}
+.tree li.parent_li>span {
+    cursor:pointer
+}
+.tree>ul>li::before, .tree>ul>li::after {
+    border:0
+}
+.tree li:last-child::before {
+    height:30px
+}
+.tree li.parent_li>span:hover, .tree li.parent_li>span:hover+ul li span {
+    background:#eee;
+    border:1px solid #94a0b4;
+    color:#000
+} 
+
+/* ------------------- experiment Stages CSS over ---------------- */
\ No newline at end of file


[19/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php
new file mode 100755
index 0000000..20c2c51
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php
@@ -0,0 +1,3148 @@
+<?php namespace Illuminate\Database\Eloquent;
+
+use DateTime;
+use ArrayAccess;
+use Carbon\Carbon;
+use LogicException;
+use JsonSerializable;
+use Illuminate\Events\Dispatcher;
+use Illuminate\Database\Eloquent\Relations\Pivot;
+use Illuminate\Database\Eloquent\Relations\HasOne;
+use Illuminate\Database\Eloquent\Relations\HasMany;
+use Illuminate\Database\Eloquent\Relations\MorphTo;
+use Illuminate\Support\Contracts\JsonableInterface;
+use Illuminate\Support\Contracts\ArrayableInterface;
+use Illuminate\Database\Eloquent\Relations\Relation;
+use Illuminate\Database\Eloquent\Relations\MorphOne;
+use Illuminate\Database\Eloquent\Relations\MorphMany;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
+use Illuminate\Database\Query\Builder as QueryBuilder;
+use Illuminate\Database\Eloquent\Relations\MorphToMany;
+use Illuminate\Database\Eloquent\Relations\BelongsToMany;
+use Illuminate\Database\Eloquent\Relations\HasManyThrough;
+use Illuminate\Database\ConnectionResolverInterface as Resolver;
+
+abstract class Model implements ArrayAccess, ArrayableInterface, JsonableInterface, JsonSerializable {
+
+	/**
+	 * The connection name for the model.
+	 *
+	 * @var string
+	 */
+	protected $connection;
+
+	/**
+	 * The table associated with the model.
+	 *
+	 * @var string
+	 */
+	protected $table;
+
+	/**
+	 * The primary key for the model.
+	 *
+	 * @var string
+	 */
+	protected $primaryKey = 'id';
+
+	/**
+	 * The number of models to return for pagination.
+	 *
+	 * @var int
+	 */
+	protected $perPage = 15;
+
+	/**
+	 * Indicates if the IDs are auto-incrementing.
+	 *
+	 * @var bool
+	 */
+	public $incrementing = true;
+
+	/**
+	 * Indicates if the model should be timestamped.
+	 *
+	 * @var bool
+	 */
+	public $timestamps = true;
+
+	/**
+	 * The model's attributes.
+	 *
+	 * @var array
+	 */
+	protected $attributes = array();
+
+	/**
+	 * The model attribute's original state.
+	 *
+	 * @var array
+	 */
+	protected $original = array();
+
+	/**
+	 * The loaded relationships for the model.
+	 *
+	 * @var array
+	 */
+	protected $relations = array();
+
+	/**
+	 * The attributes that should be hidden for arrays.
+	 *
+	 * @var array
+	 */
+	protected $hidden = array();
+
+	/**
+	 * The attributes that should be visible in arrays.
+	 *
+	 * @var array
+	 */
+	protected $visible = array();
+
+	/**
+	 * The accessors to append to the model's array form.
+	 *
+	 * @var array
+	 */
+	protected $appends = array();
+
+	/**
+	 * The attributes that are mass assignable.
+	 *
+	 * @var array
+	 */
+	protected $fillable = array();
+
+	/**
+	 * The attributes that aren't mass assignable.
+	 *
+	 * @var array
+	 */
+	protected $guarded = array('*');
+
+	/**
+	 * The attributes that should be mutated to dates.
+	 *
+	 * @var array
+	 */
+	protected $dates = array();
+
+	/**
+	 * The relationships that should be touched on save.
+	 *
+	 * @var array
+	 */
+	protected $touches = array();
+
+	/**
+	 * User exposed observable events
+	 *
+	 * @var array
+	 */
+	protected $observables = array();
+
+	/**
+	 * The relations to eager load on every query.
+	 *
+	 * @var array
+	 */
+	protected $with = array();
+
+	/**
+	 * The class name to be used in polymorphic relations.
+	 *
+	 * @var string
+	 */
+	protected $morphClass;
+
+	/**
+	 * Indicates if the model exists.
+	 *
+	 * @var bool
+	 */
+	public $exists = false;
+
+	/**
+	 * Indicates whether attributes are snake cased on arrays.
+	 *
+	 * @var bool
+	 */
+	public static $snakeAttributes = true;
+
+	/**
+	 * The connection resolver instance.
+	 *
+	 * @var \Illuminate\Database\ConnectionResolverInterface
+	 */
+	protected static $resolver;
+
+	/**
+	 * The event dispatcher instance.
+	 *
+	 * @var \Illuminate\Events\Dispatcher
+	 */
+	protected static $dispatcher;
+
+	/**
+	 * The array of booted models.
+	 *
+	 * @var array
+	 */
+	protected static $booted = array();
+
+	/**
+	 * The array of global scopes on the model.
+	 *
+	 * @var array
+	 */
+	protected static $globalScopes = array();
+
+	/**
+	 * Indicates if all mass assignment is enabled.
+	 *
+	 * @var bool
+	 */
+	protected static $unguarded = false;
+
+	/**
+	 * The cache of the mutated attributes for each class.
+	 *
+	 * @var array
+	 */
+	protected static $mutatorCache = array();
+
+	/**
+	 * The many to many relationship methods.
+	 *
+	 * @var array
+	 */
+	public static $manyMethods = array('belongsToMany', 'morphToMany', 'morphedByMany');
+
+	/**
+	 * The name of the "created at" column.
+	 *
+	 * @var string
+	 */
+	const CREATED_AT = 'created_at';
+
+	/**
+	 * The name of the "updated at" column.
+	 *
+	 * @var string
+	 */
+	const UPDATED_AT = 'updated_at';
+
+	/**
+	 * Create a new Eloquent model instance.
+	 *
+	 * @param  array  $attributes
+	 * @return void
+	 */
+	public function __construct(array $attributes = array())
+	{
+		$this->bootIfNotBooted();
+
+		$this->syncOriginal();
+
+		$this->fill($attributes);
+	}
+
+	/**
+	 * Check if the model needs to be booted and if so, do it.
+	 *
+	 * @return void
+	 */
+	protected function bootIfNotBooted()
+	{
+		$class = get_class($this);
+
+		if ( ! isset(static::$booted[$class]))
+		{
+			static::$booted[$class] = true;
+
+			$this->fireModelEvent('booting', false);
+
+			static::boot();
+
+			$this->fireModelEvent('booted', false);
+		}
+	}
+
+	/**
+	 * The "booting" method of the model.
+	 *
+	 * @return void
+	 */
+	protected static function boot()
+	{
+		$class = get_called_class();
+
+		static::$mutatorCache[$class] = array();
+
+		// Here we will extract all of the mutated attributes so that we can quickly
+		// spin through them after we export models to their array form, which we
+		// need to be fast. This will let us always know the attributes mutate.
+		foreach (get_class_methods($class) as $method)
+		{
+			if (preg_match('/^get(.+)Attribute$/', $method, $matches))
+			{
+				if (static::$snakeAttributes) $matches[1] = snake_case($matches[1]);
+
+				static::$mutatorCache[$class][] = lcfirst($matches[1]);
+			}
+		}
+
+		static::bootTraits();
+	}
+
+	/**
+	 * Boot all of the bootable traits on the model.
+	 *
+	 * @return void
+	 */
+	protected static function bootTraits()
+	{
+		foreach (class_uses_recursive(get_called_class()) as $trait)
+		{
+			if (method_exists(get_called_class(), $method = 'boot'.class_basename($trait)))
+			{
+				forward_static_call([get_called_class(), $method]);
+			}
+		}
+	}
+
+	/**
+	 * Register a new global scope on the model.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\ScopeInterface  $scope
+	 * @return void
+	 */
+	public static function addGlobalScope(ScopeInterface $scope)
+	{
+		static::$globalScopes[get_called_class()][get_class($scope)] = $scope;
+	}
+
+	/**
+	 * Determine if a model has a global scope.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\ScopeInterface  $scope
+	 * @return bool
+	 */
+	public static function hasGlobalScope($scope)
+	{
+		return ! is_null(static::getGlobalScope($scope));
+	}
+
+	/**
+	 * Get a global scope registered with the model.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\ScopeInterface  $scope
+	 * @return \Illuminate\Database\Eloquent\ScopeInterface|null
+	 */
+	public static function getGlobalScope($scope)
+	{
+		return array_first(static::$globalScopes[get_called_class()], function($key, $value) use ($scope)
+		{
+			return $scope instanceof $value;
+		});
+	}
+
+	/**
+	 * Get the global scopes for this class instance.
+	 *
+	 * @return \Illuminate\Database\Eloquent\ScopeInterface[]
+	 */
+	public function getGlobalScopes()
+	{
+		return array_get(static::$globalScopes, get_class($this), []);
+	}
+
+	/**
+	 * Register an observer with the Model.
+	 *
+	 * @param  object  $class
+	 * @return void
+	 */
+	public static function observe($class)
+	{
+		$instance = new static;
+
+		$className = get_class($class);
+
+		// When registering a model observer, we will spin through the possible events
+		// and determine if this observer has that method. If it does, we will hook
+		// it into the model's event system, making it convenient to watch these.
+		foreach ($instance->getObservableEvents() as $event)
+		{
+			if (method_exists($class, $event))
+			{
+				static::registerModelEvent($event, $className.'@'.$event);
+			}
+		}
+	}
+
+	/**
+	 * Fill the model with an array of attributes.
+	 *
+	 * @param  array  $attributes
+	 * @return $this
+	 *
+	 * @throws \Illuminate\Database\Eloquent\MassAssignmentException
+	 */
+	public function fill(array $attributes)
+	{
+		$totallyGuarded = $this->totallyGuarded();
+
+		foreach ($this->fillableFromArray($attributes) as $key => $value)
+		{
+			$key = $this->removeTableFromKey($key);
+
+			// The developers may choose to place some attributes in the "fillable"
+			// array, which means only those attributes may be set through mass
+			// assignment to the model, and all others will just be ignored.
+			if ($this->isFillable($key))
+			{
+				$this->setAttribute($key, $value);
+			}
+			elseif ($totallyGuarded)
+			{
+				throw new MassAssignmentException($key);
+			}
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Get the fillable attributes of a given array.
+	 *
+	 * @param  array  $attributes
+	 * @return array
+	 */
+	protected function fillableFromArray(array $attributes)
+	{
+		if (count($this->fillable) > 0 && ! static::$unguarded)
+		{
+			return array_intersect_key($attributes, array_flip($this->fillable));
+		}
+
+		return $attributes;
+	}
+
+	/**
+	 * Create a new instance of the given model.
+	 *
+	 * @param  array  $attributes
+	 * @param  bool   $exists
+	 * @return static
+	 */
+	public function newInstance($attributes = array(), $exists = false)
+	{
+		// This method just provides a convenient way for us to generate fresh model
+		// instances of this current model. It is particularly useful during the
+		// hydration of new objects via the Eloquent query builder instances.
+		$model = new static((array) $attributes);
+
+		$model->exists = $exists;
+
+		return $model;
+	}
+
+	/**
+	 * Create a new model instance that is existing.
+	 *
+	 * @param  array  $attributes
+	 * @return static
+	 */
+	public function newFromBuilder($attributes = array())
+	{
+		$instance = $this->newInstance(array(), true);
+
+		$instance->setRawAttributes((array) $attributes, true);
+
+		return $instance;
+	}
+
+	/**
+	 * Create a collection of models from plain arrays.
+	 *
+	 * @param  array  $items
+	 * @param  string  $connection
+	 * @return \Illuminate\Database\Eloquent\Collection
+	 */
+	public static function hydrate(array $items, $connection = null)
+	{
+		$collection = with($instance = new static)->newCollection();
+
+		foreach ($items as $item)
+		{
+			$model = $instance->newFromBuilder($item);
+
+			if ( ! is_null($connection))
+			{
+				$model->setConnection($connection);
+			}
+
+			$collection->push($model);
+		}
+
+		return $collection;
+	}
+
+	/**
+	 * Create a collection of models from a raw query.
+	 *
+	 * @param  string  $query
+	 * @param  array  $bindings
+	 * @param  string  $connection
+	 * @return \Illuminate\Database\Eloquent\Collection
+	 */
+	public static function hydrateRaw($query, $bindings = array(), $connection = null)
+	{
+		$instance = new static;
+
+		if ( ! is_null($connection))
+		{
+			$instance->setConnection($connection);
+		}
+
+		$items = $instance->getConnection()->select($query, $bindings);
+
+		return static::hydrate($items, $connection);
+	}
+
+	/**
+	 * Save a new model and return the instance.
+	 *
+	 * @param  array  $attributes
+	 * @return static
+	 */
+	public static function create(array $attributes)
+	{
+		$model = new static($attributes);
+
+		$model->save();
+
+		return $model;
+	}
+
+	/**
+	 * Get the first record matching the attributes or create it.
+	 *
+	 * @param  array  $attributes
+	 * @return static
+	 */
+	public static function firstOrCreate(array $attributes)
+	{
+		if ( ! is_null($instance = static::where($attributes)->first()))
+		{
+			return $instance;
+		}
+
+		return static::create($attributes);
+	}
+
+	/**
+	 * Get the first record matching the attributes or instantiate it.
+	 *
+	 * @param  array  $attributes
+	 * @return static
+	 */
+	public static function firstOrNew(array $attributes)
+	{
+		if ( ! is_null($instance = static::where($attributes)->first()))
+		{
+			return $instance;
+		}
+
+		return new static($attributes);
+	}
+
+	/**
+	 * Create or update a record matching the attributes, and fill it with values.
+	 *
+	 * @param  array  $attributes
+	 * @param  array  $values
+	 * @return static
+	 */
+	public static function updateOrCreate(array $attributes, array $values = array())
+	{
+		$instance = static::firstOrNew($attributes);
+
+		$instance->fill($values)->save();
+
+		return $instance;
+	}
+
+	/**
+	 * Get the first model for the given attributes.
+	 *
+	 * @param  array  $attributes
+	 * @return static|null
+	 */
+	protected static function firstByAttributes($attributes)
+	{
+		return static::where($attributes)->first();
+	}
+
+	/**
+	 * Begin querying the model.
+	 *
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	public static function query()
+	{
+		return (new static)->newQuery();
+	}
+
+	/**
+	 * Begin querying the model on a given connection.
+	 *
+	 * @param  string  $connection
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	public static function on($connection = null)
+	{
+		// First we will just create a fresh instance of this model, and then we can
+		// set the connection on the model so that it is be used for the queries
+		// we execute, as well as being set on each relationship we retrieve.
+		$instance = new static;
+
+		$instance->setConnection($connection);
+
+		return $instance->newQuery();
+	}
+
+	/**
+	 * Begin querying the model on the write connection.
+	 *
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	public static function onWriteConnection()
+	{
+		$instance = new static;
+
+		return $instance->newQuery()->useWritePdo();
+	}
+
+	/**
+	 * Get all of the models from the database.
+	 *
+	 * @param  array  $columns
+	 * @return \Illuminate\Database\Eloquent\Collection|static[]
+	 */
+	public static function all($columns = array('*'))
+	{
+		$instance = new static;
+
+		return $instance->newQuery()->get($columns);
+	}
+
+	/**
+	 * Find a model by its primary key.
+	 *
+	 * @param  mixed  $id
+	 * @param  array  $columns
+	 * @return \Illuminate\Support\Collection|static|null
+	 */
+	public static function find($id, $columns = array('*'))
+	{
+		$instance = new static;
+
+		if (is_array($id) && empty($id)) return $instance->newCollection();
+
+		return $instance->newQuery()->find($id, $columns);
+	}
+
+	/**
+	 * Find a model by its primary key or return new static.
+	 *
+	 * @param  mixed  $id
+	 * @param  array  $columns
+	 * @return \Illuminate\Support\Collection|static
+	 */
+	public static function findOrNew($id, $columns = array('*'))
+	{
+		if ( ! is_null($model = static::find($id, $columns))) return $model;
+
+		return new static;
+	}
+
+	/**
+	 * Find a model by its primary key or throw an exception.
+	 *
+	 * @param  mixed  $id
+	 * @param  array  $columns
+	 * @return \Illuminate\Support\Collection|static
+	 *
+	 * @throws \Illuminate\Database\Eloquent\ModelNotFoundException
+	 */
+	public static function findOrFail($id, $columns = array('*'))
+	{
+		if ( ! is_null($model = static::find($id, $columns))) return $model;
+
+		throw (new ModelNotFoundException)->setModel(get_called_class());
+	}
+
+	/**
+	 * Eager load relations on the model.
+	 *
+	 * @param  array|string  $relations
+	 * @return $this
+	 */
+	public function load($relations)
+	{
+		if (is_string($relations)) $relations = func_get_args();
+
+		$query = $this->newQuery()->with($relations);
+
+		$query->eagerLoadRelations(array($this));
+
+		return $this;
+	}
+
+	/**
+	 * Being querying a model with eager loading.
+	 *
+	 * @param  array|string  $relations
+	 * @return \Illuminate\Database\Eloquent\Builder|static
+	 */
+	public static function with($relations)
+	{
+		if (is_string($relations)) $relations = func_get_args();
+
+		$instance = new static;
+
+		return $instance->newQuery()->with($relations);
+	}
+
+	/**
+	 * Define a one-to-one relationship.
+	 *
+	 * @param  string  $related
+	 * @param  string  $foreignKey
+	 * @param  string  $localKey
+	 * @return \Illuminate\Database\Eloquent\Relations\HasOne
+	 */
+	public function hasOne($related, $foreignKey = null, $localKey = null)
+	{
+		$foreignKey = $foreignKey ?: $this->getForeignKey();
+
+		$instance = new $related;
+
+		$localKey = $localKey ?: $this->getKeyName();
+
+		return new HasOne($instance->newQuery(), $this, $instance->getTable().'.'.$foreignKey, $localKey);
+	}
+
+	/**
+	 * Define a polymorphic one-to-one relationship.
+	 *
+	 * @param  string  $related
+	 * @param  string  $name
+	 * @param  string  $type
+	 * @param  string  $id
+	 * @param  string  $localKey
+	 * @return \Illuminate\Database\Eloquent\Relations\MorphOne
+	 */
+	public function morphOne($related, $name, $type = null, $id = null, $localKey = null)
+	{
+		$instance = new $related;
+
+		list($type, $id) = $this->getMorphs($name, $type, $id);
+
+		$table = $instance->getTable();
+
+		$localKey = $localKey ?: $this->getKeyName();
+
+		return new MorphOne($instance->newQuery(), $this, $table.'.'.$type, $table.'.'.$id, $localKey);
+	}
+
+	/**
+	 * Define an inverse one-to-one or many relationship.
+	 *
+	 * @param  string  $related
+	 * @param  string  $foreignKey
+	 * @param  string  $otherKey
+	 * @param  string  $relation
+	 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
+	 */
+	public function belongsTo($related, $foreignKey = null, $otherKey = null, $relation = null)
+	{
+		// If no relation name was given, we will use this debug backtrace to extract
+		// the calling method's name and use that as the relationship name as most
+		// of the time this will be what we desire to use for the relationships.
+		if (is_null($relation))
+		{
+			list(, $caller) = debug_backtrace(false, 2);
+
+			$relation = $caller['function'];
+		}
+
+		// If no foreign key was supplied, we can use a backtrace to guess the proper
+		// foreign key name by using the name of the relationship function, which
+		// when combined with an "_id" should conventionally match the columns.
+		if (is_null($foreignKey))
+		{
+			$foreignKey = snake_case($relation).'_id';
+		}
+
+		$instance = new $related;
+
+		// Once we have the foreign key names, we'll just create a new Eloquent query
+		// for the related models and returns the relationship instance which will
+		// actually be responsible for retrieving and hydrating every relations.
+		$query = $instance->newQuery();
+
+		$otherKey = $otherKey ?: $instance->getKeyName();
+
+		return new BelongsTo($query, $this, $foreignKey, $otherKey, $relation);
+	}
+
+	/**
+	 * Define a polymorphic, inverse one-to-one or many relationship.
+	 *
+	 * @param  string  $name
+	 * @param  string  $type
+	 * @param  string  $id
+	 * @return \Illuminate\Database\Eloquent\Relations\MorphTo
+	 */
+	public function morphTo($name = null, $type = null, $id = null)
+	{
+		// If no name is provided, we will use the backtrace to get the function name
+		// since that is most likely the name of the polymorphic interface. We can
+		// use that to get both the class and foreign key that will be utilized.
+		if (is_null($name))
+		{
+			list(, $caller) = debug_backtrace(false, 2);
+
+			$name = snake_case($caller['function']);
+		}
+
+		list($type, $id) = $this->getMorphs($name, $type, $id);
+
+		// If the type value is null it is probably safe to assume we're eager loading
+		// the relationship. When that is the case we will pass in a dummy query as
+		// there are multiple types in the morph and we can't use single queries.
+		if (is_null($class = $this->$type))
+		{
+			return new MorphTo(
+				$this->newQuery(), $this, $id, null, $type, $name
+			);
+		}
+
+		// If we are not eager loading the relationship we will essentially treat this
+		// as a belongs-to style relationship since morph-to extends that class and
+		// we will pass in the appropriate values so that it behaves as expected.
+		else
+		{
+			$instance = new $class;
+
+			return new MorphTo(
+				$instance->newQuery(), $this, $id, $instance->getKeyName(), $type, $name
+			);
+		}
+	}
+
+	/**
+	 * Define a one-to-many relationship.
+	 *
+	 * @param  string  $related
+	 * @param  string  $foreignKey
+	 * @param  string  $localKey
+	 * @return \Illuminate\Database\Eloquent\Relations\HasMany
+	 */
+	public function hasMany($related, $foreignKey = null, $localKey = null)
+	{
+		$foreignKey = $foreignKey ?: $this->getForeignKey();
+
+		$instance = new $related;
+
+		$localKey = $localKey ?: $this->getKeyName();
+
+		return new HasMany($instance->newQuery(), $this, $instance->getTable().'.'.$foreignKey, $localKey);
+	}
+
+	/**
+	 * Define a has-many-through relationship.
+	 *
+	 * @param  string  $related
+	 * @param  string  $through
+	 * @param  string|null  $firstKey
+	 * @param  string|null  $secondKey
+	 * @return \Illuminate\Database\Eloquent\Relations\HasManyThrough
+	 */
+	public function hasManyThrough($related, $through, $firstKey = null, $secondKey = null)
+	{
+		$through = new $through;
+
+		$firstKey = $firstKey ?: $this->getForeignKey();
+
+		$secondKey = $secondKey ?: $through->getForeignKey();
+
+		return new HasManyThrough((new $related)->newQuery(), $this, $through, $firstKey, $secondKey);
+	}
+
+	/**
+	 * Define a polymorphic one-to-many relationship.
+	 *
+	 * @param  string  $related
+	 * @param  string  $name
+	 * @param  string  $type
+	 * @param  string  $id
+	 * @param  string  $localKey
+	 * @return \Illuminate\Database\Eloquent\Relations\MorphMany
+	 */
+	public function morphMany($related, $name, $type = null, $id = null, $localKey = null)
+	{
+		$instance = new $related;
+
+		// Here we will gather up the morph type and ID for the relationship so that we
+		// can properly query the intermediate table of a relation. Finally, we will
+		// get the table and create the relationship instances for the developers.
+		list($type, $id) = $this->getMorphs($name, $type, $id);
+
+		$table = $instance->getTable();
+
+		$localKey = $localKey ?: $this->getKeyName();
+
+		return new MorphMany($instance->newQuery(), $this, $table.'.'.$type, $table.'.'.$id, $localKey);
+	}
+
+	/**
+	 * Define a many-to-many relationship.
+	 *
+	 * @param  string  $related
+	 * @param  string  $table
+	 * @param  string  $foreignKey
+	 * @param  string  $otherKey
+	 * @param  string  $relation
+	 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
+	 */
+	public function belongsToMany($related, $table = null, $foreignKey = null, $otherKey = null, $relation = null)
+	{
+		// If no relationship name was passed, we will pull backtraces to get the
+		// name of the calling function. We will use that function name as the
+		// title of this relation since that is a great convention to apply.
+		if (is_null($relation))
+		{
+			$relation = $this->getBelongsToManyCaller();
+		}
+
+		// First, we'll need to determine the foreign key and "other key" for the
+		// relationship. Once we have determined the keys we'll make the query
+		// instances as well as the relationship instances we need for this.
+		$foreignKey = $foreignKey ?: $this->getForeignKey();
+
+		$instance = new $related;
+
+		$otherKey = $otherKey ?: $instance->getForeignKey();
+
+		// If no table name was provided, we can guess it by concatenating the two
+		// models using underscores in alphabetical order. The two model names
+		// are transformed to snake case from their default CamelCase also.
+		if (is_null($table))
+		{
+			$table = $this->joiningTable($related);
+		}
+
+		// Now we're ready to create a new query builder for the related model and
+		// the relationship instances for the relation. The relations will set
+		// appropriate query constraint and entirely manages the hydrations.
+		$query = $instance->newQuery();
+
+		return new BelongsToMany($query, $this, $table, $foreignKey, $otherKey, $relation);
+	}
+
+	/**
+	 * Define a polymorphic many-to-many relationship.
+	 *
+	 * @param  string  $related
+	 * @param  string  $name
+	 * @param  string  $table
+	 * @param  string  $foreignKey
+	 * @param  string  $otherKey
+	 * @param  bool    $inverse
+	 * @return \Illuminate\Database\Eloquent\Relations\MorphToMany
+	 */
+	public function morphToMany($related, $name, $table = null, $foreignKey = null, $otherKey = null, $inverse = false)
+	{
+		$caller = $this->getBelongsToManyCaller();
+
+		// First, we will need to determine the foreign key and "other key" for the
+		// relationship. Once we have determined the keys we will make the query
+		// instances, as well as the relationship instances we need for these.
+		$foreignKey = $foreignKey ?: $name.'_id';
+
+		$instance = new $related;
+
+		$otherKey = $otherKey ?: $instance->getForeignKey();
+
+		// Now we're ready to create a new query builder for this related model and
+		// the relationship instances for this relation. This relations will set
+		// appropriate query constraints then entirely manages the hydrations.
+		$query = $instance->newQuery();
+
+		$table = $table ?: str_plural($name);
+
+		return new MorphToMany(
+			$query, $this, $name, $table, $foreignKey,
+			$otherKey, $caller, $inverse
+		);
+	}
+
+	/**
+	 * Define a polymorphic, inverse many-to-many relationship.
+	 *
+	 * @param  string  $related
+	 * @param  string  $name
+	 * @param  string  $table
+	 * @param  string  $foreignKey
+	 * @param  string  $otherKey
+	 * @return \Illuminate\Database\Eloquent\Relations\MorphToMany
+	 */
+	public function morphedByMany($related, $name, $table = null, $foreignKey = null, $otherKey = null)
+	{
+		$foreignKey = $foreignKey ?: $this->getForeignKey();
+
+		// For the inverse of the polymorphic many-to-many relations, we will change
+		// the way we determine the foreign and other keys, as it is the opposite
+		// of the morph-to-many method since we're figuring out these inverses.
+		$otherKey = $otherKey ?: $name.'_id';
+
+		return $this->morphToMany($related, $name, $table, $foreignKey, $otherKey, true);
+	}
+
+	/**
+	 * Get the relationship name of the belongs to many.
+	 *
+	 * @return  string
+	 */
+	protected function getBelongsToManyCaller()
+	{
+		$self = __FUNCTION__;
+
+		$caller = array_first(debug_backtrace(false), function($key, $trace) use ($self)
+		{
+			$caller = $trace['function'];
+
+			return ( ! in_array($caller, Model::$manyMethods) && $caller != $self);
+		});
+
+		return ! is_null($caller) ? $caller['function'] : null;
+	}
+
+	/**
+	 * Get the joining table name for a many-to-many relation.
+	 *
+	 * @param  string  $related
+	 * @return string
+	 */
+	public function joiningTable($related)
+	{
+		// The joining table name, by convention, is simply the snake cased models
+		// sorted alphabetically and concatenated with an underscore, so we can
+		// just sort the models and join them together to get the table name.
+		$base = snake_case(class_basename($this));
+
+		$related = snake_case(class_basename($related));
+
+		$models = array($related, $base);
+
+		// Now that we have the model names in an array we can just sort them and
+		// use the implode function to join them together with an underscores,
+		// which is typically used by convention within the database system.
+		sort($models);
+
+		return strtolower(implode('_', $models));
+	}
+
+	/**
+	 * Destroy the models for the given IDs.
+	 *
+	 * @param  array|int  $ids
+	 * @return int
+	 */
+	public static function destroy($ids)
+	{
+		// We'll initialize a count here so we will return the total number of deletes
+		// for the operation. The developers can then check this number as a boolean
+		// type value or get this total count of records deleted for logging, etc.
+		$count = 0;
+
+		$ids = is_array($ids) ? $ids : func_get_args();
+
+		$instance = new static;
+
+		// We will actually pull the models from the database table and call delete on
+		// each of them individually so that their events get fired properly with a
+		// correct set of attributes in case the developers wants to check these.
+		$key = $instance->getKeyName();
+
+		foreach ($instance->whereIn($key, $ids)->get() as $model)
+		{
+			if ($model->delete()) $count++;
+		}
+
+		return $count;
+	}
+
+	/**
+	 * Delete the model from the database.
+	 *
+	 * @return bool|null
+	 * @throws \Exception
+	 */
+	public function delete()
+	{
+		if (is_null($this->primaryKey))
+		{
+			throw new \Exception("No primary key defined on model.");
+		}
+
+		if ($this->exists)
+		{
+			if ($this->fireModelEvent('deleting') === false) return false;
+
+			// Here, we'll touch the owning models, verifying these timestamps get updated
+			// for the models. This will allow any caching to get broken on the parents
+			// by the timestamp. Then we will go ahead and delete the model instance.
+			$this->touchOwners();
+
+			$this->performDeleteOnModel();
+
+			$this->exists = false;
+
+			// Once the model has been deleted, we will fire off the deleted event so that
+			// the developers may hook into post-delete operations. We will then return
+			// a boolean true as the delete is presumably successful on the database.
+			$this->fireModelEvent('deleted', false);
+
+			return true;
+		}
+	}
+
+	/**
+	 * Force a hard delete on a soft deleted model.
+	 *
+	 * This method protects developers from running forceDelete when trait is missing.
+	 *
+	 * @return void
+	 */
+	public function forceDelete()
+	{
+		return $this->delete();
+	}
+
+	/**
+	 * Perform the actual delete query on this model instance.
+	 *
+	 * @return void
+	 */
+	protected function performDeleteOnModel()
+	{
+		$this->newQuery()->where($this->getKeyName(), $this->getKey())->delete();
+	}
+
+	/**
+	 * Register a saving model event with the dispatcher.
+	 *
+	 * @param  \Closure|string  $callback
+	 * @return void
+	 */
+	public static function saving($callback)
+	{
+		static::registerModelEvent('saving', $callback);
+	}
+
+	/**
+	 * Register a saved model event with the dispatcher.
+	 *
+	 * @param  \Closure|string  $callback
+	 * @return void
+	 */
+	public static function saved($callback)
+	{
+		static::registerModelEvent('saved', $callback);
+	}
+
+	/**
+	 * Register an updating model event with the dispatcher.
+	 *
+	 * @param  \Closure|string  $callback
+	 * @return void
+	 */
+	public static function updating($callback)
+	{
+		static::registerModelEvent('updating', $callback);
+	}
+
+	/**
+	 * Register an updated model event with the dispatcher.
+	 *
+	 * @param  \Closure|string  $callback
+	 * @return void
+	 */
+	public static function updated($callback)
+	{
+		static::registerModelEvent('updated', $callback);
+	}
+
+	/**
+	 * Register a creating model event with the dispatcher.
+	 *
+	 * @param  \Closure|string  $callback
+	 * @return void
+	 */
+	public static function creating($callback)
+	{
+		static::registerModelEvent('creating', $callback);
+	}
+
+	/**
+	 * Register a created model event with the dispatcher.
+	 *
+	 * @param  \Closure|string  $callback
+	 * @return void
+	 */
+	public static function created($callback)
+	{
+		static::registerModelEvent('created', $callback);
+	}
+
+	/**
+	 * Register a deleting model event with the dispatcher.
+	 *
+	 * @param  \Closure|string  $callback
+	 * @return void
+	 */
+	public static function deleting($callback)
+	{
+		static::registerModelEvent('deleting', $callback);
+	}
+
+	/**
+	 * Register a deleted model event with the dispatcher.
+	 *
+	 * @param  \Closure|string  $callback
+	 * @return void
+	 */
+	public static function deleted($callback)
+	{
+		static::registerModelEvent('deleted', $callback);
+	}
+
+	/**
+	 * Remove all of the event listeners for the model.
+	 *
+	 * @return void
+	 */
+	public static function flushEventListeners()
+	{
+		if ( ! isset(static::$dispatcher)) return;
+
+		$instance = new static;
+
+		foreach ($instance->getObservableEvents() as $event)
+		{
+			static::$dispatcher->forget("eloquent.{$event}: ".get_called_class());
+		}
+	}
+
+	/**
+	 * Register a model event with the dispatcher.
+	 *
+	 * @param  string  $event
+	 * @param  \Closure|string  $callback
+	 * @return void
+	 */
+	protected static function registerModelEvent($event, $callback)
+	{
+		if (isset(static::$dispatcher))
+		{
+			$name = get_called_class();
+
+			static::$dispatcher->listen("eloquent.{$event}: {$name}", $callback);
+		}
+	}
+
+	/**
+	 * Get the observable event names.
+	 *
+	 * @return array
+	 */
+	public function getObservableEvents()
+	{
+		return array_merge(
+			array(
+				'creating', 'created', 'updating', 'updated',
+				'deleting', 'deleted', 'saving', 'saved',
+				'restoring', 'restored',
+			),
+			$this->observables
+		);
+	}
+
+	/**
+	 * Set the observable event names.
+	 *
+	 * @param  array  $observables
+	 * @return void
+	 */
+	public function setObservableEvents(array $observables)
+	{
+		$this->observables = $observables;
+	}
+
+	/**
+	 * Add an observable event name.
+	 *
+	 * @param  mixed  $observables
+	 * @return void
+	 */
+	public function addObservableEvents($observables)
+	{
+		$observables = is_array($observables) ? $observables : func_get_args();
+
+		$this->observables = array_unique(array_merge($this->observables, $observables));
+	}
+
+	/**
+	 * Remove an observable event name.
+	 *
+	 * @param  mixed  $observables
+	 * @return void
+	 */
+	public function removeObservableEvents($observables)
+	{
+		$observables = is_array($observables) ? $observables : func_get_args();
+
+		$this->observables = array_diff($this->observables, $observables);
+	}
+
+	/**
+	 * Increment a column's value by a given amount.
+	 *
+	 * @param  string  $column
+	 * @param  int     $amount
+	 * @return int
+	 */
+	protected function increment($column, $amount = 1)
+	{
+		return $this->incrementOrDecrement($column, $amount, 'increment');
+	}
+
+	/**
+	 * Decrement a column's value by a given amount.
+	 *
+	 * @param  string  $column
+	 * @param  int     $amount
+	 * @return int
+	 */
+	protected function decrement($column, $amount = 1)
+	{
+		return $this->incrementOrDecrement($column, $amount, 'decrement');
+	}
+
+	/**
+	 * Run the increment or decrement method on the model.
+	 *
+	 * @param  string  $column
+	 * @param  int     $amount
+	 * @param  string  $method
+	 * @return int
+	 */
+	protected function incrementOrDecrement($column, $amount, $method)
+	{
+		$query = $this->newQuery();
+
+		if ( ! $this->exists)
+		{
+			return $query->{$method}($column, $amount);
+		}
+
+		$this->incrementOrDecrementAttributeValue($column, $amount, $method);
+
+		return $query->where($this->getKeyName(), $this->getKey())->{$method}($column, $amount);
+	}
+
+	/**
+	 * Increment the underlying attribute value and sync with original.
+	 *
+	 * @param  string  $column
+	 * @param  int     $amount
+	 * @param  string  $method
+	 * @return void
+	 */
+	protected function incrementOrDecrementAttributeValue($column, $amount, $method)
+	{
+		$this->{$column} = $this->{$column} + ($method == 'increment' ? $amount : $amount * -1);
+
+		$this->syncOriginalAttribute($column);
+	}
+
+	/**
+	 * Update the model in the database.
+	 *
+	 * @param  array  $attributes
+	 * @return bool|int
+	 */
+	public function update(array $attributes = array())
+	{
+		if ( ! $this->exists)
+		{
+			return $this->newQuery()->update($attributes);
+		}
+
+		return $this->fill($attributes)->save();
+	}
+
+	/**
+	 * Save the model and all of its relationships.
+	 *
+	 * @return bool
+	 */
+	public function push()
+	{
+		if ( ! $this->save()) return false;
+
+		// To sync all of the relationships to the database, we will simply spin through
+		// the relationships and save each model via this "push" method, which allows
+		// us to recurse into all of these nested relations for the model instance.
+		foreach ($this->relations as $models)
+		{
+			foreach (Collection::make($models) as $model)
+			{
+				if ( ! $model->push()) return false;
+			}
+		}
+
+		return true;
+	}
+
+	/**
+	 * Save the model to the database.
+	 *
+	 * @param  array  $options
+	 * @return bool
+	 */
+	public function save(array $options = array())
+	{
+		$query = $this->newQueryWithoutScopes();
+
+		// If the "saving" event returns false we'll bail out of the save and return
+		// false, indicating that the save failed. This provides a chance for any
+		// listeners to cancel save operations if validations fail or whatever.
+		if ($this->fireModelEvent('saving') === false)
+		{
+			return false;
+		}
+
+		// If the model already exists in the database we can just update our record
+		// that is already in this database using the current IDs in this "where"
+		// clause to only update this model. Otherwise, we'll just insert them.
+		if ($this->exists)
+		{
+			$saved = $this->performUpdate($query, $options);
+		}
+
+		// If the model is brand new, we'll insert it into our database and set the
+		// ID attribute on the model to the value of the newly inserted row's ID
+		// which is typically an auto-increment value managed by the database.
+		else
+		{
+			$saved = $this->performInsert($query, $options);
+		}
+
+		if ($saved) $this->finishSave($options);
+
+		return $saved;
+	}
+
+	/**
+	 * Finish processing on a successful save operation.
+	 *
+	 * @param  array  $options
+	 * @return void
+	 */
+	protected function finishSave(array $options)
+	{
+		$this->fireModelEvent('saved', false);
+
+		$this->syncOriginal();
+
+		if (array_get($options, 'touch', true)) $this->touchOwners();
+	}
+
+	/**
+	 * Perform a model update operation.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @param  array  $options
+	 * @return bool|null
+	 */
+	protected function performUpdate(Builder $query, array $options = [])
+	{
+		$dirty = $this->getDirty();
+
+		if (count($dirty) > 0)
+		{
+			// If the updating event returns false, we will cancel the update operation so
+			// developers can hook Validation systems into their models and cancel this
+			// operation if the model does not pass validation. Otherwise, we update.
+			if ($this->fireModelEvent('updating') === false)
+			{
+				return false;
+			}
+
+			// First we need to create a fresh query instance and touch the creation and
+			// update timestamp on the model which are maintained by us for developer
+			// convenience. Then we will just continue saving the model instances.
+			if ($this->timestamps && array_get($options, 'timestamps', true))
+			{
+				$this->updateTimestamps();
+			}
+
+			// Once we have run the update operation, we will fire the "updated" event for
+			// this model instance. This will allow developers to hook into these after
+			// models are updated, giving them a chance to do any special processing.
+			$dirty = $this->getDirty();
+
+			if (count($dirty) > 0)
+			{
+				$this->setKeysForSaveQuery($query)->update($dirty);
+
+				$this->fireModelEvent('updated', false);
+			}
+		}
+
+		return true;
+	}
+
+	/**
+	 * Perform a model insert operation.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @param  array  $options
+	 * @return bool
+	 */
+	protected function performInsert(Builder $query, array $options = [])
+	{
+		if ($this->fireModelEvent('creating') === false) return false;
+
+		// First we'll need to create a fresh query instance and touch the creation and
+		// update timestamps on this model, which are maintained by us for developer
+		// convenience. After, we will just continue saving these model instances.
+		if ($this->timestamps && array_get($options, 'timestamps', true))
+		{
+			$this->updateTimestamps();
+		}
+
+		// If the model has an incrementing key, we can use the "insertGetId" method on
+		// the query builder, which will give us back the final inserted ID for this
+		// table from the database. Not all tables have to be incrementing though.
+		$attributes = $this->attributes;
+
+		if ($this->incrementing)
+		{
+			$this->insertAndSetId($query, $attributes);
+		}
+
+		// If the table is not incrementing we'll simply insert this attributes as they
+		// are, as this attributes arrays must contain an "id" column already placed
+		// there by the developer as the manually determined key for these models.
+		else
+		{
+			$query->insert($attributes);
+		}
+
+		// We will go ahead and set the exists property to true, so that it is set when
+		// the created event is fired, just in case the developer tries to update it
+		// during the event. This will allow them to do so and run an update here.
+		$this->exists = true;
+
+		$this->fireModelEvent('created', false);
+
+		return true;
+	}
+
+	/**
+	 * Insert the given attributes and set the ID on the model.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @param  array  $attributes
+	 * @return void
+	 */
+	protected function insertAndSetId(Builder $query, $attributes)
+	{
+		$id = $query->insertGetId($attributes, $keyName = $this->getKeyName());
+
+		$this->setAttribute($keyName, $id);
+	}
+
+	/**
+	 * Touch the owning relations of the model.
+	 *
+	 * @return void
+	 */
+	public function touchOwners()
+	{
+		foreach ($this->touches as $relation)
+		{
+			$this->$relation()->touch();
+
+			if ( ! is_null($this->$relation))
+			{
+				$this->$relation->touchOwners();
+			}
+		}
+	}
+
+	/**
+	 * Determine if the model touches a given relation.
+	 *
+	 * @param  string  $relation
+	 * @return bool
+	 */
+	public function touches($relation)
+	{
+		return in_array($relation, $this->touches);
+	}
+
+	/**
+	 * Fire the given event for the model.
+	 *
+	 * @param  string  $event
+	 * @param  bool    $halt
+	 * @return mixed
+	 */
+	protected function fireModelEvent($event, $halt = true)
+	{
+		if ( ! isset(static::$dispatcher)) return true;
+
+		// We will append the names of the class to the event to distinguish it from
+		// other model events that are fired, allowing us to listen on each model
+		// event set individually instead of catching event for all the models.
+		$event = "eloquent.{$event}: ".get_class($this);
+
+		$method = $halt ? 'until' : 'fire';
+
+		return static::$dispatcher->$method($event, $this);
+	}
+
+	/**
+	 * Set the keys for a save update query.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	protected function setKeysForSaveQuery(Builder $query)
+	{
+		$query->where($this->getKeyName(), '=', $this->getKeyForSaveQuery());
+
+		return $query;
+	}
+
+	/**
+	 * Get the primary key value for a save query.
+	 *
+	 * @return mixed
+	 */
+	protected function getKeyForSaveQuery()
+	{
+		if (isset($this->original[$this->getKeyName()]))
+		{
+			return $this->original[$this->getKeyName()];
+		}
+
+		return $this->getAttribute($this->getKeyName());
+	}
+
+	/**
+	 * Update the model's update timestamp.
+	 *
+	 * @return bool
+	 */
+	public function touch()
+	{
+		$this->updateTimestamps();
+
+		return $this->save();
+	}
+
+	/**
+	 * Update the creation and update timestamps.
+	 *
+	 * @return void
+	 */
+	protected function updateTimestamps()
+	{
+		$time = $this->freshTimestamp();
+
+		if ( ! $this->isDirty(static::UPDATED_AT))
+		{
+			$this->setUpdatedAt($time);
+		}
+
+		if ( ! $this->exists && ! $this->isDirty(static::CREATED_AT))
+		{
+			$this->setCreatedAt($time);
+		}
+	}
+
+	/**
+	 * Set the value of the "created at" attribute.
+	 *
+	 * @param  mixed  $value
+	 * @return void
+	 */
+	public function setCreatedAt($value)
+	{
+		$this->{static::CREATED_AT} = $value;
+	}
+
+	/**
+	 * Set the value of the "updated at" attribute.
+	 *
+	 * @param  mixed  $value
+	 * @return void
+	 */
+	public function setUpdatedAt($value)
+	{
+		$this->{static::UPDATED_AT} = $value;
+	}
+
+	/**
+	 * Get the name of the "created at" column.
+	 *
+	 * @return string
+	 */
+	public function getCreatedAtColumn()
+	{
+		return static::CREATED_AT;
+	}
+
+	/**
+	 * Get the name of the "updated at" column.
+	 *
+	 * @return string
+	 */
+	public function getUpdatedAtColumn()
+	{
+		return static::UPDATED_AT;
+	}
+
+	/**
+	 * Get a fresh timestamp for the model.
+	 *
+	 * @return \Carbon\Carbon
+	 */
+	public function freshTimestamp()
+	{
+		return new Carbon;
+	}
+
+	/**
+	 * Get a fresh timestamp for the model.
+	 *
+	 * @return string
+	 */
+	public function freshTimestampString()
+	{
+		return $this->fromDateTime($this->freshTimestamp());
+	}
+
+	/**
+	 * Get a new query builder for the model's table.
+	 *
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	public function newQuery()
+	{
+		$builder = $this->newQueryWithoutScopes();
+
+		return $this->applyGlobalScopes($builder);
+	}
+
+	/**
+	 * Get a new query instance without a given scope.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\ScopeInterface  $scope
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	public function newQueryWithoutScope($scope)
+	{
+		$this->getGlobalScope($scope)->remove($builder = $this->newQuery(), $this);
+
+		return $builder;
+	}
+
+	/**
+	 * Get a new query builder that doesn't have any global scopes.
+	 *
+	 * @return \Illuminate\Database\Eloquent\Builder|static
+	 */
+	public function newQueryWithoutScopes()
+	{
+		$builder = $this->newEloquentBuilder(
+			$this->newBaseQueryBuilder()
+		);
+
+		// Once we have the query builders, we will set the model instances so the
+		// builder can easily access any information it may need from the model
+		// while it is constructing and executing various queries against it.
+		return $builder->setModel($this)->with($this->with);
+	}
+
+	/**
+	 * Apply all of the global scopes to an Eloquent builder.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $builder
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	public function applyGlobalScopes($builder)
+	{
+		foreach ($this->getGlobalScopes() as $scope)
+		{
+			$scope->apply($builder, $this);
+		}
+
+		return $builder;
+	}
+
+	/**
+	 * Remove all of the global scopes from an Eloquent builder.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $builder
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	public function removeGlobalScopes($builder)
+	{
+		foreach ($this->getGlobalScopes() as $scope)
+		{
+			$scope->remove($builder, $this);
+		}
+
+		return $builder;
+	}
+
+	/**
+	 * Create a new Eloquent query builder for the model.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder $query
+	 * @return \Illuminate\Database\Eloquent\Builder|static
+	 */
+	public function newEloquentBuilder($query)
+	{
+		return new Builder($query);
+	}
+
+	/**
+	 * Get a new query builder instance for the connection.
+	 *
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	protected function newBaseQueryBuilder()
+	{
+		$conn = $this->getConnection();
+
+		$grammar = $conn->getQueryGrammar();
+
+		return new QueryBuilder($conn, $grammar, $conn->getPostProcessor());
+	}
+
+	/**
+	 * Create a new Eloquent Collection instance.
+	 *
+	 * @param  array  $models
+	 * @return \Illuminate\Database\Eloquent\Collection
+	 */
+	public function newCollection(array $models = array())
+	{
+		return new Collection($models);
+	}
+
+	/**
+	 * Create a new pivot model instance.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Model  $parent
+	 * @param  array   $attributes
+	 * @param  string  $table
+	 * @param  bool    $exists
+	 * @return \Illuminate\Database\Eloquent\Relations\Pivot
+	 */
+	public function newPivot(Model $parent, array $attributes, $table, $exists)
+	{
+		return new Pivot($parent, $attributes, $table, $exists);
+	}
+
+	/**
+	 * Get the table associated with the model.
+	 *
+	 * @return string
+	 */
+	public function getTable()
+	{
+		if (isset($this->table)) return $this->table;
+
+		return str_replace('\\', '', snake_case(str_plural(class_basename($this))));
+	}
+
+	/**
+	 * Set the table associated with the model.
+	 *
+	 * @param  string  $table
+	 * @return void
+	 */
+	public function setTable($table)
+	{
+		$this->table = $table;
+	}
+
+	/**
+	 * Get the value of the model's primary key.
+	 *
+	 * @return mixed
+	 */
+	public function getKey()
+	{
+		return $this->getAttribute($this->getKeyName());
+	}
+
+	/**
+	 * Get the primary key for the model.
+	 *
+	 * @return string
+	 */
+	public function getKeyName()
+	{
+		return $this->primaryKey;
+	}
+
+	/**
+	 * Set the primary key for the model.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function setKeyName($key)
+	{
+		$this->primaryKey = $key;
+	}
+
+	/**
+	 * Get the table qualified key name.
+	 *
+	 * @return string
+	 */
+	public function getQualifiedKeyName()
+	{
+		return $this->getTable().'.'.$this->getKeyName();
+	}
+
+	/**
+	 * Determine if the model uses timestamps.
+	 *
+	 * @return bool
+	 */
+	public function usesTimestamps()
+	{
+		return $this->timestamps;
+	}
+
+	/**
+	 * Get the polymorphic relationship columns.
+	 *
+	 * @param  string  $name
+	 * @param  string  $type
+	 * @param  string  $id
+	 * @return array
+	 */
+	protected function getMorphs($name, $type, $id)
+	{
+		$type = $type ?: $name.'_type';
+
+		$id = $id ?: $name.'_id';
+
+		return array($type, $id);
+	}
+
+	/**
+	 * Get the class name for polymorphic relations.
+	 *
+	 * @return string
+	 */
+	public function getMorphClass()
+	{
+		return $this->morphClass ?: get_class($this);
+	}
+
+	/**
+	 * Get the number of models to return per page.
+	 *
+	 * @return int
+	 */
+	public function getPerPage()
+	{
+		return $this->perPage;
+	}
+
+	/**
+	 * Set the number of models to return per page.
+	 *
+	 * @param  int   $perPage
+	 * @return void
+	 */
+	public function setPerPage($perPage)
+	{
+		$this->perPage = $perPage;
+	}
+
+	/**
+	 * Get the default foreign key name for the model.
+	 *
+	 * @return string
+	 */
+	public function getForeignKey()
+	{
+		return snake_case(class_basename($this)).'_id';
+	}
+
+	/**
+	 * Get the hidden attributes for the model.
+	 *
+	 * @return array
+	 */
+	public function getHidden()
+	{
+		return $this->hidden;
+	}
+
+	/**
+	 * Set the hidden attributes for the model.
+	 *
+	 * @param  array  $hidden
+	 * @return void
+	 */
+	public function setHidden(array $hidden)
+	{
+		$this->hidden = $hidden;
+	}
+
+	/**
+	 * Set the visible attributes for the model.
+	 *
+	 * @param  array  $visible
+	 * @return void
+	 */
+	public function setVisible(array $visible)
+	{
+		$this->visible = $visible;
+	}
+
+	/**
+	 * Set the accessors to append to model arrays.
+	 *
+	 * @param  array  $appends
+	 * @return void
+	 */
+	public function setAppends(array $appends)
+	{
+		$this->appends = $appends;
+	}
+
+	/**
+	 * Get the fillable attributes for the model.
+	 *
+	 * @return array
+	 */
+	public function getFillable()
+	{
+		return $this->fillable;
+	}
+
+	/**
+	 * Set the fillable attributes for the model.
+	 *
+	 * @param  array  $fillable
+	 * @return $this
+	 */
+	public function fillable(array $fillable)
+	{
+		$this->fillable = $fillable;
+
+		return $this;
+	}
+
+	/**
+	 * get the guarded attributes for the model.
+	 *
+	 * @return array
+	 */
+	public function getGuarded()
+	{
+		return $this->guarded;
+	}
+
+	/**
+	 * Set the guarded attributes for the model.
+	 *
+	 * @param  array  $guarded
+	 * @return $this
+	 */
+	public function guard(array $guarded)
+	{
+		$this->guarded = $guarded;
+
+		return $this;
+	}
+
+	/**
+	 * Disable all mass assignable restrictions.
+	 *
+	 * @return void
+	 */
+	public static function unguard()
+	{
+		static::$unguarded = true;
+	}
+
+	/**
+	 * Enable the mass assignment restrictions.
+	 *
+	 * @return void
+	 */
+	public static function reguard()
+	{
+		static::$unguarded = false;
+	}
+
+	/**
+	 * Set "unguard" to a given state.
+	 *
+	 * @param  bool  $state
+	 * @return void
+	 */
+	public static function setUnguardState($state)
+	{
+		static::$unguarded = $state;
+	}
+
+	/**
+	 * Determine if the given attribute may be mass assigned.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function isFillable($key)
+	{
+		if (static::$unguarded) return true;
+
+		// If the key is in the "fillable" array, we can of course assume that it's
+		// a fillable attribute. Otherwise, we will check the guarded array when
+		// we need to determine if the attribute is black-listed on the model.
+		if (in_array($key, $this->fillable)) return true;
+
+		if ($this->isGuarded($key)) return false;
+
+		return empty($this->fillable) && ! starts_with($key, '_');
+	}
+
+	/**
+	 * Determine if the given key is guarded.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function isGuarded($key)
+	{
+		return in_array($key, $this->guarded) || $this->guarded == array('*');
+	}
+
+	/**
+	 * Determine if the model is totally guarded.
+	 *
+	 * @return bool
+	 */
+	public function totallyGuarded()
+	{
+		return count($this->fillable) == 0 && $this->guarded == array('*');
+	}
+
+	/**
+	 * Remove the table name from a given key.
+	 *
+	 * @param  string  $key
+	 * @return string
+	 */
+	protected function removeTableFromKey($key)
+	{
+		if ( ! str_contains($key, '.')) return $key;
+
+		return last(explode('.', $key));
+	}
+
+	/**
+	 * Get the relationships that are touched on save.
+	 *
+	 * @return array
+	 */
+	public function getTouchedRelations()
+	{
+		return $this->touches;
+	}
+
+	/**
+	 * Set the relationships that are touched on save.
+	 *
+	 * @param  array  $touches
+	 * @return void
+	 */
+	public function setTouchedRelations(array $touches)
+	{
+		$this->touches = $touches;
+	}
+
+	/**
+	 * Get the value indicating whether the IDs are incrementing.
+	 *
+	 * @return bool
+	 */
+	public function getIncrementing()
+	{
+		return $this->incrementing;
+	}
+
+	/**
+	 * Set whether IDs are incrementing.
+	 *
+	 * @param  bool  $value
+	 * @return void
+	 */
+	public function setIncrementing($value)
+	{
+		$this->incrementing = $value;
+	}
+
+	/**
+	 * Convert the model instance to JSON.
+	 *
+	 * @param  int  $options
+	 * @return string
+	 */
+	public function toJson($options = 0)
+	{
+		return json_encode($this->toArray(), $options);
+	}
+
+	/**
+	 * Convert the object into something JSON serializable.
+	 *
+	 * @return array
+	 */
+	public function jsonSerialize()
+	{
+		return $this->toArray();
+	}
+
+	/**
+	 * Convert the model instance to an array.
+	 *
+	 * @return array
+	 */
+	public function toArray()
+	{
+		$attributes = $this->attributesToArray();
+
+		return array_merge($attributes, $this->relationsToArray());
+	}
+
+	/**
+	 * Convert the model's attributes to an array.
+	 *
+	 * @return array
+	 */
+	public function attributesToArray()
+	{
+		$attributes = $this->getArrayableAttributes();
+
+		// If an attribute is a date, we will cast it to a string after converting it
+		// to a DateTime / Carbon instance. This is so we will get some consistent
+		// formatting while accessing attributes vs. arraying / JSONing a model.
+		foreach ($this->getDates() as $key)
+		{
+			if ( ! isset($attributes[$key])) continue;
+
+			$attributes[$key] = (string) $this->asDateTime($attributes[$key]);
+		}
+
+		// We want to spin through all the mutated attributes for this model and call
+		// the mutator for the attribute. We cache off every mutated attributes so
+		// we don't have to constantly check on attributes that actually change.
+		foreach ($this->getMutatedAttributes() as $key)
+		{
+			if ( ! array_key_exists($key, $attributes)) continue;
+
+			$attributes[$key] = $this->mutateAttributeForArray(
+				$key, $attributes[$key]
+			);
+		}
+
+		// Here we will grab all of the appended, calculated attributes to this model
+		// as these attributes are not really in the attributes array, but are run
+		// when we need to array or JSON the model for convenience to the coder.
+		foreach ($this->getArrayableAppends() as $key)
+		{
+			$attributes[$key] = $this->mutateAttributeForArray($key, null);
+		}
+
+		return $attributes;
+	}
+
+	/**
+	 * Get an attribute array of all arrayable attributes.
+	 *
+	 * @return array
+	 */
+	protected function getArrayableAttributes()
+	{
+		return $this->getArrayableItems($this->attributes);
+	}
+
+	/**
+	 * Get all of the appendable values that are arrayable.
+	 *
+	 * @return array
+	 */
+	protected function getArrayableAppends()
+	{
+		if ( ! count($this->appends)) return [];
+
+		return $this->getArrayableItems(
+			array_combine($this->appends, $this->appends)
+		);
+	}
+
+	/**
+	 * Get the model's relationships in array form.
+	 *
+	 * @return array
+	 */
+	public function relationsToArray()
+	{
+		$attributes = array();
+
+		foreach ($this->getArrayableRelations() as $key => $value)
+		{
+			if (in_array($key, $this->hidden)) continue;
+
+			// If the values implements the Arrayable interface we can just call this
+			// toArray method on the instances which will convert both models and
+			// collections to their proper array form and we'll set the values.
+			if ($value instanceof ArrayableInterface)
+			{
+				$relation = $value->toArray();
+			}
+
+			// If the value is null, we'll still go ahead and set it in this list of
+			// attributes since null is used to represent empty relationships if
+			// if it a has one or belongs to type relationships on the models.
+			elseif (is_null($value))
+			{
+				$relation = $value;
+			}
+
+			// If the relationships snake-casing is enabled, we will snake case this
+			// key so that the relation attribute is snake cased in this returned
+			// array to the developers, making this consistent with attributes.
+			if (static::$snakeAttributes)
+			{
+				$key = snake_case($key);
+			}
+
+			// If the relation value has been set, we will set it on this attributes
+			// list for returning. If it was not arrayable or null, we'll not set
+			// the value on the array because it is some type of invalid value.
+			if (isset($relation) || is_null($value))
+			{
+				$attributes[$key] = $relation;
+			}
+
+			unset($relation);
+		}
+
+		return $attributes;
+	}
+
+	/**
+	 * Get an attribute array of all arrayable relations.
+	 *
+	 * @return array
+	 */
+	protected function getArrayableRelations()
+	{
+		return $this->getArrayableItems($this->relations);
+	}
+
+	/**
+	 * Get an attribute array of all arrayable values.
+	 *
+	 * @param  array  $values
+	 * @return array
+	 */
+	protected function getArrayableItems(array $values)
+	{
+		if (count($this->visible) > 0)
+		{
+			return array_intersect_key($values, array_flip($this->visible));
+		}
+
+		return array_diff_key($values, array_flip($this->hidden));
+	}
+
+	/**
+	 * Get an attribute from the model.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function getAttribute($key)
+	{
+		$inAttributes = array_key_exists($key, $this->attributes);
+
+		// If the key references an attribute, we can just go ahead and return the
+		// plain attribute value from the model. This allows every attribute to
+		// be dynamically accessed through the _get method without accessors.
+		if ($inAttributes || $this->hasGetMutator($key))
+		{
+			return $this->getAttributeValue($key);
+		}
+
+		// If the key already exists in the relationships array, it just means the
+		// relationship has already been loaded, so we'll just return it out of
+		// here because there is no need to query within the relations twice.
+		if (array_key_exists($key, $this->relations))
+		{
+			return $this->relations[$key];
+		}
+
+		// If the "attribute" exists as a method on the model, we will just assume
+		// it is a relationship and will load and return results from the query
+		// and hydrate the relationship's value on the "relationships" array.
+		$camelKey = camel_case($key);
+
+		if (method_exists($this, $camelKey))
+		{
+			return $this->getRelationshipFromMethod($key, $camelKey);
+		}
+	}
+
+	/**
+	 * Get a plain attribute (not a relationship).
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	protected function getAttributeValue($key)
+	{
+		$value = $this->getAttributeFromArray($key);
+
+		// If the attribute has a get mutator, we will call that then return what
+		// it returns as the value, which is useful for transforming values on
+		// retrieval from the model to a form that is more useful for usage.
+		if ($this->hasGetMutator($key))
+		{
+			return $this->mutateAttribute($key, $value);
+		}
+
+		// If the attribute is listed as a date, we will convert it to a DateTime
+		// instance on retrieval, which makes it quite convenient to work with
+		// date fields without having to create a mutator for each property.
+		elseif (in_array($key, $this->getDates()))
+		{
+			if ($value) return $this->asDateTime($value);
+		}
+
+		return $value;
+	}
+
+	/**
+	 * Get an attribute from the $attributes array.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	protected function getAttributeFromArray($key)
+	{
+		if (array_key_exists($key, $this->attributes))
+		{
+			return $this->attributes[$key];
+		}
+	}
+
+	/**
+	 * Get a relationship value from a method.
+	 *
+	 * @param  string  $key
+	 * @param  string  $camelKey
+	 * @return mixed
+	 *
+	 * @throws \LogicException
+	 */
+	protected function getRelationshipFromMethod($key, $camelKey)
+	{
+		$relations = $this->$camelKey();
+
+		if ( ! $relations instanceof Relation)
+		{
+			throw new LogicException('Relationship method must return an object of type '
+				. 'Illuminate\Database\Eloquent\Relations\Relation');
+		}
+
+		return $this->relations[$key] = $relations->getResults();
+	}
+
+	/**
+	 * Determine if a get mutator exists for an attribute.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function hasGetMutator($key)
+	{
+		return method_exists($this, 'get'.studly_case($key).'Attribute');
+	}
+
+	/**
+	 * Get the value of an attribute using its mutator.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return mixed
+	 */
+	protected function mutateAttribute($key, $value)
+	{
+		return $this->{'get'.studly_case($key).'Attribute'}($value);
+	}
+
+	/**
+	 * Get the value of an attribute using its mutator for array conversion.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return mixed
+	 */
+	protected function mutateAttributeForArray($key, $value)
+	{
+		$value = $this->mutateAttribute($key, $value);
+
+		return $value instanceof ArrayableInterface ? $value->toArray() : $value;
+	}
+
+	/**
+	 * Set a given attribute on the model.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function setAttribute($key, $value)
+	{
+		// First we will check for the presence of a mutator for the set operation
+		// which simply lets the developers tweak the attribute as it is set on
+		// the model, such as "json_encoding" an listing of data for storage.
+		if ($this->hasSetMutator($key))
+		{
+			$method = 'set'.studly_case($key).'Attribute';
+
+			return $this->{$method}($value);
+		}
+
+		// If an attribute is listed as a "date", we'll convert it from a DateTime
+		// instance into a form proper for storage on the database tables using
+		// the connection grammar's date format. We will auto set the values.
+		elseif (in_array($key, $this->getDates()) && $value)
+		{
+			$value = $this->fromDateTime($value);
+		}
+
+		$this->attributes[$key] = $value;
+	}
+
+	/**
+	 * Determine if a set mutator exists for an attribute.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function hasSetMutator($key)
+	{
+		return method_exists($this, 'set'.studly_case($key).'Attribute');
+	}
+
+	/**
+	 * Get the attributes that should be converted to dates.
+	 *
+	 * @return array
+	 */
+	public function getDates()
+	{
+		$defaults = array(static::CREATED_AT, static::UPDATED_AT);
+
+		return array_merge($this->dates, $defaults);
+	}
+
+	/**
+	 * Convert a DateTime to a storable string.
+	 *
+	 * @param  \DateTime|int  $value
+	 * @return string
+	 */
+	public function fromDateTime($value)
+	{
+		$format = $this->getDateFormat();
+
+		// If the value is already a DateTime instance, we will just skip the rest of
+		// these checks since they will be a waste of time, and hinder performance
+		// when checking the field. We will just return the DateTime right away.
+		if ($value instanceof DateTime)
+		{
+			//
+		}
+
+		// If the value is totally numeric, we will assume it is a UNIX timestamp and
+		// format the date as such. Once we have the date in DateTime form we will
+		// format it according to the proper format for the database connection.
+		elseif (is_numeric($value))
+		{
+			$value = Carbon::createFromTimestamp($value);
+		}
+
+		// If the value is in simple year, month, day format, we will format it using
+		// that setup. This is for simple "date" fields which do not have hours on
+		// the field. This conveniently picks up those dates and format correct.
+		elseif (preg_match('/^(\d{4})-(\d{2})-(\d{2})$/', $value))
+		{
+			$value = Carbon::createFromFormat('Y-m-d', $value)->startOfDay();
+		}
+
+		// If this value is some other type of string, we'll create the DateTime with
+		// the format used by the database connection. Once we get the instance we
+		// can return back the finally formatted DateTime instances to the devs.
+		else
+		{
+			$value = Carbon::createFromFormat($format, $value);
+		}
+
+		return $value->format($format);
+	}
+
+	/**
+	 * Return a timestamp as DateTime object.
+	 *
+	 * @param  mixed  $value
+	 * @return \Carbon\Carbon
+	 */
+	protected function asDateTime($value)
+	{
+		// If this value is an integer, we will assume it is a UNIX timestamp's value
+		// and format a Carbon object from this timestamp. This allows flexibility
+		// when defining your date fields as they might be UNIX timestamps here.
+		if (is_numeric($value))
+		{
+			return Carbon::createFromTimestamp($value);
+		}
+
+		// If the value is in simply year, month, day format, we will instantiate the
+		// Carbon instances from that format. Again, this provides for simple date
+		// fields on the database, while still supporting Carbonized conversion.
+		elseif (preg_match('/^(\d{4})-(\d{2})-(\d{2})$/', $value))
+		{
+			return Carbon::createFromFormat('Y-m-d', $value)->startOfDay();
+		}
+
+		// Finally, we will just assume this date is in the format used by default on
+		// the database connection and use that format to create the Carbon object
+		// that is returned back out to the developers after we convert it here.
+		elseif ( ! $value instanceof DateTime)
+		{
+			$format = $this->getDateFormat();
+
+			return Carbon::createFromFormat($format, $value);
+		}
+
+		return Carbon::instance($value);
+	}
+
+	/**
+	 * Get the format for database stored dates.
+	 *
+	 * @return string
+	 */
+	protected function getDateFormat()
+	{
+		return $this->getConnection()->getQueryGrammar()->getDateFormat();
+	}
+
+	/**
+	 * Clone the model into a new, non-existing instance.
+	 *
+	 * @param  array  $except
+	 * @return \Illuminate\Database\Eloquent\Model
+	 */
+	public function replicate(array $except = null)
+	{
+		$except = $except ?: [
+			$this->getKeyName(),
+			$this->getCreatedAtColumn(),
+			$this->getUpdatedAtColumn(),
+		];
+
+		$attributes = array_except($this->attributes, $except);
+
+		with($instance = new static)->setRawAttributes($attributes);
+
+		return $instance->setRelations($this->relations);
+	}
+
+	/**
+	 * Get all of the current attributes on the model.
+	 *
+	 * @return array
+	 */
+	public function getAttributes()
+	{
+		return $this->attributes;
+	}
+
+	/**
+	 * Set the array of model attributes. No checking is done.
+	 *
+	 * @param  array  $attributes
+	 * @param  bool   $sync
+	 * @return void
+	 */
+	public function setRawAttributes(array $attributes, $sync = false)
+	{
+		$this->attributes = $attributes;
+
+		if ($sync) $this->syncOriginal();
+	}
+
+	/**
+	 * Get the model's original attribute values.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return array
+	 */
+	public function getOriginal($key = null, $default = null)
+	{
+		return array_get($this->original, $key, $default);
+	}
+
+	/**
+	 * Sync the original attributes with the current.
+	 *
+	 * @return $this
+	 */
+	public function syncOriginal()
+	{
+		$this->original = $this->attributes;
+
+		return $this;
+	}
+
+	/**
+	 * Sync a single original attribute with its current value.
+	 *
+	 * @param  string  $attribute
+	 * @return $this
+	 */
+	public function syncOriginalAttribute($attribute)
+	{
+		$this->original[$attribute] = $this->attributes[$attribute];
+
+		return $this;
+	}
+
+	/**
+	 * Determine if the model or given attribute(s) have been modified.
+	 *
+	 * @param  array|string|null  $attributes
+	 * @return bool
+	 */
+	public function isDirty($attributes = null)
+	{
+		$dirty = $this->getDirty();
+
+		if (is_null($attributes)) return count($dirty) > 0;
+
+		if ( ! is_array($attributes)) $attributes = func_get_args();
+
+		foreach ($attributes as $attribute)
+		{
+			if (array_key_exists($attribute, $dirty)) return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Get the attributes that have been changed since last sync.
+	 *
+	 * @return array
+	 */
+	public function getDirty()
+	{
+		$dirty = array();
+
+		foreach ($this->attributes as $key => $value)
+		{
+			if ( ! array_key_exists($key, $this->original))
+			{
+				$dirty[$key] = $value;
+			}
+			elseif ($value !== $this->original[$key] &&
+                                 ! $this->originalIsNumericallyEquivalent($key))
+			{
+				$dirty[$key] = $value;
+			}
+		}
+
+		return $dirty;
+	}
+
+	/**
+	 * Determine if the new and old values for a given key are numerically equivalent.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	protected function originalIsNumericallyEquivalent($key)
+	{
+		$current = $this->attributes[$key];
+
+		$original = $this->original[$key];
+
+		return is_numeric($current) && is_numeric($original) && strcmp((string) $current, (string) $original) === 0;
+	}
+
+	/**
+	 * Get all the loaded relations for the instance.
+	 *
+	 * @return array
+	 */
+	public function getRelations()
+	{
+		return $this->relations;
+	}
+
+	/**
+	 * Get a specified relationship.
+	 *
+	 * @param  string  $relation
+	 * @return mixed
+	 */
+	public function getRelation($relation)
+	{
+		return $this->relations[$relation];
+	}
+
+	/**
+	 * Set the specific relationship in the model.
+	 *
+	 * @param  string  $relation
+	 * @param  mixed   $value
+	 * @return $this
+	 */
+	public function setRelation($relation, $value)
+	{
+		$this->relations[$relation] = $value;
+
+		return $this;
+	}
+
+	/**
+	 * Set the entire relations array on the model.
+	 *
+	 * @param  array  $relations
+	 * @return $this
+	 */
+	public function setRelations(array $relations)
+	{
+		$this->relations = $relations;
+
+		return $this;
+	}
+
+	/**
+	 * Get the database connection for the model.
+	 *
+	 * @return \Illuminate\Database\Connection
+	 */
+	public function getConnection()
+	{
+		return static::resolveConnection($this->connection);
+	}
+
+	/**
+	 * Get the current connection name for the model.
+	 *
+	 * @return string
+	 */
+	public function getConnectionName()
+	{
+		return $this->connection;
+	}
+
+	/**
+	 * Set the connection associated with the model.
+	 *
+	 * @param  string  $name
+	 * @return $this
+	 */
+	public function setConnection($name)
+	{
+		$this->connection = $name;
+
+		return $this;
+	}
+
+	/**
+	 * Resolve a connection instance.
+	 *
+	 * @param  string  $connection
+	 * @return \Illuminate\Database\Connection
+	 */
+	public static function resolveConnection($connection = null)
+	{
+		return static::$resolver->connection($connection);
+	}
+
+	/**
+	 * Get the connection resolver instance.
+	 *
+	 * @return \Illuminate\Database\ConnectionResolverInterface
+	 */
+	public static function getConnectionResolver()
+	{
+		return static::$resolver;
+	}
+
+	/**
+	 * Set the connection resolver instance.
+	 *
+	 * @param  \Illuminate\Database\ConnectionResolverInterface  $resolver
+	 * @return void
+	 */
+	public static function setConnectionResolver(Resolver $resolver)
+	{
+		static::$resolver = $resolver;
+	}
+
+	/**
+	 * Unset the connection resolver for models.
+	 *
+	 * @return void
+	 */
+	public static function unsetConnectionResolver()
+	{
+		static::$resolver = null;
+	}
+
+	/**
+	 * Get the event dispatcher instance.
+	 *
+	 * @return \Illuminate\Events\Dispatcher
+	 */
+	public static function getEventDispatcher()
+	{
+		return static::$dispatcher;
+	}
+
+	/**
+	 * Set the event dispatcher instance.
+	 *
+	 * @param  \Illuminate\Events\Dispatcher  $dispatcher
+	 * @return void
+	 */
+	public static function setEventDispatcher(Dispatcher $dispatcher)
+	{
+		static::$dispatcher = $dispatcher;
+	}
+
+	/**
+	 * Unset the event dispatcher for models.
+	 *
+	 * @return void
+	 */
+	public static function unsetEventDispatcher()
+	{
+		static::$dispatcher = null;
+	}
+
+	/**
+	 * Get the mutated attributes for a given instance.
+	 *
+	 * @return array
+	 */
+	public function getMutatedAttributes()
+	{
+		$class = get_class($this);
+
+		if (isset(static::$mutatorCache[$class]))
+		{
+			return static::$mutatorCache[$class];
+		}
+
+		return array();
+	}
+
+	/**
+	 * Dynamically retrieve attributes on the model.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function __get($key)
+	{
+		return $this->getAttribute($key);
+	}
+
+	/**
+	 * Dynamically set attributes on the model.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function __set($key, $value)
+	{
+		$this->setAttribute($key, $value);
+	}
+
+	/**
+	 * Determine if the given attribute exists.
+	 *
+	 * @param  mixed  $offset
+	 * @return bool
+	 */
+	public function offsetExists($offset)
+	{
+		return isset($this->$offset);
+	}
+
+	/**
+	 * Get the value for a given offset.
+	 *
+	 * @param  mixed  $offset
+	 * @return mixed
+	 */
+	public function offsetGet($offset)
+	{
+		return $this->$offset;
+	}
+
+	/**
+	 * Set the value for a given offset.
+	 *
+	 * @param  mixed  $offset
+	 * @param  mixed  $value
+	 * @return void
+	 */
+	public function offsetSet($offset, $value)
+	{
+		$this->$offset = $value;
+	}
+
+	/**
+	 * Unset the value for a given offset.
+	 *
+	 * @param  mixed  $offset
+	 * @return void
+	 */
+	public function offsetUnset($offset)
+	{
+		unset($this->$offset);
+	}
+
+	/**
+	 * Determine if an attribute exists on the model.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function __isset($key)
+	{
+		return ((isset($this->attributes[$key]) || isset($this->relations[$key])) ||
+				($this->hasGetMutator($key) && ! is_null($this->getAttributeValue($key))));
+	}
+
+	/**
+	 * Unset an attribute on the model.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function __unset($key)
+	{
+		unset($this->attributes[$key], $this->relations[$key]);
+	}
+
+	/**
+	 * Handle dynamic method calls into the method.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 */
+	public function __call($method, $parameters)
+	{
+		if (in_array($method, array('increment', 'decrement')))
+		{
+			return call_user_func_array(array($this, $method), $parameters);
+		}
+
+		$query = $this->newQuery();
+
+		return call_user_func_array(array($query, $method), $parameters);
+	}
+
+	/**
+	 * Handle dynamic static method calls into the method.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 */
+	public static function __callStatic($method, $parameters)
+	{
+		$instance = new static;
+
+		return call_user_func_array(array($instance, $method), $parameters);
+	}
+
+	/**
+	 * Convert the model to its string representation.
+	 *
+	 * @return string
+	 */
+	public function __toString()
+	{
+		return $this->toJson();
+	}
+
+	/**
+	 * When a model is being unserialized, check if it needs to be booted.
+	 *
+	 * @return void
+	 */
+	public function __wakeup()
+	{
+		$this->bootIfNotBooted();
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/ModelNotFoundException.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/ModelNotFoundException.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/ModelNotFoundException.php
new file mode 100755
index 0000000..db98c25
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/ModelNotFoundException.php
@@ -0,0 +1,37 @@
+<?php namespace Illuminate\Database\Eloquent;
+
+class ModelNotFoundException extends \RuntimeException {
+
+	/**
+	 * Name of the affected Eloquent model.
+	 *
+	 * @var string
+	 */
+	protected $model;
+
+	/**
+	 * Set the affected Eloquent model.
+	 *
+	 * @param  string   $model
+	 * @return $this
+	 */
+	public function setModel($model)
+	{
+		$this->model = $model;
+
+		$this->message = "No query results for model [{$model}].";
+
+		return $this;
+	}
+
+	/**
+	 * Get the affected Eloquent model.
+	 *
+	 * @return string
+	 */
+	public function getModel()
+	{
+		return $this->model;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php
new file mode 100755
index 0000000..8cd1337
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php
@@ -0,0 +1,275 @@
+<?php namespace Illuminate\Database\Eloquent\Relations;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Query\Expression;
+use Illuminate\Database\Eloquent\Collection;
+
+class BelongsTo extends Relation {
+
+	/**
+	 * The foreign key of the parent model.
+	 *
+	 * @var string
+	 */
+	protected $foreignKey;
+
+	/**
+	 * The associated key on the parent model.
+	 *
+	 * @var string
+	 */
+	protected $otherKey;
+
+	/**
+	 * The name of the relationship.
+	 *
+	 * @var string
+	 */
+	protected $relation;
+
+	/**
+	 * Create a new belongs to relationship instance.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @param  \Illuminate\Database\Eloquent\Model  $parent
+	 * @param  string  $foreignKey
+	 * @param  string  $otherKey
+	 * @param  string  $relation
+	 * @return void
+	 */
+	public function __construct(Builder $query, Model $parent, $foreignKey, $otherKey, $relation)
+	{
+		$this->otherKey = $otherKey;
+		$this->relation = $relation;
+		$this->foreignKey = $foreignKey;
+
+		parent::__construct($query, $parent);
+	}
+
+	/**
+	 * Get the results of the relationship.
+	 *
+	 * @return mixed
+	 */
+	public function getResults()
+	{
+		return $this->query->first();
+	}
+
+	/**
+	 * Set the base constraints on the relation query.
+	 *
+	 * @return void
+	 */
+	public function addConstraints()
+	{
+		if (static::$constraints)
+		{
+			// For belongs to relationships, which are essentially the inverse of has one
+			// or has many relationships, we need to actually query on the primary key
+			// of the related models matching on the foreign key that's on a parent.
+			$table = $this->related->getTable();
+
+			$this->query->where($table.'.'.$this->otherKey, '=', $this->parent->{$this->foreignKey});
+		}
+	}
+
+	/**
+	 * Add the constraints for a relationship count query.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $query
+	 * @param  \Illuminate\Database\Eloquent\Builder  $parent
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	public function getRelationCountQuery(Builder $query, Builder $parent)
+	{
+		$query->select(new Expression('count(*)'));
+
+		$otherKey = $this->wrap($query->getModel()->getTable().'.'.$this->otherKey);
+
+		return $query->where($this->getQualifiedForeignKey(), '=', new Expression($otherKey));
+	}
+
+	/**
+	 * Set the constraints for an eager load of the relation.
+	 *
+	 * @param  array  $models
+	 * @return void
+	 */
+	public function addEagerConstraints(array $models)
+	{
+		// We'll grab the primary key name of the related models since it could be set to
+		// a non-standard name and not "id". We will then construct the constraint for
+		// our eagerly loading query so it returns the proper models from execution.
+		$key = $this->related->getTable().'.'.$this->otherKey;
+
+		$this->query->whereIn($key, $this->getEagerModelKeys($models));
+	}
+
+	/**
+	 * Gather the keys from an array of related models.
+	 *
+	 * @param  array  $models
+	 * @return array
+	 */
+	protected function getEagerModelKeys(array $models)
+	{
+		$keys = array();
+
+		// First we need to gather all of the keys from the parent models so we know what
+		// to query for via the eager loading query. We will add them to an array then
+		// execute a "where in" statement to gather up all of those related records.
+		foreach ($models as $model)
+		{
+			if ( ! is_null($value = $model->{$this->foreignKey}))
+			{
+				$keys[] = $value;
+			}
+		}
+
+		// If there are no keys that were not null we will just return an array with 0 in
+		// it so the query doesn't fail, but will not return any results, which should
+		// be what this developer is expecting in a case where this happens to them.
+		if (count($keys) == 0)
+		{
+			return array(0);
+		}
+
+		return array_values(array_unique($keys));
+	}
+
+	/**
+	 * Initialize the relation on a set of models.
+	 *
+	 * @param  array   $models
+	 * @param  string  $relation
+	 * @return array
+	 */
+	public function initRelation(array $models, $relation)
+	{
+		foreach ($models as $model)
+		{
+			$model->setRelation($relation, null);
+		}
+
+		return $models;
+	}
+
+	/**
+	 * Match the eagerly loaded results to their parents.
+	 *
+	 * @param  array   $models
+	 * @param  \Illuminate\Database\Eloquent\Collection  $results
+	 * @param  string  $relation
+	 * @return array
+	 */
+	public function match(array $models, Collection $results, $relation)
+	{
+		$foreign = $this->foreignKey;
+
+		$other = $this->otherKey;
+
+		// First we will get to build a dictionary of the child models by their primary
+		// key of the relationship, then we can easily match the children back onto
+		// the parents using that dictionary and the primary key of the children.
+		$dictionary = array();
+
+		foreach ($results as $result)
+		{
+			$dictionary[$result->getAttribute($other)] = $result;
+		}
+
+		// Once we have the dictionary constructed, we can loop through all the parents
+		// and match back onto their children using these keys of the dictionary and
+		// the primary key of the children to map them onto the correct instances.
+		foreach ($models as $model)
+		{
+			if (isset($dictionary[$model->$foreign]))
+			{
+				$model->setRelation($relation, $dictionary[$model->$foreign]);
+			}
+		}
+
+		return $models;
+	}
+
+	/**
+	 * Associate the model instance to the given parent.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Model  $model
+	 * @return \Illuminate\Database\Eloquent\Model
+	 */
+	public function associate(Model $model)
+	{
+		$this->parent->setAttribute($this->foreignKey, $model->getAttribute($this->otherKey));
+
+		return $this->parent->setRelation($this->relation, $model);
+	}
+
+	/**
+	 * Dissociate previously associated model from the given parent.
+	 *
+	 * @return \Illuminate\Database\Eloquent\Model
+	 */
+	public function dissociate()
+	{
+		$this->parent->setAttribute($this->foreignKey, null);
+
+		return $this->parent->setRelation($this->relation, null);
+	}
+
+	/**
+	 * Update the parent model on the relationship.
+	 *
+	 * @param  array  $attributes
+	 * @return mixed
+	 */
+	public function update(array $attributes)
+	{
+		$instance = $this->getResults();
+
+		return $instance->fill($attributes)->save();
+	}
+
+	/**
+	 * Get the foreign key of the relationship.
+	 *
+	 * @return string
+	 */
+	public function getForeignKey()
+	{
+		return $this->foreignKey;
+	}
+
+	/**
+	 * Get the fully qualified foreign key of the relationship.
+	 *
+	 * @return string
+	 */
+	public function getQualifiedForeignKey()
+	{
+		return $this->parent->getTable().'.'.$this->foreignKey;
+	}
+
+	/**
+	 * Get the associated key of the relationship.
+	 *
+	 * @return string
+	 */
+	public function getOtherKey()
+	{
+		return $this->otherKey;
+	}
+
+	/**
+	 * Get the fully qualified associated key of the relationship.
+	 *
+	 * @return string
+	 */
+	public function getQualifiedOtherKeyName()
+	{
+		return $this->related->getTable().'.'.$this->otherKey;
+	}
+
+}


[04/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/Validator.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Validator.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Validator.php
new file mode 100755
index 0000000..e070133
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Validator.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\Validation\Factory
+ */
+class Validator extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'validator'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Facades/View.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/View.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/View.php
new file mode 100755
index 0000000..7489155
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/View.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Support\Facades;
+
+/**
+ * @see \Illuminate\View\Factory
+ */
+class View extends Facade {
+
+	/**
+	 * Get the registered name of the component.
+	 *
+	 * @return string
+	 */
+	protected static function getFacadeAccessor() { return 'view'; }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Fluent.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Fluent.php b/vendor/laravel/framework/src/Illuminate/Support/Fluent.php
new file mode 100755
index 0000000..7325379
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Fluent.php
@@ -0,0 +1,193 @@
+<?php namespace Illuminate\Support;
+
+use ArrayAccess;
+use JsonSerializable;
+use Illuminate\Support\Contracts\JsonableInterface;
+use Illuminate\Support\Contracts\ArrayableInterface;
+
+class Fluent implements ArrayAccess, ArrayableInterface, JsonableInterface, JsonSerializable {
+
+	/**
+	 * All of the attributes set on the container.
+	 *
+	 * @var array
+	 */
+	protected $attributes = array();
+
+	/**
+	 * Create a new fluent container instance.
+	 *
+	 * @param  array|object	$attributes
+	 * @return void
+	 */
+	public function __construct($attributes = array())
+	{
+		foreach ($attributes as $key => $value)
+		{
+			$this->attributes[$key] = $value;
+		}
+	}
+
+	/**
+	 * Get an attribute from the container.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return mixed
+	 */
+	public function get($key, $default = null)
+	{
+		if (array_key_exists($key, $this->attributes))
+		{
+			return $this->attributes[$key];
+		}
+
+		return value($default);
+	}
+
+	/**
+	 * Get the attributes from the container.
+	 *
+	 * @return array
+	 */
+	public function getAttributes()
+	{
+		return $this->attributes;
+	}
+
+	/**
+	 * Convert the Fluent instance to an array.
+	 *
+	 * @return array
+	 */
+	public function toArray()
+	{
+		return $this->attributes;
+	}
+
+	/**
+	 * Convert the object into something JSON serializable.
+	 *
+	 * @return array
+	 */
+	public function jsonSerialize()
+	{
+		return $this->toArray();
+	}
+
+	/**
+	 * Convert the Fluent instance to JSON.
+	 *
+	 * @param  int  $options
+	 * @return string
+	 */
+	public function toJson($options = 0)
+	{
+		return json_encode($this->toArray(), $options);
+	}
+
+	/**
+	 * Determine if the given offset exists.
+	 *
+	 * @param  string  $offset
+	 * @return bool
+	 */
+	public function offsetExists($offset)
+	{
+		return isset($this->{$offset});
+	}
+
+	/**
+	 * Get the value for a given offset.
+	 *
+	 * @param  string  $offset
+	 * @return mixed
+	 */
+	public function offsetGet($offset)
+	{
+		return $this->{$offset};
+	}
+
+	/**
+	 * Set the value at the given offset.
+	 *
+	 * @param  string  $offset
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function offsetSet($offset, $value)
+	{
+		$this->{$offset} = $value;
+	}
+
+	/**
+	 * Unset the value at the given offset.
+	 *
+	 * @param  string  $offset
+	 * @return void
+	 */
+	public function offsetUnset($offset)
+	{
+		unset($this->{$offset});
+	}
+
+	/**
+	 * Handle dynamic calls to the container to set attributes.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return $this
+	 */
+	public function __call($method, $parameters)
+	{
+		$this->attributes[$method] = count($parameters) > 0 ? $parameters[0] : true;
+
+		return $this;
+	}
+
+	/**
+	 * Dynamically retrieve the value of an attribute.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function __get($key)
+	{
+		return $this->get($key);
+	}
+
+	/**
+	 * Dynamically set the value of an attribute.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function __set($key, $value)
+	{
+		$this->attributes[$key] = $value;
+	}
+
+	/**
+	 * Dynamically check if an attribute is set.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function __isset($key)
+	{
+		return isset($this->attributes[$key]);
+	}
+
+	/**
+	 * Dynamically unset an attribute.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function __unset($key)
+	{
+		unset($this->attributes[$key]);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Manager.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Manager.php b/vendor/laravel/framework/src/Illuminate/Support/Manager.php
new file mode 100755
index 0000000..d0493c5
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Manager.php
@@ -0,0 +1,141 @@
+<?php namespace Illuminate\Support;
+
+use Closure;
+
+abstract class Manager {
+
+	/**
+	 * The application instance.
+	 *
+	 * @var \Illuminate\Foundation\Application
+	 */
+	protected $app;
+
+	/**
+	 * The registered custom driver creators.
+	 *
+	 * @var array
+	 */
+	protected $customCreators = array();
+
+	/**
+	 * The array of created "drivers".
+	 *
+	 * @var array
+	 */
+	protected $drivers = array();
+
+	/**
+	 * Create a new manager instance.
+	 *
+	 * @param  \Illuminate\Foundation\Application  $app
+	 * @return void
+	 */
+	public function __construct($app)
+	{
+		$this->app = $app;
+	}
+
+	/**
+	 * Get the default driver name.
+	 *
+	 * @return string
+	 */
+	abstract public function getDefaultDriver();
+
+	/**
+	 * Get a driver instance.
+	 *
+	 * @param  string  $driver
+	 * @return mixed
+	 */
+	public function driver($driver = null)
+	{
+		$driver = $driver ?: $this->getDefaultDriver();
+
+		// If the given driver has not been created before, we will create the instances
+		// here and cache it so we can return it next time very quickly. If there is
+		// already a driver created by this name, we'll just return that instance.
+		if ( ! isset($this->drivers[$driver]))
+		{
+			$this->drivers[$driver] = $this->createDriver($driver);
+		}
+
+		return $this->drivers[$driver];
+	}
+
+	/**
+	 * Create a new driver instance.
+	 *
+	 * @param  string  $driver
+	 * @return mixed
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	protected function createDriver($driver)
+	{
+		$method = 'create'.ucfirst($driver).'Driver';
+
+		// We'll check to see if a creator method exists for the given driver. If not we
+		// will check for a custom driver creator, which allows developers to create
+		// drivers using their own customized driver creator Closure to create it.
+		if (isset($this->customCreators[$driver]))
+		{
+			return $this->callCustomCreator($driver);
+		}
+		elseif (method_exists($this, $method))
+		{
+			return $this->$method();
+		}
+
+		throw new \InvalidArgumentException("Driver [$driver] not supported.");
+	}
+
+	/**
+	 * Call a custom driver creator.
+	 *
+	 * @param  string  $driver
+	 * @return mixed
+	 */
+	protected function callCustomCreator($driver)
+	{
+		return $this->customCreators[$driver]($this->app);
+	}
+
+	/**
+	 * Register a custom driver creator Closure.
+	 *
+	 * @param  string    $driver
+	 * @param  \Closure  $callback
+	 * @return $this
+	 */
+	public function extend($driver, Closure $callback)
+	{
+		$this->customCreators[$driver] = $callback;
+
+		return $this;
+	}
+
+	/**
+	 * Get all of the created "drivers".
+	 *
+	 * @return array
+	 */
+	public function getDrivers()
+	{
+		return $this->drivers;
+	}
+
+	/**
+	 * Dynamically call the default driver instance.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 */
+	public function __call($method, $parameters)
+	{
+		return call_user_func_array(array($this->driver(), $method), $parameters);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/MessageBag.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/MessageBag.php b/vendor/laravel/framework/src/Illuminate/Support/MessageBag.php
new file mode 100755
index 0000000..fa9c716
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/MessageBag.php
@@ -0,0 +1,305 @@
+<?php namespace Illuminate\Support;
+
+use Countable;
+use JsonSerializable;
+use Illuminate\Support\Contracts\JsonableInterface;
+use Illuminate\Support\Contracts\ArrayableInterface;
+use Illuminate\Support\Contracts\MessageProviderInterface;
+
+class MessageBag implements ArrayableInterface, Countable, JsonableInterface, MessageProviderInterface, JsonSerializable {
+
+	/**
+	 * All of the registered messages.
+	 *
+	 * @var array
+	 */
+	protected $messages = array();
+
+	/**
+	 * Default format for message output.
+	 *
+	 * @var string
+	 */
+	protected $format = ':message';
+
+	/**
+	 * Create a new message bag instance.
+	 *
+	 * @param  array  $messages
+	 * @return void
+	 */
+	public function __construct(array $messages = array())
+	{
+		foreach ($messages as $key => $value)
+		{
+			$this->messages[$key] = (array) $value;
+		}
+	}
+
+	/**
+	 * Add a message to the bag.
+	 *
+	 * @param  string  $key
+	 * @param  string  $message
+	 * @return $this
+	 */
+	public function add($key, $message)
+	{
+		if ($this->isUnique($key, $message))
+		{
+			$this->messages[$key][] = $message;
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Merge a new array of messages into the bag.
+	 *
+	 * @param  \Illuminate\Support\Contracts\MessageProviderInterface|array  $messages
+	 * @return $this
+	 */
+	public function merge($messages)
+	{
+		if ($messages instanceof MessageProviderInterface)
+		{
+			$messages = $messages->getMessageBag()->getMessages();
+		}
+
+		$this->messages = array_merge_recursive($this->messages, $messages);
+
+		return $this;
+	}
+
+	/**
+	 * Determine if a key and message combination already exists.
+	 *
+	 * @param  string  $key
+	 * @param  string  $message
+	 * @return bool
+	 */
+	protected function isUnique($key, $message)
+	{
+		$messages = (array) $this->messages;
+
+		return ! isset($messages[$key]) || ! in_array($message, $messages[$key]);
+	}
+
+	/**
+	 * Determine if messages exist for a given key.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function has($key = null)
+	{
+		return $this->first($key) !== '';
+	}
+
+	/**
+	 * Get the first message from the bag for a given key.
+	 *
+	 * @param  string  $key
+	 * @param  string  $format
+	 * @return string
+	 */
+	public function first($key = null, $format = null)
+	{
+		$messages = is_null($key) ? $this->all($format) : $this->get($key, $format);
+
+		return (count($messages) > 0) ? $messages[0] : '';
+	}
+
+	/**
+	 * Get all of the messages from the bag for a given key.
+	 *
+	 * @param  string  $key
+	 * @param  string  $format
+	 * @return array
+	 */
+	public function get($key, $format = null)
+	{
+		$format = $this->checkFormat($format);
+
+		// If the message exists in the container, we will transform it and return
+		// the message. Otherwise, we'll return an empty array since the entire
+		// methods is to return back an array of messages in the first place.
+		if (array_key_exists($key, $this->messages))
+		{
+			return $this->transform($this->messages[$key], $format, $key);
+		}
+
+		return array();
+	}
+
+	/**
+	 * Get all of the messages for every key in the bag.
+	 *
+	 * @param  string  $format
+	 * @return array
+	 */
+	public function all($format = null)
+	{
+		$format = $this->checkFormat($format);
+
+		$all = array();
+
+		foreach ($this->messages as $key => $messages)
+		{
+			$all = array_merge($all, $this->transform($messages, $format, $key));
+		}
+
+		return $all;
+	}
+
+	/**
+	 * Format an array of messages.
+	 *
+	 * @param  array   $messages
+	 * @param  string  $format
+	 * @param  string  $messageKey
+	 * @return array
+	 */
+	protected function transform($messages, $format, $messageKey)
+	{
+		$messages = (array) $messages;
+
+		// We will simply spin through the given messages and transform each one
+		// replacing the :message place holder with the real message allowing
+		// the messages to be easily formatted to each developer's desires.
+		foreach ($messages as &$message)
+		{
+			$replace = array(':message', ':key');
+
+			$message = str_replace($replace, array($message, $messageKey), $format);
+		}
+
+		return $messages;
+	}
+
+	/**
+	 * Get the appropriate format based on the given format.
+	 *
+	 * @param  string  $format
+	 * @return string
+	 */
+	protected function checkFormat($format)
+	{
+		return ($format === null) ? $this->format : $format;
+	}
+
+	/**
+	 * Get the raw messages in the container.
+	 *
+	 * @return array
+	 */
+	public function getMessages()
+	{
+		return $this->messages;
+	}
+
+	/**
+	 * Get the messages for the instance.
+	 *
+	 * @return \Illuminate\Support\MessageBag
+	 */
+	public function getMessageBag()
+	{
+		return $this;
+	}
+
+	/**
+	 * Get the default message format.
+	 *
+	 * @return string
+	 */
+	public function getFormat()
+	{
+		return $this->format;
+	}
+
+	/**
+	 * Set the default message format.
+	 *
+	 * @param  string  $format
+	 * @return \Illuminate\Support\MessageBag
+	 */
+	public function setFormat($format = ':message')
+	{
+		$this->format = $format;
+
+		return $this;
+	}
+
+	/**
+	 * Determine if the message bag has any messages.
+	 *
+	 * @return bool
+	 */
+	public function isEmpty()
+	{
+		return ! $this->any();
+	}
+
+	/**
+	 * Determine if the message bag has any messages.
+	 *
+	 * @return bool
+	 */
+	public function any()
+	{
+		return $this->count() > 0;
+	}
+
+	/**
+	 * Get the number of messages in the container.
+	 *
+	 * @return int
+	 */
+	public function count()
+	{
+		return count($this->messages, COUNT_RECURSIVE) - count($this->messages);
+	}
+
+	/**
+	 * Get the instance as an array.
+	 *
+	 * @return array
+	 */
+	public function toArray()
+	{
+		return $this->getMessages();
+	}
+
+	/**
+	 * Convert the object into something JSON serializable.
+	 *
+	 * @return array
+	 */
+	public function jsonSerialize()
+	{
+		return $this->toArray();
+	}
+
+	/**
+	 * Convert the object to its JSON representation.
+	 *
+	 * @param  int  $options
+	 * @return string
+	 */
+	public function toJson($options = 0)
+	{
+		return json_encode($this->toArray(), $options);
+	}
+
+	/**
+	 * Convert the message bag to its string representation.
+	 *
+	 * @return string
+	 */
+	public function __toString()
+	{
+		return $this->toJson();
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php b/vendor/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php
new file mode 100755
index 0000000..6c3366e
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php
@@ -0,0 +1,109 @@
+<?php namespace Illuminate\Support;
+
+class NamespacedItemResolver {
+
+	/**
+	 * A cache of the parsed items.
+	 *
+	 * @var array
+	 */
+	protected $parsed = array();
+
+	/**
+	 * Parse a key into namespace, group, and item.
+	 *
+	 * @param  string  $key
+	 * @return array
+	 */
+	public function parseKey($key)
+	{
+		// If we've already parsed the given key, we'll return the cached version we
+		// already have, as this will save us some processing. We cache off every
+		// key we parse so we can quickly return it on all subsequent requests.
+		if (isset($this->parsed[$key]))
+		{
+			return $this->parsed[$key];
+		}
+
+		// If the key does not contain a double colon, it means the key is not in a
+		// namespace, and is just a regular configuration item. Namespaces are a
+		// tool for organizing configuration items for things such as modules.
+		if (strpos($key, '::') === false)
+		{
+			$segments = explode('.', $key);
+
+			$parsed = $this->parseBasicSegments($segments);
+		}
+		else
+		{
+			$parsed = $this->parseNamespacedSegments($key);
+		}
+
+		// Once we have the parsed array of this key's elements, such as its groups
+		// and namespace, we will cache each array inside a simple list that has
+		// the key and the parsed array for quick look-ups for later requests.
+		return $this->parsed[$key] = $parsed;
+	}
+
+	/**
+	 * Parse an array of basic segments.
+	 *
+	 * @param  array  $segments
+	 * @return array
+	 */
+	protected function parseBasicSegments(array $segments)
+	{
+		// The first segment in a basic array will always be the group, so we can go
+		// ahead and grab that segment. If there is only one total segment we are
+		// just pulling an entire group out of the array and not a single item.
+		$group = $segments[0];
+
+		if (count($segments) == 1)
+		{
+			return array(null, $group, null);
+		}
+
+		// If there is more than one segment in this group, it means we are pulling
+		// a specific item out of a groups and will need to return the item name
+		// as well as the group so we know which item to pull from the arrays.
+		else
+		{
+			$item = implode('.', array_slice($segments, 1));
+
+			return array(null, $group, $item);
+		}
+	}
+
+	/**
+	 * Parse an array of namespaced segments.
+	 *
+	 * @param  string  $key
+	 * @return array
+	 */
+	protected function parseNamespacedSegments($key)
+	{
+		list($namespace, $item) = explode('::', $key);
+
+		// First we'll just explode the first segment to get the namespace and group
+		// since the item should be in the remaining segments. Once we have these
+		// two pieces of data we can proceed with parsing out the item's value.
+		$itemSegments = explode('.', $item);
+
+		$groupAndItem = array_slice($this->parseBasicSegments($itemSegments), 1);
+
+		return array_merge(array($namespace), $groupAndItem);
+	}
+
+	/**
+	 * Set the parsed value of a key.
+	 *
+	 * @param  string  $key
+	 * @param  array   $parsed
+	 * @return void
+	 */
+	public function setParsedKey($key, $parsed)
+	{
+		$this->parsed[$key] = $parsed;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php b/vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php
new file mode 100755
index 0000000..19174d2
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php
@@ -0,0 +1,269 @@
+<?php namespace Illuminate\Support;
+
+class Pluralizer {
+
+	/**
+	 * Plural word form rules.
+	 *
+	 * @var array
+	 */
+	public static $plural = array(
+		'/(quiz)$/i' => "$1zes",
+		'/^(ox)$/i' => "$1en",
+		'/([m|l])ouse$/i' => "$1ice",
+		'/(matr|vert|ind)ix$|ex$/i' => "$1ices",
+		'/(stoma|epo|monar|matriar|patriar|oligar|eunu)ch$/i' => "$1chs",
+		'/(x|ch|ss|sh)$/i' => "$1es",
+		'/([^aeiouy]|qu)y$/i' => "$1ies",
+		'/(hive)$/i' => "$1s",
+		'/(?:([^f])fe|([lr])f)$/i' => "$1$2ves",
+		'/(shea|lea|loa|thie)f$/i' => "$1ves",
+		'/sis$/i' => "ses",
+		'/([ti])um$/i' => "$1a",
+		'/(torped|embarg|tomat|potat|ech|her|vet)o$/i' => "$1oes",
+		'/(bu)s$/i' => "$1ses",
+		'/(alias)$/i' => "$1es",
+		'/(fung)us$/i' => "$1i",
+		'/(ax|test)is$/i' => "$1es",
+		'/(us)$/i' => "$1es",
+		'/s$/i' => "s",
+		'/$/' => "s",
+	);
+
+	/**
+	 * Singular word form rules.
+	 *
+	 * @var array
+	 */
+	public static $singular = array(
+		'/(quiz)zes$/i' => "$1",
+		'/(matr)ices$/i' => "$1ix",
+		'/(vert|vort|ind)ices$/i' => "$1ex",
+		'/^(ox)en$/i' => "$1",
+		'/(alias)es$/i' => "$1",
+		'/(octop|vir|fung)i$/i' => "$1us",
+		'/(cris|ax|test)es$/i' => "$1is",
+		'/(shoe)s$/i' => "$1",
+		'/(o)es$/i' => "$1",
+		'/(bus)es$/i' => "$1",
+		'/([m|l])ice$/i' => "$1ouse",
+		'/(x|ch|ss|sh)es$/i' => "$1",
+		'/(m)ovies$/i' => "$1ovie",
+		'/(s)eries$/i' => "$1eries",
+		'/([^aeiouy]|qu)ies$/i' => "$1y",
+		'/([lr])ves$/i' => "$1f",
+		'/(tive)s$/i' => "$1",
+		'/(hive)s$/i' => "$1",
+		'/(li|wi|kni)ves$/i' => "$1fe",
+		'/(shea|loa|lea|thie)ves$/i' => "$1f",
+		'/(^analy)ses$/i' => "$1sis",
+		'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i' => "$1$2sis",
+		'/([ti])a$/i' => "$1um",
+		'/(n)ews$/i' => "$1ews",
+		'/(h|bl)ouses$/i' => "$1ouse",
+		'/(corpse)s$/i' => "$1",
+		'/(gallows|headquarters)$/i' => "$1",
+		'/(us)es$/i' => "$1",
+		'/(us|ss)$/i' => "$1",
+		'/s$/i' => "",
+	);
+
+	/**
+	 * Irregular word forms.
+	 *
+	 * @var array
+	 */
+	public static $irregular = array(
+		'child' => 'children',
+		'corpus' => 'corpora',
+		'criterion' => 'criteria',
+		'foot' => 'feet',
+		'freshman' => 'freshmen',
+		'goose' => 'geese',
+		'genus' => 'genera',
+		'human' => 'humans',
+		'man' => 'men',
+		'move' => 'moves',
+		'nucleus' => 'nuclei',
+		'ovum' => 'ova',
+		'person' => 'people',
+		'phenomenon' => 'phenomena',
+		'radius' => 'radii',
+		'sex' => 'sexes',
+		'stimulus' => 'stimuli',
+		'syllabus' => 'syllabi',
+		'tax' => 'taxes',
+		'tech' => 'techs',
+		'tooth' => 'teeth',
+		'viscus' => 'viscera',
+	);
+
+	/**
+	 * Uncountable word forms.
+	 *
+	 * @var array
+	 */
+	public static $uncountable = array(
+		'audio',
+		'bison',
+		'chassis',
+		'compensation',
+		'coreopsis',
+		'data',
+		'deer',
+		'education',
+		'equipment',
+		'fish',
+		'gold',
+		'information',
+		'money',
+		'moose',
+		'offspring',
+		'plankton',
+		'police',
+		'rice',
+		'series',
+		'sheep',
+		'species',
+		'swine',
+		'traffic',
+	);
+
+	/**
+	 * The cached copies of the plural inflections.
+	 *
+	 * @var array
+	 */
+	protected static $pluralCache = array();
+
+	/**
+	 * The cached copies of the singular inflections.
+	 *
+	 * @var array
+	 */
+	protected static $singularCache = array();
+
+	/**
+	 * Get the singular form of the given word.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	public static function singular($value)
+	{
+		if (isset(static::$singularCache[$value]))
+		{
+			return static::$singularCache[$value];
+		}
+
+		$result = static::inflect($value, static::$singular, static::$irregular);
+
+		return static::$singularCache[$value] = $result ?: $value;
+	}
+
+	/**
+	 * Get the plural form of the given word.
+	 *
+	 * @param  string  $value
+	 * @param  int     $count
+	 * @return string
+	 */
+	public static function plural($value, $count = 2)
+	{
+		if ($count == 1) return $value;
+
+		if (in_array($value, static::$irregular)) return $value;
+
+		// First we'll check the cache of inflected values. We cache each word that
+		// is inflected so we don't have to spin through the regular expressions
+		// on each subsequent method calls for this word by the app developer.
+		if (isset(static::$pluralCache[$value]))
+		{
+			return static::$pluralCache[$value];
+		}
+
+		$irregular = array_flip(static::$irregular);
+
+		// When doing the singular to plural transformation, we'll flip the irregular
+		// array since we need to swap sides on the keys and values. After we have
+		// the transformed value we will cache it in memory for faster look-ups.
+		$plural = static::$plural;
+
+		$result = static::inflect($value, $plural, $irregular);
+
+		return static::$pluralCache[$value] = $result;
+	}
+
+	/**
+	 * Perform auto inflection on an English word.
+	 *
+	 * @param  string  $value
+	 * @param  array   $source
+	 * @param  array   $irregular
+	 * @return string
+	 */
+	protected static function inflect($value, $source, $irregular)
+	{
+		if (static::uncountable($value)) return $value;
+
+		// Next, we will check the "irregular" patterns which contain words that are
+		// not easily summarized in regular expression rules, like "children" and
+		// "teeth", both of which cannot get inflected using our typical rules.
+		foreach ($irregular as $irregular => $pattern)
+		{
+			if (preg_match($pattern = '/'.$pattern.'$/i', $value))
+			{
+				$irregular = static::matchCase($irregular, $value);
+
+				return preg_replace($pattern, $irregular, $value);
+			}
+		}
+
+		// Finally, we'll spin through the array of regular expressions and look for
+		// matches for the word. If we find a match, we will cache and return the
+		// transformed value so we will quickly look it up on subsequent calls.
+		foreach ($source as $pattern => $inflected)
+		{
+			if (preg_match($pattern, $value))
+			{
+				$inflected = preg_replace($pattern, $inflected, $value);
+
+				return static::matchCase($inflected, $value);
+			}
+		}
+	}
+
+	/**
+	 * Determine if the given value is uncountable.
+	 *
+	 * @param  string  $value
+	 * @return bool
+	 */
+	protected static function uncountable($value)
+	{
+		return in_array(strtolower($value), static::$uncountable);
+	}
+
+	/**
+	 * Attempt to match the case on two strings.
+	 *
+	 * @param  string  $value
+	 * @param  string  $comparison
+	 * @return string
+	 */
+	protected static function matchCase($value, $comparison)
+	{
+		$functions = array('mb_strtolower', 'mb_strtoupper', 'ucfirst', 'ucwords');
+
+		foreach ($functions as $function)
+		{
+			if (call_user_func($function, $comparison) === $comparison)
+			{
+				return call_user_func($function, $value);
+			}
+		}
+
+		return $value;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/SerializableClosure.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/SerializableClosure.php b/vendor/laravel/framework/src/Illuminate/Support/SerializableClosure.php
new file mode 100755
index 0000000..d8558fd
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/SerializableClosure.php
@@ -0,0 +1,59 @@
+<?php namespace Illuminate\Support;
+
+use Jeremeamia\SuperClosure\SerializableClosure as SuperClosure;
+
+/**
+ * Extends SuperClosure for backwards compatibility.
+ */
+class SerializableClosure extends SuperClosure {
+
+	/**
+	 * The code for the closure
+	 *
+	 * @var string
+	 */
+	protected $code;
+
+	/**
+	 * The variables that were "used" or imported from the parent scope
+	 *
+	 * @var array
+	 */
+	protected $variables;
+
+	/**
+	 * Returns the code of the closure being serialized
+	 *
+	 * @return string
+	 */
+	public function getCode()
+	{
+		$this->determineCodeAndVariables();
+
+		return $this->code;
+	}
+
+	/**
+	 * Returns the "used" variables of the closure being serialized
+	 *
+	 * @return array
+	 */
+	public function getVariables()
+	{
+		$this->determineCodeAndVariables();
+
+		return $this->variables;
+	}
+
+	/**
+	 * Uses the serialize method directly to lazily fetch the code and variables if needed
+	 */
+	protected function determineCodeAndVariables()
+	{
+		if ( ! $this->code)
+		{
+			list($this->code, $this->variables) = unserialize($this->serialize());
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/ServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/ServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Support/ServiceProvider.php
new file mode 100755
index 0000000..5c67964
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/ServiceProvider.php
@@ -0,0 +1,192 @@
+<?php namespace Illuminate\Support;
+
+use ReflectionClass;
+
+abstract class ServiceProvider {
+
+	/**
+	 * The application instance.
+	 *
+	 * @var \Illuminate\Foundation\Application
+	 */
+	protected $app;
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = false;
+
+	/**
+	 * Create a new service provider instance.
+	 *
+	 * @param  \Illuminate\Foundation\Application  $app
+	 * @return void
+	 */
+	public function __construct($app)
+	{
+		$this->app = $app;
+	}
+
+	/**
+	 * Bootstrap the application events.
+	 *
+	 * @return void
+	 */
+	public function boot() {}
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	abstract public function register();
+
+	/**
+	 * Register the package's component namespaces.
+	 *
+	 * @param  string  $package
+	 * @param  string  $namespace
+	 * @param  string  $path
+	 * @return void
+	 */
+	public function package($package, $namespace = null, $path = null)
+	{
+		$namespace = $this->getPackageNamespace($package, $namespace);
+
+		// In this method we will register the configuration package for the package
+		// so that the configuration options cleanly cascade into the application
+		// folder to make the developers lives much easier in maintaining them.
+		$path = $path ?: $this->guessPackagePath();
+
+		$config = $path.'/config';
+
+		if ($this->app['files']->isDirectory($config))
+		{
+			$this->app['config']->package($package, $config, $namespace);
+		}
+
+		// Next we will check for any "language" components. If language files exist
+		// we will register them with this given package's namespace so that they
+		// may be accessed using the translation facilities of the application.
+		$lang = $path.'/lang';
+
+		if ($this->app['files']->isDirectory($lang))
+		{
+			$this->app['translator']->addNamespace($namespace, $lang);
+		}
+
+		// Next, we will see if the application view folder contains a folder for the
+		// package and namespace. If it does, we'll give that folder precedence on
+		// the loader list for the views so the package views can be overridden.
+		$appView = $this->getAppViewPath($package);
+
+		if ($this->app['files']->isDirectory($appView))
+		{
+			$this->app['view']->addNamespace($namespace, $appView);
+		}
+
+		// Finally we will register the view namespace so that we can access each of
+		// the views available in this package. We use a standard convention when
+		// registering the paths to every package's views and other components.
+		$view = $path.'/views';
+
+		if ($this->app['files']->isDirectory($view))
+		{
+			$this->app['view']->addNamespace($namespace, $view);
+		}
+	}
+
+	/**
+	 * Guess the package path for the provider.
+	 *
+	 * @return string
+	 */
+	public function guessPackagePath()
+	{
+		$path = (new ReflectionClass($this))->getFileName();
+
+		return realpath(dirname($path).'/../../');
+	}
+
+	/**
+	 * Determine the namespace for a package.
+	 *
+	 * @param  string  $package
+	 * @param  string  $namespace
+	 * @return string
+	 */
+	protected function getPackageNamespace($package, $namespace)
+	{
+		if (is_null($namespace))
+		{
+			list($vendor, $namespace) = explode('/', $package);
+		}
+
+		return $namespace;
+	}
+
+	/**
+	 * Register the package's custom Artisan commands.
+	 *
+	 * @param  array  $commands
+	 * @return void
+	 */
+	public function commands($commands)
+	{
+		$commands = is_array($commands) ? $commands : func_get_args();
+
+		// To register the commands with Artisan, we will grab each of the arguments
+		// passed into the method and listen for Artisan "start" event which will
+		// give us the Artisan console instance which we will give commands to.
+		$events = $this->app['events'];
+
+		$events->listen('artisan.start', function($artisan) use ($commands)
+		{
+			$artisan->resolveCommands($commands);
+		});
+	}
+
+	/**
+	 * Get the application package view path.
+	 *
+	 * @param  string  $package
+	 * @return string
+	 */
+	protected function getAppViewPath($package)
+	{
+		return $this->app['path']."/views/packages/{$package}";
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array();
+	}
+
+	/**
+	 * Get the events that trigger this service provider to register.
+	 *
+	 * @return array
+	 */
+	public function when()
+	{
+		return array();
+	}
+
+	/**
+	 * Determine if the provider is deferred.
+	 *
+	 * @return bool
+	 */
+	public function isDeferred()
+	{
+		return $this->defer;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Str.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Str.php b/vendor/laravel/framework/src/Illuminate/Support/Str.php
new file mode 100755
index 0000000..089372d
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Str.php
@@ -0,0 +1,366 @@
+<?php namespace Illuminate\Support;
+
+use Patchwork\Utf8;
+use Illuminate\Support\Traits\MacroableTrait;
+
+class Str {
+
+	use MacroableTrait;
+
+	/**
+	 * The cache of snake-cased words.
+	 *
+	 * @var array
+	 */
+	protected static $snakeCache = [];
+
+	/**
+	 * The cache of camel-cased words.
+	 *
+	 * @var array
+	 */
+	protected static $camelCache = [];
+
+	/**
+	 * The cache of studly-cased words.
+	 *
+	 * @var array
+	 */
+	protected static $studlyCache = [];
+
+	/**
+	 * Transliterate a UTF-8 value to ASCII.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	public static function ascii($value)
+	{
+		return Utf8::toAscii($value);
+	}
+
+	/**
+	 * Convert a value to camel case.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	public static function camel($value)
+	{
+		if (isset(static::$camelCache[$value]))
+		{
+			return static::$camelCache[$value];
+		}
+
+		return static::$camelCache[$value] = lcfirst(static::studly($value));
+	}
+
+	/**
+	 * Determine if a given string contains a given substring.
+	 *
+	 * @param  string  $haystack
+	 * @param  string|array  $needles
+	 * @return bool
+	 */
+	public static function contains($haystack, $needles)
+	{
+		foreach ((array) $needles as $needle)
+		{
+			if ($needle != '' && strpos($haystack, $needle) !== false) return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Determine if a given string ends with a given substring.
+	 *
+	 * @param  string  $haystack
+	 * @param  string|array  $needles
+	 * @return bool
+	 */
+	public static function endsWith($haystack, $needles)
+	{
+		foreach ((array) $needles as $needle)
+		{
+			if ((string) $needle === substr($haystack, -strlen($needle))) return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Cap a string with a single instance of a given value.
+	 *
+	 * @param  string  $value
+	 * @param  string  $cap
+	 * @return string
+	 */
+	public static function finish($value, $cap)
+	{
+		$quoted = preg_quote($cap, '/');
+
+		return preg_replace('/(?:'.$quoted.')+$/', '', $value).$cap;
+	}
+
+	/**
+	 * Determine if a given string matches a given pattern.
+	 *
+	 * @param  string  $pattern
+	 * @param  string  $value
+	 * @return bool
+	 */
+	public static function is($pattern, $value)
+	{
+		if ($pattern == $value) return true;
+
+		$pattern = preg_quote($pattern, '#');
+
+		// Asterisks are translated into zero-or-more regular expression wildcards
+		// to make it convenient to check if the strings starts with the given
+		// pattern such as "library/*", making any string check convenient.
+		$pattern = str_replace('\*', '.*', $pattern).'\z';
+
+		return (bool) preg_match('#^'.$pattern.'#', $value);
+	}
+
+	/**
+	 * Return the length of the given string.
+	 *
+	 * @param  string  $value
+	 * @return int
+	 */
+	public static function length($value)
+	{
+		return mb_strlen($value);
+	}
+
+	/**
+	 * Limit the number of characters in a string.
+	 *
+	 * @param  string  $value
+	 * @param  int     $limit
+	 * @param  string  $end
+	 * @return string
+	 */
+	public static function limit($value, $limit = 100, $end = '...')
+	{
+		if (mb_strlen($value) <= $limit) return $value;
+
+		return rtrim(mb_substr($value, 0, $limit, 'UTF-8')).$end;
+	}
+
+	/**
+	 * Convert the given string to lower-case.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	public static function lower($value)
+	{
+		return mb_strtolower($value);
+	}
+
+	/**
+	 * Limit the number of words in a string.
+	 *
+	 * @param  string  $value
+	 * @param  int     $words
+	 * @param  string  $end
+	 * @return string
+	 */
+	public static function words($value, $words = 100, $end = '...')
+	{
+		preg_match('/^\s*+(?:\S++\s*+){1,'.$words.'}/u', $value, $matches);
+
+		if ( ! isset($matches[0]) || strlen($value) === strlen($matches[0])) return $value;
+
+		return rtrim($matches[0]).$end;
+	}
+
+	/**
+	 * Parse a Class@method style callback into class and method.
+	 *
+	 * @param  string  $callback
+	 * @param  string  $default
+	 * @return array
+	 */
+	public static function parseCallback($callback, $default)
+	{
+		return static::contains($callback, '@') ? explode('@', $callback, 2) : array($callback, $default);
+	}
+
+	/**
+	 * Get the plural form of an English word.
+	 *
+	 * @param  string  $value
+	 * @param  int     $count
+	 * @return string
+	 */
+	public static function plural($value, $count = 2)
+	{
+		return Pluralizer::plural($value, $count);
+	}
+
+	/**
+	 * Generate a more truly "random" alpha-numeric string.
+	 *
+	 * @param  int  $length
+	 * @return string
+	 *
+	 * @throws \RuntimeException
+	 */
+	public static function random($length = 16)
+	{
+		if (function_exists('openssl_random_pseudo_bytes'))
+		{
+			$bytes = openssl_random_pseudo_bytes($length * 2);
+
+			if ($bytes === false)
+			{
+				throw new \RuntimeException('Unable to generate random string.');
+			}
+
+			return substr(str_replace(array('/', '+', '='), '', base64_encode($bytes)), 0, $length);
+		}
+
+		return static::quickRandom($length);
+	}
+
+	/**
+	 * Generate a "random" alpha-numeric string.
+	 *
+	 * Should not be considered sufficient for cryptography, etc.
+	 *
+	 * @param  int  $length
+	 * @return string
+	 */
+	public static function quickRandom($length = 16)
+	{
+		$pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
+
+		return substr(str_shuffle(str_repeat($pool, $length)), 0, $length);
+	}
+
+	/**
+	 * Convert the given string to upper-case.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	public static function upper($value)
+	{
+		return mb_strtoupper($value);
+	}
+
+	/**
+	 * Convert the given string to title case.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	public static function title($value)
+	{
+		return mb_convert_case($value, MB_CASE_TITLE, 'UTF-8');
+	}
+
+	/**
+	 * Get the singular form of an English word.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	public static function singular($value)
+	{
+		return Pluralizer::singular($value);
+	}
+
+	/**
+	 * Generate a URL friendly "slug" from a given string.
+	 *
+	 * @param  string  $title
+	 * @param  string  $separator
+	 * @return string
+	 */
+	public static function slug($title, $separator = '-')
+	{
+		$title = static::ascii($title);
+
+		// Convert all dashes/underscores into separator
+		$flip = $separator == '-' ? '_' : '-';
+
+		$title = preg_replace('!['.preg_quote($flip).']+!u', $separator, $title);
+
+		// Remove all characters that are not the separator, letters, numbers, or whitespace.
+		$title = preg_replace('![^'.preg_quote($separator).'\pL\pN\s]+!u', '', mb_strtolower($title));
+
+		// Replace all separator characters and whitespace by a single separator
+		$title = preg_replace('!['.preg_quote($separator).'\s]+!u', $separator, $title);
+
+		return trim($title, $separator);
+	}
+
+	/**
+	 * Convert a string to snake case.
+	 *
+	 * @param  string  $value
+	 * @param  string  $delimiter
+	 * @return string
+	 */
+	public static function snake($value, $delimiter = '_')
+	{
+		$key = $value.$delimiter;
+
+		if (isset(static::$snakeCache[$key]))
+		{
+			return static::$snakeCache[$key];
+		}
+
+		if ( ! ctype_lower($value))
+		{
+			$replace = '$1'.$delimiter.'$2';
+
+			$value = strtolower(preg_replace('/(.)([A-Z])/', $replace, $value));
+		}
+
+		return static::$snakeCache[$key] = $value;
+	}
+
+	/**
+	 * Determine if a given string starts with a given substring.
+	 *
+	 * @param  string  $haystack
+	 * @param  string|array  $needles
+	 * @return bool
+	 */
+	public static function startsWith($haystack, $needles)
+	{
+		foreach ((array) $needles as $needle)
+		{
+			if ($needle != '' && strpos($haystack, $needle) === 0) return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Convert a value to studly caps case.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	public static function studly($value)
+	{
+		$key = $value;
+
+		if (isset(static::$studlyCache[$key]))
+		{
+			return static::$studlyCache[$key];
+		}
+
+		$value = ucwords(str_replace(array('-', '_'), ' ', $value));
+
+		return static::$studlyCache[$key] = str_replace(' ', '', $value);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Traits/CapsuleManagerTrait.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Traits/CapsuleManagerTrait.php b/vendor/laravel/framework/src/Illuminate/Support/Traits/CapsuleManagerTrait.php
new file mode 100644
index 0000000..efb5dfa
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Traits/CapsuleManagerTrait.php
@@ -0,0 +1,69 @@
+<?php namespace Illuminate\Support\Traits;
+
+use Illuminate\Support\Fluent;
+use Illuminate\Container\Container;
+
+trait CapsuleManagerTrait {
+
+	/**
+	 * The current globally used instance.
+	 *
+	 * @var object
+	 */
+	protected static $instance;
+
+	/**
+	 * The container instance.
+	 *
+	 * @var \Illuminate\Container\Container
+	 */
+	protected $container;
+
+	/**
+	 * Setup the IoC container instance.
+	 *
+	 * @param  \Illuminate\Container\Container|null  $container
+	 * @return void
+	 */
+	protected function setupContainer($container)
+	{
+		$this->container = $container ?: new Container;
+
+		if ( ! $this->container->bound('config'))
+		{
+			$this->container->instance('config', new Fluent);
+		}
+	}
+
+	/**
+	 * Make this capsule instance available globally.
+	 *
+	 * @return void
+	 */
+	public function setAsGlobal()
+	{
+		static::$instance = $this;
+	}
+
+	/**
+	 * Get the IoC container instance.
+	 *
+	 * @return \Illuminate\Container\Container
+	 */
+	public function getContainer()
+	{
+		return $this->container;
+	}
+
+	/**
+	 * Set the IoC container instance.
+	 *
+	 * @param  \Illuminate\Container\Container  $container
+	 * @return void
+	 */
+	public function setContainer(Container $container)
+	{
+		$this->container = $container;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/Traits/MacroableTrait.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/Traits/MacroableTrait.php b/vendor/laravel/framework/src/Illuminate/Support/Traits/MacroableTrait.php
new file mode 100644
index 0000000..12a9148
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/Traits/MacroableTrait.php
@@ -0,0 +1,68 @@
+<?php namespace Illuminate\Support\Traits;
+
+trait MacroableTrait {
+
+	/**
+	 * The registered string macros.
+	 *
+	 * @var array
+	 */
+	protected static $macros = array();
+
+	/**
+	 * Register a custom macro.
+	 *
+	 * @param  string    $name
+	 * @param  callable  $macro
+	 * @return void
+	 */
+	public static function macro($name, callable $macro)
+	{
+		static::$macros[$name] = $macro;
+	}
+
+	/**
+	 * Checks if macro is registered
+	 *
+	 * @param  string    $name
+	 * @return boolean
+	 */
+	public static function hasMacro($name)
+	{
+		return isset(static::$macros[$name]);
+	}
+
+	/**
+	 * Dynamically handle calls to the class.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 *
+	 * @throws \BadMethodCallException
+	 */
+	public static function __callStatic($method, $parameters)
+	{
+		if (static::hasMacro($method))
+		{
+			return call_user_func_array(static::$macros[$method], $parameters);
+		}
+
+		throw new \BadMethodCallException("Method {$method} does not exist.");
+	}
+
+	/**
+	 * Dynamically handle calls to the class.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 *
+	 * @throws \BadMethodCallException
+	 */
+	public function __call($method, $parameters)
+	{
+		return static::__callStatic($method, $parameters);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/ViewErrorBag.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/ViewErrorBag.php b/vendor/laravel/framework/src/Illuminate/Support/ViewErrorBag.php
new file mode 100644
index 0000000..e26b14d
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/ViewErrorBag.php
@@ -0,0 +1,105 @@
+<?php namespace Illuminate\Support;
+
+use Countable;
+
+class ViewErrorBag implements Countable {
+
+	/**
+	 * The array of the view error bags.
+	 *
+	 * @var array
+	 */
+	protected $bags = [];
+
+	/**
+	 * Checks if a named MessageBag exists in the bags.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function hasBag($key = 'default')
+	{
+		return isset($this->bags[$key]);
+	}
+
+	/**
+	 * Get a MessageBag instance from the bags.
+	 *
+	 * @param  string  $key
+	 * @return \Illuminate\Support\MessageBag
+	 */
+	public function getBag($key)
+	{
+		return array_get($this->bags, $key, new MessageBag);
+	}
+
+	/**
+	 * Get all the bags.
+	 *
+	 * @return array
+	 */
+	public function getBags()
+	{
+		return $this->bags;
+	}
+
+	/**
+	 * Add a new MessageBag instance to the bags.
+	 *
+	 * @param  string  $key
+	 * @param  \Illuminate\Support\MessageBag  $bag
+	 * @return $this
+	 */
+	public function put($key, MessageBag $bag)
+	{
+		$this->bags[$key] = $bag;
+
+		return $this;
+	}
+
+	/**
+	 * Get the number of messages in the default bag.
+	 *
+	 * @return int
+	 */
+	public function count()
+	{
+		return $this->default->count();
+	}
+
+	/**
+	 * Dynamically call methods on the default bag.
+	 *
+	 * @param  string  $method
+	 * @param  array  $parameters
+	 * @return mixed
+	 */
+	public function __call($method, $parameters)
+	{
+		return call_user_func_array(array($this->default, $method), $parameters);
+	}
+
+	/**
+	 * Dynamically access a view error bag.
+	 *
+	 * @param  string  $key
+	 * @return \Illuminate\Support\MessageBag
+	 */
+	public function __get($key)
+	{
+		return array_get($this->bags, $key, new MessageBag);
+	}
+
+	/**
+	 * Dynamically set a view error bag.
+	 *
+	 * @param  string  $key
+	 * @param  \Illuminate\Support\MessageBag  $value
+	 * @return void
+	 */
+	public function __set($key, $value)
+	{
+		array_set($this->bags, $key, $value);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/composer.json b/vendor/laravel/framework/src/Illuminate/Support/composer.json
new file mode 100755
index 0000000..e9e0f2b
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/composer.json
@@ -0,0 +1,32 @@
+{
+    "name": "illuminate/support",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0"
+    },
+    "require-dev": {
+        "jeremeamia/superclosure": "~1.0.1",
+        "patchwork/utf8": "~1.1"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Support": ""
+        },
+        "files": [
+            "Illuminate/Support/helpers.php"
+        ]
+    },
+    "target-dir": "Illuminate/Support",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Support/helpers.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Support/helpers.php b/vendor/laravel/framework/src/Illuminate/Support/helpers.php
new file mode 100755
index 0000000..86651cd
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Support/helpers.php
@@ -0,0 +1,1033 @@
+<?php
+
+use Illuminate\Support\Arr;
+use Illuminate\Support\Str;
+
+if ( ! function_exists('action'))
+{
+	/**
+	 * Generate a URL to a controller action.
+	 *
+	 * @param  string  $name
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	function action($name, $parameters = array())
+	{
+		return app('url')->action($name, $parameters);
+	}
+}
+
+if ( ! function_exists('app'))
+{
+	/**
+	 * Get the root Facade application instance.
+	 *
+	 * @param  string  $make
+	 * @return mixed
+	 */
+	function app($make = null)
+	{
+		if ( ! is_null($make))
+		{
+			return app()->make($make);
+		}
+
+		return Illuminate\Support\Facades\Facade::getFacadeApplication();
+	}
+}
+
+if ( ! function_exists('app_path'))
+{
+	/**
+	 * Get the path to the application folder.
+	 *
+	 * @param  string  $path
+	 * @return string
+	 */
+	function app_path($path = '')
+	{
+		return app('path').($path ? '/'.$path : $path);
+	}
+}
+
+if ( ! function_exists('append_config'))
+{
+	/**
+	 * Assign high numeric IDs to a config item to force appending.
+	 *
+	 * @param  array  $array
+	 * @return array
+	 */
+	function append_config(array $array)
+	{
+		$start = 9999;
+
+		foreach ($array as $key => $value)
+		{
+			if (is_numeric($key))
+			{
+				$start++;
+
+				$array[$start] = array_pull($array, $key);
+			}
+		}
+
+		return $array;
+	}
+}
+
+if ( ! function_exists('array_add'))
+{
+	/**
+	 * Add an element to an array using "dot" notation if it doesn't exist.
+	 *
+	 * @param  array   $array
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return array
+	 */
+	function array_add($array, $key, $value)
+	{
+		return Arr::add($array, $key, $value);
+	}
+}
+
+if ( ! function_exists('array_build'))
+{
+	/**
+	 * Build a new array using a callback.
+	 *
+	 * @param  array     $array
+	 * @param  \Closure  $callback
+	 * @return array
+	 */
+	function array_build($array, Closure $callback)
+	{
+		return Arr::build($array, $callback);
+	}
+}
+
+if ( ! function_exists('array_divide'))
+{
+	/**
+	 * Divide an array into two arrays. One with keys and the other with values.
+	 *
+	 * @param  array  $array
+	 * @return array
+	 */
+	function array_divide($array)
+	{
+		return Arr::divide($array);
+	}
+}
+
+if ( ! function_exists('array_dot'))
+{
+	/**
+	 * Flatten a multi-dimensional associative array with dots.
+	 *
+	 * @param  array   $array
+	 * @param  string  $prepend
+	 * @return array
+	 */
+	function array_dot($array, $prepend = '')
+	{
+		return Arr::dot($array, $prepend);
+	}
+}
+
+if ( ! function_exists('array_except'))
+{
+	/**
+	 * Get all of the given array except for a specified array of items.
+	 *
+	 * @param  array  $array
+	 * @param  array|string  $keys
+	 * @return array
+	 */
+	function array_except($array, $keys)
+	{
+		return Arr::except($array, $keys);
+	}
+}
+
+if ( ! function_exists('array_fetch'))
+{
+	/**
+	 * Fetch a flattened array of a nested array element.
+	 *
+	 * @param  array   $array
+	 * @param  string  $key
+	 * @return array
+	 */
+	function array_fetch($array, $key)
+	{
+		return Arr::fetch($array, $key);
+	}
+}
+
+if ( ! function_exists('array_first'))
+{
+	/**
+	 * Return the first element in an array passing a given truth test.
+	 *
+	 * @param  array     $array
+	 * @param  \Closure  $callback
+	 * @param  mixed     $default
+	 * @return mixed
+	 */
+	function array_first($array, $callback, $default = null)
+	{
+		return Arr::first($array, $callback, $default);
+	}
+}
+
+if ( ! function_exists('array_last'))
+{
+	/**
+	 * Return the last element in an array passing a given truth test.
+	 *
+	 * @param  array     $array
+	 * @param  \Closure  $callback
+	 * @param  mixed     $default
+	 * @return mixed
+	 */
+	function array_last($array, $callback, $default = null)
+	{
+		return Arr::last($array, $callback, $default);
+	}
+}
+
+if ( ! function_exists('array_flatten'))
+{
+	/**
+	 * Flatten a multi-dimensional array into a single level.
+	 *
+	 * @param  array  $array
+	 * @return array
+	 */
+	function array_flatten($array)
+	{
+		return Arr::flatten($array);
+	}
+}
+
+if ( ! function_exists('array_forget'))
+{
+	/**
+	 * Remove one or many array items from a given array using "dot" notation.
+	 *
+	 * @param  array  $array
+	 * @param  array|string  $keys
+	 * @return void
+	 */
+	function array_forget(&$array, $keys)
+	{
+		return Arr::forget($array, $keys);
+	}
+}
+
+if ( ! function_exists('array_get'))
+{
+	/**
+	 * Get an item from an array using "dot" notation.
+	 *
+	 * @param  array   $array
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return mixed
+	 */
+	function array_get($array, $key, $default = null)
+	{
+		return Arr::get($array, $key, $default);
+	}
+}
+
+if ( ! function_exists('array_has'))
+{
+	/**
+	 * Check if an item exists in an array using "dot" notation.
+	 *
+	 * @param  array   $array
+	 * @param  string  $key
+	 * @return bool
+	 */
+	function array_has($array, $key)
+	{
+		return Arr::has($array, $key);
+	}
+}
+
+if ( ! function_exists('array_only'))
+{
+	/**
+	 * Get a subset of the items from the given array.
+	 *
+	 * @param  array  $array
+	 * @param  array|string  $keys
+	 * @return array
+	 */
+	function array_only($array, $keys)
+	{
+		return Arr::only($array, $keys);
+	}
+}
+
+if ( ! function_exists('array_pluck'))
+{
+	/**
+	 * Pluck an array of values from an array.
+	 *
+	 * @param  array   $array
+	 * @param  string  $value
+	 * @param  string  $key
+	 * @return array
+	 */
+	function array_pluck($array, $value, $key = null)
+	{
+		return Arr::pluck($array, $value, $key);
+	}
+}
+
+if ( ! function_exists('array_pull'))
+{
+	/**
+	 * Get a value from the array, and remove it.
+	 *
+	 * @param  array   $array
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return mixed
+	 */
+	function array_pull(&$array, $key, $default = null)
+	{
+		return Arr::pull($array, $key, $default);
+	}
+}
+
+if ( ! function_exists('array_set'))
+{
+	/**
+	 * Set an array item to a given value using "dot" notation.
+	 *
+	 * If no key is given to the method, the entire array will be replaced.
+	 *
+	 * @param  array   $array
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return array
+	 */
+	function array_set(&$array, $key, $value)
+	{
+		return Arr::set($array, $key, $value);
+	}
+}
+
+if ( ! function_exists('array_sort'))
+{
+	/**
+	 * Sort the array using the given Closure.
+	 *
+	 * @param  array     $array
+	 * @param  \Closure  $callback
+	 * @return array
+	 */
+	function array_sort($array, Closure $callback)
+	{
+		return Arr::sort($array, $callback);
+	}
+}
+
+if ( ! function_exists('array_where'))
+{
+	/**
+	 * Filter the array using the given Closure.
+	 *
+	 * @param  array     $array
+	 * @param  \Closure  $callback
+	 * @return array
+	 */
+	function array_where($array, Closure $callback)
+	{
+		return Arr::where($array, $callback);
+	}
+}
+
+if ( ! function_exists('asset'))
+{
+	/**
+	 * Generate an asset path for the application.
+	 *
+	 * @param  string  $path
+	 * @param  bool    $secure
+	 * @return string
+	 */
+	function asset($path, $secure = null)
+	{
+		return app('url')->asset($path, $secure);
+	}
+}
+
+if ( ! function_exists('base_path'))
+{
+	/**
+	 * Get the path to the base of the install.
+	 *
+	 * @param  string  $path
+	 * @return string
+	 */
+	function base_path($path = '')
+	{
+		return app()->make('path.base').($path ? '/'.$path : $path);
+	}
+}
+
+if ( ! function_exists('camel_case'))
+{
+	/**
+	 * Convert a value to camel case.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	function camel_case($value)
+	{
+		return Str::camel($value);
+	}
+}
+
+if ( ! function_exists('class_basename'))
+{
+	/**
+	 * Get the class "basename" of the given object / class.
+	 *
+	 * @param  string|object  $class
+	 * @return string
+	 */
+	function class_basename($class)
+	{
+		$class = is_object($class) ? get_class($class) : $class;
+
+		return basename(str_replace('\\', '/', $class));
+	}
+}
+
+if ( ! function_exists('class_uses_recursive'))
+{
+	/**
+	 * Returns all traits used by a class, it's subclasses and trait of their traits
+	 *
+	 * @param  string  $class
+	 * @return array
+	 */
+	function class_uses_recursive($class)
+	{
+		$results = [];
+
+		foreach (array_merge([$class => $class], class_parents($class)) as $class)
+		{
+			$results += trait_uses_recursive($class);
+		}
+
+		return array_unique($results);
+	}
+}
+
+if ( ! function_exists('csrf_token'))
+{
+	/**
+	 * Get the CSRF token value.
+	 *
+	 * @return string
+	 *
+	 * @throws RuntimeException
+	 */
+	function csrf_token()
+	{
+		$session = app('session');
+
+		if (isset($session))
+		{
+			return $session->getToken();
+		}
+
+		throw new RuntimeException("Application session store not set.");
+	}
+}
+
+if ( ! function_exists('data_get'))
+{
+	/**
+	 * Get an item from an array or object using "dot" notation.
+	 *
+	 * @param  mixed   $target
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return mixed
+	 */
+	function data_get($target, $key, $default = null)
+	{
+		if (is_null($key)) return $target;
+
+		foreach (explode('.', $key) as $segment)
+		{
+			if (is_array($target))
+			{
+				if ( ! array_key_exists($segment, $target))
+				{
+					return value($default);
+				}
+
+				$target = $target[$segment];
+			}
+			elseif (is_object($target))
+			{
+				if ( ! isset($target->{$segment}))
+				{
+					return value($default);
+				}
+
+				$target = $target->{$segment};
+			}
+			else
+			{
+				return value($default);
+			}
+		}
+
+		return $target;
+	}
+}
+
+if ( ! function_exists('dd'))
+{
+	/**
+	 * Dump the passed variables and end the script.
+	 *
+	 * @param  mixed
+	 * @return void
+	 */
+	function dd()
+	{
+		array_map(function($x) { var_dump($x); }, func_get_args()); die;
+	}
+}
+
+if ( ! function_exists('e'))
+{
+	/**
+	 * Escape HTML entities in a string.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	function e($value)
+	{
+		return htmlentities($value, ENT_QUOTES, 'UTF-8', false);
+	}
+}
+
+if ( ! function_exists('ends_with'))
+{
+	/**
+	 * Determine if a given string ends with a given substring.
+	 *
+	 * @param  string  $haystack
+	 * @param  string|array  $needles
+	 * @return bool
+	 */
+	function ends_with($haystack, $needles)
+	{
+		return Str::endsWith($haystack, $needles);
+	}
+}
+
+if ( ! function_exists('head'))
+{
+	/**
+	 * Get the first element of an array. Useful for method chaining.
+	 *
+	 * @param  array  $array
+	 * @return mixed
+	 */
+	function head($array)
+	{
+		return reset($array);
+	}
+}
+
+if ( ! function_exists('link_to'))
+{
+	/**
+	 * Generate a HTML link.
+	 *
+	 * @param  string  $url
+	 * @param  string  $title
+	 * @param  array   $attributes
+	 * @param  bool    $secure
+	 * @return string
+	 */
+	function link_to($url, $title = null, $attributes = array(), $secure = null)
+	{
+		return app('html')->link($url, $title, $attributes, $secure);
+	}
+}
+
+if ( ! function_exists('last'))
+{
+	/**
+	 * Get the last element from an array.
+	 *
+	 * @param  array  $array
+	 * @return mixed
+	 */
+	function last($array)
+	{
+		return end($array);
+	}
+}
+
+if ( ! function_exists('link_to_asset'))
+{
+	/**
+	 * Generate a HTML link to an asset.
+	 *
+	 * @param  string  $url
+	 * @param  string  $title
+	 * @param  array   $attributes
+	 * @param  bool    $secure
+	 * @return string
+	 */
+	function link_to_asset($url, $title = null, $attributes = array(), $secure = null)
+	{
+		return app('html')->linkAsset($url, $title, $attributes, $secure);
+	}
+}
+
+if ( ! function_exists('link_to_route'))
+{
+	/**
+	 * Generate a HTML link to a named route.
+	 *
+	 * @param  string  $name
+	 * @param  string  $title
+	 * @param  array   $parameters
+	 * @param  array   $attributes
+	 * @return string
+	 */
+	function link_to_route($name, $title = null, $parameters = array(), $attributes = array())
+	{
+		return app('html')->linkRoute($name, $title, $parameters, $attributes);
+	}
+}
+
+if ( ! function_exists('link_to_action'))
+{
+	/**
+	 * Generate a HTML link to a controller action.
+	 *
+	 * @param  string  $action
+	 * @param  string  $title
+	 * @param  array   $parameters
+	 * @param  array   $attributes
+	 * @return string
+	 */
+	function link_to_action($action, $title = null, $parameters = array(), $attributes = array())
+	{
+		return app('html')->linkAction($action, $title, $parameters, $attributes);
+	}
+}
+
+if ( ! function_exists('object_get'))
+{
+	/**
+	 * Get an item from an object using "dot" notation.
+	 *
+	 * @param  object  $object
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return mixed
+	 */
+	function object_get($object, $key, $default = null)
+	{
+		if (is_null($key) || trim($key) == '') return $object;
+
+		foreach (explode('.', $key) as $segment)
+		{
+			if ( ! is_object($object) || ! isset($object->{$segment}))
+			{
+				return value($default);
+			}
+
+			$object = $object->{$segment};
+		}
+
+		return $object;
+	}
+}
+
+if ( ! function_exists('preg_replace_sub'))
+{
+	/**
+	 * Replace a given pattern with each value in the array in sequentially.
+	 *
+	 * @param  string  $pattern
+	 * @param  array   $replacements
+	 * @param  string  $subject
+	 * @return string
+	 */
+	function preg_replace_sub($pattern, &$replacements, $subject)
+	{
+		return preg_replace_callback($pattern, function($match) use (&$replacements)
+		{
+			return array_shift($replacements);
+
+		}, $subject);
+	}
+}
+
+if ( ! function_exists('public_path'))
+{
+	/**
+	 * Get the path to the public folder.
+	 *
+	 * @param  string  $path
+	 * @return string
+	 */
+	function public_path($path = '')
+	{
+		return app()->make('path.public').($path ? '/'.$path : $path);
+	}
+}
+
+if ( ! function_exists('route'))
+{
+	/**
+	 * Generate a URL to a named route.
+	 *
+	 * @param  string  $name
+	 * @param  array   $parameters
+	 * @param  bool  $absolute
+	 * @param  \Illuminate\Routing\Route $route
+	 * @return string
+	 */
+	function route($name, $parameters = array(), $absolute = true, $route = null)
+	{
+		return app('url')->route($name, $parameters, $absolute, $route);
+	}
+}
+
+if ( ! function_exists('secure_asset'))
+{
+	/**
+	 * Generate an asset path for the application.
+	 *
+	 * @param  string  $path
+	 * @return string
+	 */
+	function secure_asset($path)
+	{
+		return asset($path, true);
+	}
+}
+
+if ( ! function_exists('secure_url'))
+{
+	/**
+	 * Generate a HTTPS url for the application.
+	 *
+	 * @param  string  $path
+	 * @param  mixed   $parameters
+	 * @return string
+	 */
+	function secure_url($path, $parameters = array())
+	{
+		return url($path, $parameters, true);
+	}
+}
+
+if ( ! function_exists('snake_case'))
+{
+	/**
+	 * Convert a string to snake case.
+	 *
+	 * @param  string  $value
+	 * @param  string  $delimiter
+	 * @return string
+	 */
+	function snake_case($value, $delimiter = '_')
+	{
+		return Str::snake($value, $delimiter);
+	}
+}
+
+if ( ! function_exists('starts_with'))
+{
+	/**
+	 * Determine if a given string starts with a given substring.
+	 *
+	 * @param  string  $haystack
+	 * @param  string|array  $needles
+	 * @return bool
+	 */
+	function starts_with($haystack, $needles)
+	{
+		return Str::startsWith($haystack, $needles);
+	}
+}
+
+if ( ! function_exists('storage_path'))
+{
+	/**
+	 * Get the path to the storage folder.
+	 *
+	 * @param   string  $path
+	 * @return  string
+	 */
+	function storage_path($path = '')
+	{
+		return app('path.storage').($path ? '/'.$path : $path);
+	}
+}
+
+if ( ! function_exists('str_contains'))
+{
+	/**
+	 * Determine if a given string contains a given substring.
+	 *
+	 * @param  string  $haystack
+	 * @param  string|array  $needles
+	 * @return bool
+	 */
+	function str_contains($haystack, $needles)
+	{
+		return Str::contains($haystack, $needles);
+	}
+}
+
+if ( ! function_exists('str_finish'))
+{
+	/**
+	 * Cap a string with a single instance of a given value.
+	 *
+	 * @param  string  $value
+	 * @param  string  $cap
+	 * @return string
+	 */
+	function str_finish($value, $cap)
+	{
+		return Str::finish($value, $cap);
+	}
+}
+
+if ( ! function_exists('str_is'))
+{
+	/**
+	 * Determine if a given string matches a given pattern.
+	 *
+	 * @param  string  $pattern
+	 * @param  string  $value
+	 * @return bool
+	 */
+	function str_is($pattern, $value)
+	{
+		return Str::is($pattern, $value);
+	}
+}
+
+if ( ! function_exists('str_limit'))
+{
+	/**
+	 * Limit the number of characters in a string.
+	 *
+	 * @param  string  $value
+	 * @param  int     $limit
+	 * @param  string  $end
+	 * @return string
+	 */
+	function str_limit($value, $limit = 100, $end = '...')
+	{
+		return Str::limit($value, $limit, $end);
+	}
+}
+
+if ( ! function_exists('str_plural'))
+{
+	/**
+	 * Get the plural form of an English word.
+	 *
+	 * @param  string  $value
+	 * @param  int     $count
+	 * @return string
+	 */
+	function str_plural($value, $count = 2)
+	{
+		return Str::plural($value, $count);
+	}
+}
+
+if ( ! function_exists('str_random'))
+{
+	/**
+	 * Generate a more truly "random" alpha-numeric string.
+	 *
+	 * @param  int  $length
+	 * @return string
+	 *
+	 * @throws \RuntimeException
+	 */
+	function str_random($length = 16)
+	{
+		return Str::random($length);
+	}
+}
+
+if ( ! function_exists('str_replace_array'))
+{
+	/**
+	 * Replace a given value in the string sequentially with an array.
+	 *
+	 * @param  string  $search
+	 * @param  array   $replace
+	 * @param  string  $subject
+	 * @return string
+	 */
+	function str_replace_array($search, array $replace, $subject)
+	{
+		foreach ($replace as $value)
+		{
+			$subject = preg_replace('/'.$search.'/', $value, $subject, 1);
+		}
+
+		return $subject;
+	}
+}
+
+if ( ! function_exists('str_singular'))
+{
+	/**
+	 * Get the singular form of an English word.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	function str_singular($value)
+	{
+		return Str::singular($value);
+	}
+}
+
+if ( ! function_exists('studly_case'))
+{
+	/**
+	 * Convert a value to studly caps case.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	function studly_case($value)
+	{
+		return Str::studly($value);
+	}
+}
+
+if ( ! function_exists('trait_uses_recursive'))
+{
+	/**
+	 * Returns all traits used by a trait and its traits
+	 *
+	 * @param  string  $trait
+	 * @return array
+	 */
+	function trait_uses_recursive($trait)
+	{
+		$traits = class_uses($trait);
+
+		foreach ($traits as $trait)
+		{
+			$traits += trait_uses_recursive($trait);
+		}
+
+		return $traits;
+	}
+}
+
+if ( ! function_exists('trans'))
+{
+	/**
+	 * Translate the given message.
+	 *
+	 * @param  string  $id
+	 * @param  array   $parameters
+	 * @param  string  $domain
+	 * @param  string  $locale
+	 * @return string
+	 */
+	function trans($id, $parameters = array(), $domain = 'messages', $locale = null)
+	{
+		return app('translator')->trans($id, $parameters, $domain, $locale);
+	}
+}
+
+if ( ! function_exists('trans_choice'))
+{
+	/**
+	 * Translates the given message based on a count.
+	 *
+	 * @param  string  $id
+	 * @param  int     $number
+	 * @param  array   $parameters
+	 * @param  string  $domain
+	 * @param  string  $locale
+	 * @return string
+	 */
+	function trans_choice($id, $number, array $parameters = array(), $domain = 'messages', $locale = null)
+	{
+		return app('translator')->transChoice($id, $number, $parameters, $domain, $locale);
+	}
+}
+
+if ( ! function_exists('url'))
+{
+	/**
+	 * Generate a url for the application.
+	 *
+	 * @param  string  $path
+	 * @param  mixed   $parameters
+	 * @param  bool    $secure
+	 * @return string
+	 */
+	function url($path = null, $parameters = array(), $secure = null)
+	{
+		return app('url')->to($path, $parameters, $secure);
+	}
+}
+
+if ( ! function_exists('value'))
+{
+	/**
+	 * Return the default value of the given value.
+	 *
+	 * @param  mixed  $value
+	 * @return mixed
+	 */
+	function value($value)
+	{
+		return $value instanceof Closure ? $value() : $value;
+	}
+}
+
+if ( ! function_exists('with'))
+{
+	/**
+	 * Return the given object. Useful for chaining.
+	 *
+	 * @param  mixed  $object
+	 * @return mixed
+	 */
+	function with($object)
+	{
+		return $object;
+	}
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php b/vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php
new file mode 100755
index 0000000..f455e60
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php
@@ -0,0 +1,130 @@
+<?php namespace Illuminate\Translation;
+
+use Illuminate\Filesystem\Filesystem;
+
+class FileLoader implements LoaderInterface {
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * The default path for the loader.
+	 *
+	 * @var string
+	 */
+	protected $path;
+
+	/**
+	 * All of the namespace hints.
+	 *
+	 * @var array
+	 */
+	protected $hints = array();
+
+	/**
+	 * Create a new file loader instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @param  string  $path
+	 * @return void
+	 */
+	public function __construct(Filesystem $files, $path)
+	{
+		$this->path = $path;
+		$this->files = $files;
+	}
+
+	/**
+	 * Load the messages for the given locale.
+	 *
+	 * @param  string  $locale
+	 * @param  string  $group
+	 * @param  string  $namespace
+	 * @return array
+	 */
+	public function load($locale, $group, $namespace = null)
+	{
+		if (is_null($namespace) || $namespace == '*')
+		{
+			return $this->loadPath($this->path, $locale, $group);
+		}
+
+		return $this->loadNamespaced($locale, $group, $namespace);
+	}
+
+	/**
+	 * Load a namespaced translation group.
+	 *
+	 * @param  string  $locale
+	 * @param  string  $group
+	 * @param  string  $namespace
+	 * @return array
+	 */
+	protected function loadNamespaced($locale, $group, $namespace)
+	{
+		if (isset($this->hints[$namespace]))
+		{
+			$lines = $this->loadPath($this->hints[$namespace], $locale, $group);
+
+			return $this->loadNamespaceOverrides($lines, $locale, $group, $namespace);
+		}
+
+		return array();
+	}
+
+	/**
+	 * Load a local namespaced translation group for overrides.
+	 *
+	 * @param  array  $lines
+	 * @param  string  $locale
+	 * @param  string  $group
+	 * @param  string  $namespace
+	 * @return array
+	 */
+	protected function loadNamespaceOverrides(array $lines, $locale, $group, $namespace)
+	{
+		$file = "{$this->path}/packages/{$locale}/{$namespace}/{$group}.php";
+
+		if ($this->files->exists($file))
+		{
+			return array_replace_recursive($lines, $this->files->getRequire($file));
+		}
+
+		return $lines;
+	}
+
+	/**
+	 * Load a locale from a given path.
+	 *
+	 * @param  string  $path
+	 * @param  string  $locale
+	 * @param  string  $group
+	 * @return array
+	 */
+	protected function loadPath($path, $locale, $group)
+	{
+		if ($this->files->exists($full = "{$path}/{$locale}/{$group}.php"))
+		{
+			return $this->files->getRequire($full);
+		}
+
+		return array();
+	}
+
+	/**
+	 * Add a new namespace to the loader.
+	 *
+	 * @param  string  $namespace
+	 * @param  string  $hint
+	 * @return void
+	 */
+	public function addNamespace($namespace, $hint)
+	{
+		$this->hints[$namespace] = $hint;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Translation/LoaderInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Translation/LoaderInterface.php b/vendor/laravel/framework/src/Illuminate/Translation/LoaderInterface.php
new file mode 100755
index 0000000..f0fbac5
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Translation/LoaderInterface.php
@@ -0,0 +1,24 @@
+<?php namespace Illuminate\Translation;
+
+interface LoaderInterface {
+
+	/**
+	 * Load the messages for the given locale.
+	 *
+	 * @param  string  $locale
+	 * @param  string  $group
+	 * @param  string  $namespace
+	 * @return array
+	 */
+	public function load($locale, $group, $namespace = null);
+
+	/**
+	 * Add a new namespace to the loader.
+	 *
+	 * @param  string  $namespace
+	 * @param  string  $hint
+	 * @return void
+	 */
+	public function addNamespace($namespace, $hint);
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Translation/TranslationServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Translation/TranslationServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Translation/TranslationServiceProvider.php
new file mode 100755
index 0000000..3d09780
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Translation/TranslationServiceProvider.php
@@ -0,0 +1,63 @@
+<?php namespace Illuminate\Translation;
+
+use Illuminate\Support\ServiceProvider;
+
+class TranslationServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->registerLoader();
+
+		$this->app->bindShared('translator', function($app)
+		{
+			$loader = $app['translation.loader'];
+
+			// When registering the translator component, we'll need to set the default
+			// locale as well as the fallback locale. So, we'll grab the application
+			// configuration so we can easily get both of these values from there.
+			$locale = $app['config']['app.locale'];
+
+			$trans = new Translator($loader, $locale);
+
+			$trans->setFallback($app['config']['app.fallback_locale']);
+
+			return $trans;
+		});
+	}
+
+	/**
+	 * Register the translation line loader.
+	 *
+	 * @return void
+	 */
+	protected function registerLoader()
+	{
+		$this->app->bindShared('translation.loader', function($app)
+		{
+			return new FileLoader($app['files'], $app['path'].'/lang');
+		});
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('translator', 'translation.loader');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Translation/Translator.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Translation/Translator.php b/vendor/laravel/framework/src/Illuminate/Translation/Translator.php
new file mode 100755
index 0000000..cc2476b
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Translation/Translator.php
@@ -0,0 +1,365 @@
+<?php namespace Illuminate\Translation;
+
+use Illuminate\Support\Collection;
+use Illuminate\Support\NamespacedItemResolver;
+use Symfony\Component\Translation\MessageSelector;
+use Symfony\Component\Translation\TranslatorInterface;
+
+class Translator extends NamespacedItemResolver implements TranslatorInterface {
+
+	/**
+	 * The loader implementation.
+	 *
+	 * @var \Illuminate\Translation\LoaderInterface
+	 */
+	protected $loader;
+
+	/**
+	 * The default locale being used by the translator.
+	 *
+	 * @var string
+	 */
+	protected $locale;
+
+	/**
+	 * The fallback locale used by the translator.
+	 *
+	 * @var string
+	 */
+	protected $fallback;
+
+	/**
+	 * The array of loaded translation groups.
+	 *
+	 * @var array
+	 */
+	protected $loaded = array();
+
+	/**
+	 * Create a new translator instance.
+	 *
+	 * @param  \Illuminate\Translation\LoaderInterface  $loader
+	 * @param  string  $locale
+	 * @return void
+	 */
+	public function __construct(LoaderInterface $loader, $locale)
+	{
+		$this->loader = $loader;
+		$this->locale = $locale;
+	}
+
+	/**
+	 * Determine if a translation exists.
+	 *
+	 * @param  string  $key
+	 * @param  string  $locale
+	 * @return bool
+	 */
+	public function has($key, $locale = null)
+	{
+		return $this->get($key, array(), $locale) !== $key;
+	}
+
+	/**
+	 * Get the translation for the given key.
+	 *
+	 * @param  string  $key
+	 * @param  array   $replace
+	 * @param  string  $locale
+	 * @return string
+	 */
+	public function get($key, array $replace = array(), $locale = null)
+	{
+		list($namespace, $group, $item) = $this->parseKey($key);
+
+		// Here we will get the locale that should be used for the language line. If one
+		// was not passed, we will use the default locales which was given to us when
+		// the translator was instantiated. Then, we can load the lines and return.
+		foreach ($this->parseLocale($locale) as $locale)
+		{
+			$this->load($namespace, $group, $locale);
+
+			$line = $this->getLine(
+				$namespace, $group, $locale, $item, $replace
+			);
+
+			if ( ! is_null($line)) break;
+		}
+
+		// If the line doesn't exist, we will return back the key which was requested as
+		// that will be quick to spot in the UI if language keys are wrong or missing
+		// from the application's language files. Otherwise we can return the line.
+		if ( ! isset($line)) return $key;
+
+		return $line;
+	}
+
+	/**
+	 * Retrieve a language line out the loaded array.
+	 *
+	 * @param  string  $namespace
+	 * @param  string  $group
+	 * @param  string  $locale
+	 * @param  string  $item
+	 * @param  array   $replace
+	 * @return string|null
+	 */
+	protected function getLine($namespace, $group, $locale, $item, array $replace)
+	{
+		$line = array_get($this->loaded[$namespace][$group][$locale], $item);
+
+		if (is_string($line))
+		{
+			return $this->makeReplacements($line, $replace);
+		}
+		elseif (is_array($line) && count($line) > 0)
+		{
+			return $line;
+		}
+	}
+
+	/**
+	 * Make the place-holder replacements on a line.
+	 *
+	 * @param  string  $line
+	 * @param  array   $replace
+	 * @return string
+	 */
+	protected function makeReplacements($line, array $replace)
+	{
+		$replace = $this->sortReplacements($replace);
+
+		foreach ($replace as $key => $value)
+		{
+			$line = str_replace(':'.$key, $value, $line);
+		}
+
+		return $line;
+	}
+
+	/**
+	 * Sort the replacements array.
+	 *
+	 * @param  array  $replace
+	 * @return array
+	 */
+	protected function sortReplacements(array $replace)
+	{
+		return (new Collection($replace))->sortBy(function($r)
+		{
+			return mb_strlen($r) * -1;
+		});
+	}
+
+	/**
+	 * Get a translation according to an integer value.
+	 *
+	 * @param  string  $key
+	 * @param  int     $number
+	 * @param  array   $replace
+	 * @param  string  $locale
+	 * @return string
+	 */
+	public function choice($key, $number, array $replace = array(), $locale = null)
+	{
+		$line = $this->get($key, $replace, $locale = $locale ?: $this->locale);
+
+		$replace['count'] = $number;
+
+		return $this->makeReplacements($this->getSelector()->choose($line, $number, $locale), $replace);
+	}
+
+	/**
+	 * Get the translation for a given key.
+	 *
+	 * @param  string  $id
+	 * @param  array   $parameters
+	 * @param  string  $domain
+	 * @param  string  $locale
+	 * @return string
+	 */
+	public function trans($id, array $parameters = array(), $domain = 'messages', $locale = null)
+	{
+		return $this->get($id, $parameters, $locale);
+	}
+
+	/**
+	 * Get a translation according to an integer value.
+	 *
+	 * @param  string  $id
+	 * @param  int     $number
+	 * @param  array   $parameters
+	 * @param  string  $domain
+	 * @param  string  $locale
+	 * @return string
+	 */
+	public function transChoice($id, $number, array $parameters = array(), $domain = 'messages', $locale = null)
+	{
+		return $this->choice($id, $number, $parameters, $locale);
+	}
+
+	/**
+	 * Load the specified language group.
+	 *
+	 * @param  string  $namespace
+	 * @param  string  $group
+	 * @param  string  $locale
+	 * @return void
+	 */
+	public function load($namespace, $group, $locale)
+	{
+		if ($this->isLoaded($namespace, $group, $locale)) return;
+
+		// The loader is responsible for returning the array of language lines for the
+		// given namespace, group, and locale. We'll set the lines in this array of
+		// lines that have already been loaded so that we can easily access them.
+		$lines = $this->loader->load($locale, $group, $namespace);
+
+		$this->loaded[$namespace][$group][$locale] = $lines;
+	}
+
+	/**
+	 * Determine if the given group has been loaded.
+	 *
+	 * @param  string  $namespace
+	 * @param  string  $group
+	 * @param  string  $locale
+	 * @return bool
+	 */
+	protected function isLoaded($namespace, $group, $locale)
+	{
+		return isset($this->loaded[$namespace][$group][$locale]);
+	}
+
+	/**
+	 * Add a new namespace to the loader.
+	 *
+	 * @param  string  $namespace
+	 * @param  string  $hint
+	 * @return void
+	 */
+	public function addNamespace($namespace, $hint)
+	{
+		$this->loader->addNamespace($namespace, $hint);
+	}
+
+	/**
+	 * Parse a key into namespace, group, and item.
+	 *
+	 * @param  string  $key
+	 * @return array
+	 */
+	public function parseKey($key)
+	{
+		$segments = parent::parseKey($key);
+
+		if (is_null($segments[0])) $segments[0] = '*';
+
+		return $segments;
+	}
+
+	/**
+	 * Get the array of locales to be checked.
+	 *
+	 * @param  string|null  $locale
+	 * @return array
+	 */
+	protected function parseLocale($locale)
+	{
+		if ( ! is_null($locale))
+		{
+			return array_filter(array($locale, $this->fallback));
+		}
+
+		return array_filter(array($this->locale, $this->fallback));
+	}
+
+	/**
+	 * Get the message selector instance.
+	 *
+	 * @return \Symfony\Component\Translation\MessageSelector
+	 */
+	public function getSelector()
+	{
+		if ( ! isset($this->selector))
+		{
+			$this->selector = new MessageSelector;
+		}
+
+		return $this->selector;
+	}
+
+	/**
+	 * Set the message selector instance.
+	 *
+	 * @param  \Symfony\Component\Translation\MessageSelector  $selector
+	 * @return void
+	 */
+	public function setSelector(MessageSelector $selector)
+	{
+		$this->selector = $selector;
+	}
+
+	/**
+	 * Get the language line loader implementation.
+	 *
+	 * @return \Illuminate\Translation\LoaderInterface
+	 */
+	public function getLoader()
+	{
+		return $this->loader;
+	}
+
+	/**
+	 * Get the default locale being used.
+	 *
+	 * @return string
+	 */
+	public function locale()
+	{
+		return $this->getLocale();
+	}
+
+	/**
+	 * Get the default locale being used.
+	 *
+	 * @return string
+	 */
+	public function getLocale()
+	{
+		return $this->locale;
+	}
+
+	/**
+	 * Set the default locale.
+	 *
+	 * @param  string  $locale
+	 * @return void
+	 */
+	public function setLocale($locale)
+	{
+		$this->locale = $locale;
+	}
+
+	/**
+	 * Get the fallback locale being used.
+	 *
+	 * @return string
+	 */
+	public function getFallback()
+	{
+		return $this->fallback;
+	}
+
+	/**
+	 * Set the fallback locale being used.
+	 *
+	 * @param  string  $fallback
+	 * @return void
+	 */
+	public function setFallback($fallback)
+	{
+		$this->fallback = $fallback;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Translation/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Translation/composer.json b/vendor/laravel/framework/src/Illuminate/Translation/composer.json
new file mode 100755
index 0000000..956de2c
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Translation/composer.json
@@ -0,0 +1,28 @@
+{
+    "name": "illuminate/translation",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/filesystem": "4.2.*",
+        "illuminate/support": "4.2.*",
+        "symfony/translation": "2.5.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Translation": ""
+        }
+    },
+    "target-dir": "Illuminate/Translation",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifier.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifier.php b/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifier.php
new file mode 100755
index 0000000..2558f62
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifier.php
@@ -0,0 +1,127 @@
+<?php namespace Illuminate\Validation;
+
+use Illuminate\Database\ConnectionResolverInterface;
+
+class DatabasePresenceVerifier implements PresenceVerifierInterface {
+
+	/**
+	 * The database connection instance.
+	 *
+	 * @var \Illuminate\Database\ConnectionResolverInterface
+	 */
+	protected $db;
+
+	/**
+	 * The database connection to use.
+	 *
+	 * @var string
+	 */
+	protected $connection = null;
+
+	/**
+	 * Create a new database presence verifier.
+	 *
+	 * @param  \Illuminate\Database\ConnectionResolverInterface  $db
+	 * @return void
+	 */
+	public function __construct(ConnectionResolverInterface $db)
+	{
+		$this->db = $db;
+	}
+
+	/**
+	 * Count the number of objects in a collection having the given value.
+	 *
+	 * @param  string  $collection
+	 * @param  string  $column
+	 * @param  string  $value
+	 * @param  int     $excludeId
+	 * @param  string  $idColumn
+	 * @param  array   $extra
+	 * @return int
+	 */
+	public function getCount($collection, $column, $value, $excludeId = null, $idColumn = null, array $extra = array())
+	{
+		$query = $this->table($collection)->where($column, '=', $value);
+
+		if ( ! is_null($excludeId) && $excludeId != 'NULL')
+		{
+			$query->where($idColumn ?: 'id', '<>', $excludeId);
+		}
+
+		foreach ($extra as $key => $extraValue)
+		{
+			$this->addWhere($query, $key, $extraValue);
+		}
+
+		return $query->count();
+	}
+
+	/**
+	 * Count the number of objects in a collection with the given values.
+	 *
+	 * @param  string  $collection
+	 * @param  string  $column
+	 * @param  array   $values
+	 * @param  array   $extra
+	 * @return int
+	 */
+	public function getMultiCount($collection, $column, array $values, array $extra = array())
+	{
+		$query = $this->table($collection)->whereIn($column, $values);
+
+		foreach ($extra as $key => $extraValue)
+		{
+			$this->addWhere($query, $key, $extraValue);
+		}
+
+		return $query->count();
+	}
+
+	/**
+	 * Add a "where" clause to the given query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  string  $key
+	 * @param  string  $extraValue
+	 * @return void
+	 */
+	protected function addWhere($query, $key, $extraValue)
+	{
+		if ($extraValue === 'NULL')
+		{
+			$query->whereNull($key);
+		}
+		elseif ($extraValue === 'NOT_NULL')
+		{
+			$query->whereNotNull($key);
+		}
+		else
+		{
+			$query->where($key, $extraValue);
+		}
+	}
+
+	/**
+	 * Get a query builder for the given table.
+	 *
+	 * @param  string  $table
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	protected function table($table)
+	{
+		return $this->db->connection($this->connection)->table($table);
+	}
+
+	/**
+	 * Set the connection to be used.
+	 *
+	 * @param  string  $connection
+	 * @return void
+	 */
+	public function setConnection($connection)
+	{
+		$this->connection = $connection;
+	}
+
+}


[56/57] airavata-php-gateway git commit: Correcting Merge Conflicts with AIRAVATA-1695

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/71079c5f/vendor/composer/autoload_classmap.php
----------------------------------------------------------------------
diff --cc vendor/composer/autoload_classmap.php
index 734f4ee,0000000..33d373a
mode 100644,000000..100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@@ -1,2121 -1,0 +1,2121 @@@
 +<?php
 +
 +// autoload_classmap.php @generated by Composer
 +
 +$vendorDir = dirname(dirname(__FILE__));
 +$baseDir = dirname($vendorDir);
 +
 +return array(
 +    'AccountController' => $baseDir . '/app/controllers/AccountController.php',
 +    'AddRole' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'AddUser' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'AddUserClaimValue' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'AddUserClaimValues' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'AdminController' => $baseDir . '/app/controllers/AdminController.php',
 +    'Airavata\\API\\AiravataClient' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\AiravataIf' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addCloudJobSubmissionDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addCloudJobSubmissionDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addGatewayComputeResourcePreference_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addGatewayComputeResourcePreference_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addGateway_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addGateway_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addGridFTPDataMovementDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addGridFTPDataMovementDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addLocalDataMovementDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addLocalDataMovementDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addLocalSubmissionDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addLocalSubmissionDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addSCPDataMovementDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addSCPDataMovementDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addSSHJobSubmissionDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addSSHJobSubmissionDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addUNICOREJobSubmissionDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addUNICOREJobSubmissionDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addUnicoreDataMovementDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_addUnicoreDataMovementDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_changeDataMovementPriorities_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_changeDataMovementPriorities_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_changeDataMovementPriority_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_changeDataMovementPriority_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_changeJobSubmissionPriorities_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_changeJobSubmissionPriorities_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_changeJobSubmissionPriority_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_changeJobSubmissionPriority_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_cloneExperiment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_cloneExperiment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_createExperiment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_createExperiment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_createProject_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_createProject_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteApplicationDeployment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteApplicationDeployment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteApplicationInterface_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteApplicationInterface_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteApplicationModule_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteApplicationModule_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteBatchQueue_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteBatchQueue_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteComputeResource_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteComputeResource_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteDataMovementInterface_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteDataMovementInterface_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteGatewayComputeResourcePreference_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteGatewayComputeResourcePreference_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteGatewayResourceProfile_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteGatewayResourceProfile_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteGateway_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteGateway_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteJobSubmissionInterface_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteJobSubmissionInterface_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteProject_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteProject_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteResourceJobManager_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteResourceJobManager_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_deleteWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_generateAndRegisterSSHKeys_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_generateAndRegisterSSHKeys_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAPIVersion_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAPIVersion_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllAppModules_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllAppModules_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllApplicationDeployments_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllApplicationDeployments_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllApplicationInterfaceNames_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllApplicationInterfaceNames_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllApplicationInterfaces_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllApplicationInterfaces_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllComputeResourceNames_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllComputeResourceNames_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllExperimentsInProject_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllExperimentsInProject_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllGatewayComputeResourcePreferences_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllGatewayComputeResourcePreferences_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllGatewayComputeResources_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllGatewayComputeResources_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllGateways_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllGateways_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllUserExperiments_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllUserExperiments_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllUserProjects_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllUserProjects_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllUserSSHPubKeys_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllUserSSHPubKeys_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllWorkflows_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAllWorkflows_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAppModuleDeployedResources_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAppModuleDeployedResources_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getApplicationDeployment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getApplicationDeployment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getApplicationInputs_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getApplicationInputs_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getApplicationInterface_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getApplicationInterface_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getApplicationModule_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getApplicationModule_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getApplicationOutputs_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getApplicationOutputs_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAvailableAppInterfaceComputeResources_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getAvailableAppInterfaceComputeResources_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getCloudJobSubmission_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getCloudJobSubmission_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getComputeResource_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getComputeResource_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getDataTransferDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getDataTransferDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getExperimentOutputs_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getExperimentOutputs_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getExperimentStatus_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getExperimentStatus_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getExperiment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getExperiment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getGatewayComputeResourcePreference_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getGatewayComputeResourcePreference_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getGatewayResourceProfile_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getGatewayResourceProfile_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getGateway_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getGateway_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getGridFTPDataMovement_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getGridFTPDataMovement_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getIntermediateOutputs_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getIntermediateOutputs_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getJobDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getJobDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getJobStatuses_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getJobStatuses_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getLocalDataMovement_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getLocalDataMovement_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getLocalJobSubmission_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getLocalJobSubmission_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getProject_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getProject_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getResourceJobManager_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getResourceJobManager_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getSCPDataMovement_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getSCPDataMovement_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getSSHJobSubmission_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getSSHJobSubmission_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getSSHPubKey_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getSSHPubKey_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getUnicoreDataMovement_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getUnicoreDataMovement_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getUnicoreJobSubmission_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getUnicoreJobSubmission_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getWorkflowTemplateId_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getWorkflowTemplateId_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_getWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_isGatewayExist_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_isGatewayExist_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_isWorkflowExistWithName_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_isWorkflowExistWithName_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_launchExperiment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_launchExperiment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_registerApplicationDeployment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_registerApplicationDeployment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_registerApplicationInterface_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_registerApplicationInterface_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_registerApplicationModule_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_registerApplicationModule_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_registerComputeResource_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_registerComputeResource_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_registerGatewayResourceProfile_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_registerGatewayResourceProfile_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_registerResourceJobManager_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_registerResourceJobManager_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_registerWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_registerWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_searchExperimentsByApplication_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_searchExperimentsByApplication_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_searchExperimentsByCreationTime_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_searchExperimentsByCreationTime_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_searchExperimentsByDesc_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_searchExperimentsByDesc_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_searchExperimentsByName_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_searchExperimentsByName_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_searchExperimentsByStatus_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_searchExperimentsByStatus_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_searchProjectsByProjectDesc_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_searchProjectsByProjectDesc_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_searchProjectsByProjectName_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_searchProjectsByProjectName_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_terminateExperiment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_terminateExperiment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateApplicationDeployment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateApplicationDeployment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateApplicationInterface_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateApplicationInterface_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateApplicationModule_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateApplicationModule_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateCloudJobSubmissionDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateCloudJobSubmissionDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateComputeResource_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateComputeResource_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateExperimentConfiguration_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateExperimentConfiguration_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateExperiment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateExperiment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateGatewayComputeResourcePreference_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateGatewayComputeResourcePreference_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateGatewayResourceProfile_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateGatewayResourceProfile_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateGateway_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateGateway_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateGridFTPDataMovementDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateGridFTPDataMovementDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateLocalDataMovementDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateLocalDataMovementDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateLocalSubmissionDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateLocalSubmissionDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateProject_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateProject_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateResourceJobManager_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateResourceJobManager_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateResourceScheduleing_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateResourceScheduleing_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateSCPDataMovementDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateSCPDataMovementDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateSSHJobSubmissionDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateSSHJobSubmissionDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateUnicoreDataMovementDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateUnicoreDataMovementDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateUnicoreJobSubmissionDetails_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateUnicoreJobSubmissionDetails_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_updateWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_validateExperiment_args' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Airavata_validateExperiment_result' => $baseDir . '/app/libraries/Airavata/API/Airavata.php',
 +    'Airavata\\API\\Error\\AiravataClientException' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
 +    'Airavata\\API\\Error\\AiravataErrorType' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
 +    'Airavata\\API\\Error\\AiravataSystemException' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
 +    'Airavata\\API\\Error\\AuthenticationException' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
 +    'Airavata\\API\\Error\\AuthorizationException' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
 +    'Airavata\\API\\Error\\ExperimentNotFoundException' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
 +    'Airavata\\API\\Error\\InvalidRequestException' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
 +    'Airavata\\API\\Error\\LaunchValidationException' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
 +    'Airavata\\API\\Error\\ProjectNotFoundException' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
 +    'Airavata\\API\\Error\\TimedOutException' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
 +    'Airavata\\API\\Error\\ValidationResults' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
 +    'Airavata\\API\\Error\\ValidatorResult' => $baseDir . '/app/libraries/Airavata/API/Error/Types.php',
 +    'Airavata\\API\\WorkflowClient' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
 +    'Airavata\\API\\WorkflowIf' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
 +    'Airavata\\API\\Workflow\\WorkflowClient' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
 +    'Airavata\\API\\Workflow\\WorkflowIf' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
 +    'Airavata\\API\\Workflow\\Workflow_deleteWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
 +    'Airavata\\API\\Workflow\\Workflow_deleteWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
 +    'Airavata\\API\\Workflow\\Workflow_getAllWorkflows_args' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
 +    'Airavata\\API\\Workflow\\Workflow_getAllWorkflows_result' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
 +    'Airavata\\API\\Workflow\\Workflow_getWorkflowTemplateId_args' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
 +    'Airavata\\API\\Workflow\\Workflow_getWorkflowTemplateId_result' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
 +    'Airavata\\API\\Workflow\\Workflow_getWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
 +    'Airavata\\API\\Workflow\\Workflow_getWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
 +    'Airavata\\API\\Workflow\\Workflow_isWorkflowExistWithName_args' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
 +    'Airavata\\API\\Workflow\\Workflow_isWorkflowExistWithName_result' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
 +    'Airavata\\API\\Workflow\\Workflow_registerWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
 +    'Airavata\\API\\Workflow\\Workflow_registerWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
 +    'Airavata\\API\\Workflow\\Workflow_updateWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
 +    'Airavata\\API\\Workflow\\Workflow_updateWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Workflow/Workflow.php',
 +    'Airavata\\API\\Workflow_deleteWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
 +    'Airavata\\API\\Workflow_deleteWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
 +    'Airavata\\API\\Workflow_getAllWorkflows_args' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
 +    'Airavata\\API\\Workflow_getAllWorkflows_result' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
 +    'Airavata\\API\\Workflow_getWorkflowTemplateId_args' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
 +    'Airavata\\API\\Workflow_getWorkflowTemplateId_result' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
 +    'Airavata\\API\\Workflow_getWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
 +    'Airavata\\API\\Workflow_getWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
 +    'Airavata\\API\\Workflow_isWorkflowExistWithName_args' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
 +    'Airavata\\API\\Workflow_isWorkflowExistWithName_result' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
 +    'Airavata\\API\\Workflow_registerWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
 +    'Airavata\\API\\Workflow_registerWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
 +    'Airavata\\API\\Workflow_updateWorkflow_args' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
 +    'Airavata\\API\\Workflow_updateWorkflow_result' => $baseDir . '/app/libraries/Airavata/API/Workflow.php',
 +    'Airavata\\Client\\AiravataClientFactory' => $baseDir . '/app/libraries/AiravataClientFactory.php',
 +    'Airavata\\Model\\AppCatalog\\AppDeployment\\ApplicationDeploymentDescription' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/AppDeployment/Types.php',
 +    'Airavata\\Model\\AppCatalog\\AppDeployment\\ApplicationModule' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/AppDeployment/Types.php',
 +    'Airavata\\Model\\AppCatalog\\AppDeployment\\ApplicationParallelismType' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/AppDeployment/Types.php',
 +    'Airavata\\Model\\AppCatalog\\AppDeployment\\SetEnvPaths' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/AppDeployment/Types.php',
 +    'Airavata\\Model\\AppCatalog\\AppInterface\\ApplicationInterfaceDescription' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/AppInterface/Types.php',
 +    'Airavata\\Model\\AppCatalog\\AppInterface\\DataType' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/AppInterface/Types.php',
 +    'Airavata\\Model\\AppCatalog\\AppInterface\\InputDataObjectType' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/AppInterface/Types.php',
 +    'Airavata\\Model\\AppCatalog\\AppInterface\\OutputDataObjectType' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/AppInterface/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ApplicationDeployment' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ApplicationDescriptor' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ApplicationInterface' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResourceDescription' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\BatchQueue' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\CloudJobSubmission' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\ComputeResourceDescription' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\DataMovementInterface' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\DataMovementProtocol' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\FileSystems' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\GlobusJobSubmission' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\GridFTPDataMovement' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\JobManagerCommand' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\JobSubmissionInterface' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\JobSubmissionProtocol' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\LOCALDataMovement' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\LOCALSubmission' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\MonitorMode' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\ProviderName' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\ResourceJobManager' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\ResourceJobManagerType' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\SCPDataMovement' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\SSHJobSubmission' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\SecurityProtocol' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\UnicoreDataMovement' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ComputeResource\\UnicoreJobSubmission' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/ComputeResource/Types.php',
 +    'Airavata\\Model\\AppCatalog\\DataMovementProtocol' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
 +    'Airavata\\Model\\AppCatalog\\GSISSHJobSubmission' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
 +    'Airavata\\Model\\AppCatalog\\GatewayProfile\\ComputeResourcePreference' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/GatewayProfile/Types.php',
 +    'Airavata\\Model\\AppCatalog\\GatewayProfile\\GatewayResourceProfile' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/GatewayProfile/Types.php',
 +    'Airavata\\Model\\AppCatalog\\GlobusJobSubmission' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
 +    'Airavata\\Model\\AppCatalog\\GridFTPDataMovement' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
 +    'Airavata\\Model\\AppCatalog\\JobSubmissionProtocol' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
 +    'Airavata\\Model\\AppCatalog\\ResourceJobManager' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
 +    'Airavata\\Model\\AppCatalog\\SCPDataMovement' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
 +    'Airavata\\Model\\AppCatalog\\SSHJobSubmission' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
 +    'Airavata\\Model\\AppCatalog\\SecurityProtocol' => $baseDir . '/app/libraries/Airavata/Model/AppCatalog/Types.php',
 +    'Airavata\\Model\\Messaging\\Event\\ExperimentStatusChangeEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
 +    'Airavata\\Model\\Messaging\\Event\\JobIdentifier' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
 +    'Airavata\\Model\\Messaging\\Event\\JobStatusChangeEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
 +    'Airavata\\Model\\Messaging\\Event\\JobStatusChangeRequestEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
 +    'Airavata\\Model\\Messaging\\Event\\Message' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
 +    'Airavata\\Model\\Messaging\\Event\\MessageLevel' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
 +    'Airavata\\Model\\Messaging\\Event\\MessageType' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
 +    'Airavata\\Model\\Messaging\\Event\\ProcessSubmitEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
 +    'Airavata\\Model\\Messaging\\Event\\TaskIdentifier' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
 +    'Airavata\\Model\\Messaging\\Event\\TaskOutputChangeEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
 +    'Airavata\\Model\\Messaging\\Event\\TaskStatusChangeEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
 +    'Airavata\\Model\\Messaging\\Event\\TaskStatusChangeRequestEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
 +    'Airavata\\Model\\Messaging\\Event\\TaskSubmitEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
 +    'Airavata\\Model\\Messaging\\Event\\TaskTerminateEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
 +    'Airavata\\Model\\Messaging\\Event\\WorkflowIdentifier' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
 +    'Airavata\\Model\\Messaging\\Event\\WorkflowNodeStatusChangeEvent' => $baseDir . '/app/libraries/Airavata/Model/Messaging/Event/Types.php',
 +    'Airavata\\Model\\Workflow' => $baseDir . '/app/libraries/Airavata/Model/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\ActionableGroup' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\AdvancedInputDataHandling' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\AdvancedOutputDataHandling' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\ApplicationStatus' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\ComputationalResourceScheduling' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\CorrectiveAction' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\DataTransferDetails' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\ErrorCategory' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\ErrorDetails' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\ExecutionUnit' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\Experiment' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\ExperimentState' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\ExperimentStatus' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\ExperimentSummary' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\JobDetails' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\JobState' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\JobStatus' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\QualityOfServiceParams' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\TaskDetails' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\TaskState' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\TaskStatus' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\TransferState' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\TransferStatus' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\UserConfigurationData' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\ValidationResults' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\ValidatorResult' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\WorkflowNodeDetails' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\WorkflowNodeState' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Experiment\\WorkflowNodeStatus' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Experiment/Types.php',
 +    'Airavata\\Model\\Workspace\\Gateway' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Types.php',
 +    'Airavata\\Model\\Workspace\\Group' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Types.php',
 +    'Airavata\\Model\\Workspace\\Project' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Types.php',
 +    'Airavata\\Model\\Workspace\\User' => $baseDir . '/app/libraries/Airavata/Model/Workspace/Types.php',
 +    'AppUtilities' => $baseDir . '/app/libraries/AppUtilities.php',
 +    'ApplicationController' => $baseDir . '/app/controllers/ApplicationController.php',
 +    'Authenticate' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'AuthenticateResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'BaseController' => $baseDir . '/app/controllers/BaseController.php',
 +    'Boris\\Boris' => $vendorDir . '/d11wtq/boris/lib/Boris/Boris.php',
 +    'Boris\\CLIOptionsHandler' => $vendorDir . '/d11wtq/boris/lib/Boris/CLIOptionsHandler.php',
 +    'Boris\\ColoredInspector' => $vendorDir . '/d11wtq/boris/lib/Boris/ColoredInspector.php',
 +    'Boris\\Config' => $vendorDir . '/d11wtq/boris/lib/Boris/Config.php',
 +    'Boris\\DumpInspector' => $vendorDir . '/d11wtq/boris/lib/Boris/DumpInspector.php',
 +    'Boris\\EvalWorker' => $vendorDir . '/d11wtq/boris/lib/Boris/EvalWorker.php',
 +    'Boris\\ExportInspector' => $vendorDir . '/d11wtq/boris/lib/Boris/ExportInspector.php',
 +    'Boris\\Inspector' => $vendorDir . '/d11wtq/boris/lib/Boris/Inspector.php',
 +    'Boris\\ReadlineClient' => $vendorDir . '/d11wtq/boris/lib/Boris/ReadlineClient.php',
 +    'Boris\\ShallowParser' => $vendorDir . '/d11wtq/boris/lib/Boris/ShallowParser.php',
 +    'CRUtilities' => $baseDir . '/app/libraries/CRUtilities.php',
 +    'Carbon\\Carbon' => $vendorDir . '/nesbot/carbon/src/Carbon/Carbon.php',
 +    'ClaimDTO' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'ClaimValue' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'ClassPreloader\\Application' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/Application.php',
 +    'ClassPreloader\\ClassList' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/ClassList.php',
 +    'ClassPreloader\\ClassLoader' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/ClassLoader.php',
 +    'ClassPreloader\\ClassNode' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/ClassNode.php',
 +    'ClassPreloader\\Command\\PreCompileCommand' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/Command/PreCompileCommand.php',
 +    'ClassPreloader\\Config' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/Config.php',
 +    'ClassPreloader\\Parser\\AbstractNodeVisitor' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/Parser/AbstractNodeVisitor.php',
 +    'ClassPreloader\\Parser\\DirVisitor' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/Parser/DirVisitor.php',
 +    'ClassPreloader\\Parser\\FileVisitor' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/Parser/FileVisitor.php',
 +    'ClassPreloader\\Parser\\NodeTraverser' => $vendorDir . '/classpreloader/classpreloader/src/ClassPreloader/Parser/NodeTraverser.php',
-     'ComputeResource' => $baseDir . '/app/controllers/ComputeResource.php',
 +    'Constant' => $baseDir . '/app/models/Constant.php',
 +    'Crypt_AES' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/AES.php',
 +    'Crypt_Base' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Base.php',
 +    'Crypt_Blowfish' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php',
 +    'Crypt_DES' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/DES.php',
 +    'Crypt_Hash' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Hash.php',
 +    'Crypt_RC2' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/RC2.php',
 +    'Crypt_RC4' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/RC4.php',
 +    'Crypt_RSA' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/RSA.php',
 +    'Crypt_Rijndael' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php',
 +    'Crypt_TripleDES' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.php',
 +    'Crypt_Twofish' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php',
 +    'DatabaseSeeder' => $baseDir . '/app/database/seeds/DatabaseSeeder.php',
 +    'DeleteRole' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'DeleteUser' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'DeleteUserClaimValue' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'DeleteUserClaimValues' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'ExpUtilities' => $baseDir . '/app/libraries/ExpUtilities.php',
 +    'ExperimentController' => $baseDir . '/app/controllers/ExperimentController.php',
 +    'File_ANSI' => $vendorDir . '/phpseclib/phpseclib/phpseclib/File/ANSI.php',
 +    'File_ASN1' => $vendorDir . '/phpseclib/phpseclib/phpseclib/File/ASN1.php',
 +    'File_ASN1_Element' => $vendorDir . '/phpseclib/phpseclib/phpseclib/File/ASN1.php',
 +    'File_X509' => $vendorDir . '/phpseclib/phpseclib/phpseclib/File/X509.php',
 +    'GatewayprofileController' => $baseDir . '/app/controllers/GatewayprofileController.php',
 +    'GetAllProfileNames' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetAllProfileNamesResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetHybridRoles' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetHybridRolesResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetPasswordExpirationTime' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetPasswordExpirationTimeResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetProfileNames' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetProfileNamesResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetProperties' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetPropertiesResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetRoleListOfUser' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetRoleNames' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetRoleNamesResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetTenantId' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetTenantIdResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetTenantIdofUser' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetTenantIdofUserResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetUserClaimValue' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetUserClaimValueResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetUserClaimValues' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetUserClaimValuesForClaims' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetUserClaimValuesForClaimsResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetUserClaimValuesResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetUserId' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetUserIdResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetUserList' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetUserListOfRole' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetUserListOfRoleResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'GetUserListResponse' => $baseDir . '/app/libraries/UserStoreManager/UserStoreManager.stub.php',
 +    'HomeController' => $baseDir . '/app/controllers/HomeController.php',
 +    'IdUtilities' => $baseDir . '/app/libraries/id_utilities.php',
 +    'IlluminateQueueClosure' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/IlluminateQueueClosure.php',
 +    'Illuminate\\Auth\\AuthManager' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/AuthManager.php',
 +    'Illuminate\\Auth\\AuthServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/AuthServiceProvider.php',
 +    'Illuminate\\Auth\\Console\\ClearRemindersCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Console/ClearRemindersCommand.php',
 +    'Illuminate\\Auth\\Console\\RemindersControllerCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Console/RemindersControllerCommand.php',
 +    'Illuminate\\Auth\\Console\\RemindersTableCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Console/RemindersTableCommand.php',
 +    'Illuminate\\Auth\\DatabaseUserProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/DatabaseUserProvider.php',
 +    'Illuminate\\Auth\\EloquentUserProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php',
 +    'Illuminate\\Auth\\GenericUser' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/GenericUser.php',
 +    'Illuminate\\Auth\\Guard' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Guard.php',
 +    'Illuminate\\Auth\\Reminders\\DatabaseReminderRepository' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Reminders/DatabaseReminderRepository.php',
 +    'Illuminate\\Auth\\Reminders\\PasswordBroker' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Reminders/PasswordBroker.php',
 +    'Illuminate\\Auth\\Reminders\\RemindableInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Reminders/RemindableInterface.php',
 +    'Illuminate\\Auth\\Reminders\\RemindableTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Reminders/RemindableTrait.php',
 +    'Illuminate\\Auth\\Reminders\\ReminderRepositoryInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Reminders/ReminderRepositoryInterface.php',
 +    'Illuminate\\Auth\\Reminders\\ReminderServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Reminders/ReminderServiceProvider.php',
 +    'Illuminate\\Auth\\UserInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/UserInterface.php',
 +    'Illuminate\\Auth\\UserProviderInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/UserProviderInterface.php',
 +    'Illuminate\\Auth\\UserTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/UserTrait.php',
 +    'Illuminate\\Cache\\ApcStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/ApcStore.php',
 +    'Illuminate\\Cache\\ApcWrapper' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/ApcWrapper.php',
 +    'Illuminate\\Cache\\ArrayStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/ArrayStore.php',
 +    'Illuminate\\Cache\\CacheManager' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/CacheManager.php',
 +    'Illuminate\\Cache\\CacheServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php',
 +    'Illuminate\\Cache\\Console\\CacheTableCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/Console/CacheTableCommand.php',
 +    'Illuminate\\Cache\\Console\\ClearCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/Console/ClearCommand.php',
 +    'Illuminate\\Cache\\DatabaseStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/DatabaseStore.php',
 +    'Illuminate\\Cache\\FileStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/FileStore.php',
 +    'Illuminate\\Cache\\MemcachedConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/MemcachedConnector.php',
 +    'Illuminate\\Cache\\MemcachedStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/MemcachedStore.php',
 +    'Illuminate\\Cache\\NullStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/NullStore.php',
 +    'Illuminate\\Cache\\RedisStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/RedisStore.php',
 +    'Illuminate\\Cache\\RedisTaggedCache' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/RedisTaggedCache.php',
 +    'Illuminate\\Cache\\Repository' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/Repository.php',
 +    'Illuminate\\Cache\\StoreInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/StoreInterface.php',
 +    'Illuminate\\Cache\\TagSet' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/TagSet.php',
 +    'Illuminate\\Cache\\TaggableStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/TaggableStore.php',
 +    'Illuminate\\Cache\\TaggedCache' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/TaggedCache.php',
 +    'Illuminate\\Cache\\WinCacheStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/WinCacheStore.php',
 +    'Illuminate\\Cache\\XCacheStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/XCacheStore.php',
 +    'Illuminate\\Config\\EnvironmentVariables' => $vendorDir . '/laravel/framework/src/Illuminate/Config/EnvironmentVariables.php',
 +    'Illuminate\\Config\\EnvironmentVariablesLoaderInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Config/EnvironmentVariablesLoaderInterface.php',
 +    'Illuminate\\Config\\FileEnvironmentVariablesLoader' => $vendorDir . '/laravel/framework/src/Illuminate/Config/FileEnvironmentVariablesLoader.php',
 +    'Illuminate\\Config\\FileLoader' => $vendorDir . '/laravel/framework/src/Illuminate/Config/FileLoader.php',
 +    'Illuminate\\Config\\LoaderInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Config/LoaderInterface.php',
 +    'Illuminate\\Config\\Repository' => $vendorDir . '/laravel/framework/src/Illuminate/Config/Repository.php',
 +    'Illuminate\\Console\\Application' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Application.php',
 +    'Illuminate\\Console\\Command' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Command.php',
 +    'Illuminate\\Console\\ConfirmableTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Console/ConfirmableTrait.php',
 +    'Illuminate\\Container\\BindingResolutionException' => $vendorDir . '/laravel/framework/src/Illuminate/Container/BindingResolutionException.php',
 +    'Illuminate\\Container\\Container' => $vendorDir . '/laravel/framework/src/Illuminate/Container/Container.php',
 +    'Illuminate\\Cookie\\CookieJar' => $vendorDir . '/laravel/framework/src/Illuminate/Cookie/CookieJar.php',
 +    'Illuminate\\Cookie\\CookieServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Cookie/CookieServiceProvider.php',
 +    'Illuminate\\Cookie\\Guard' => $vendorDir . '/laravel/framework/src/Illuminate/Cookie/Guard.php',
 +    'Illuminate\\Cookie\\Queue' => $vendorDir . '/laravel/framework/src/Illuminate/Cookie/Queue.php',
 +    'Illuminate\\Database\\Capsule\\Manager' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Capsule/Manager.php',
 +    'Illuminate\\Database\\Connection' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Connection.php',
 +    'Illuminate\\Database\\ConnectionInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Database/ConnectionInterface.php',
 +    'Illuminate\\Database\\ConnectionResolver' => $vendorDir . '/laravel/framework/src/Illuminate/Database/ConnectionResolver.php',
 +    'Illuminate\\Database\\ConnectionResolverInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Database/ConnectionResolverInterface.php',
 +    'Illuminate\\Database\\Connectors\\ConnectionFactory' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php',
 +    'Illuminate\\Database\\Connectors\\Connector' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Connectors/Connector.php',
 +    'Illuminate\\Database\\Connectors\\ConnectorInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Connectors/ConnectorInterface.php',
 +    'Illuminate\\Database\\Connectors\\MySqlConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php',
 +    'Illuminate\\Database\\Connectors\\PostgresConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Connectors/PostgresConnector.php',
 +    'Illuminate\\Database\\Connectors\\SQLiteConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Connectors/SQLiteConnector.php',
 +    'Illuminate\\Database\\Connectors\\SqlServerConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Connectors/SqlServerConnector.php',
 +    'Illuminate\\Database\\Console\\Migrations\\BaseCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Migrations/BaseCommand.php',
 +    'Illuminate\\Database\\Console\\Migrations\\InstallCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Migrations/InstallCommand.php',
 +    'Illuminate\\Database\\Console\\Migrations\\MigrateCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php',
 +    'Illuminate\\Database\\Console\\Migrations\\MigrateMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php',
 +    'Illuminate\\Database\\Console\\Migrations\\RefreshCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Migrations/RefreshCommand.php',
 +    'Illuminate\\Database\\Console\\Migrations\\ResetCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Migrations/ResetCommand.php',
 +    'Illuminate\\Database\\Console\\Migrations\\RollbackCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Migrations/RollbackCommand.php',
 +    'Illuminate\\Database\\Console\\SeedCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/SeedCommand.php',
 +    'Illuminate\\Database\\DatabaseManager' => $vendorDir . '/laravel/framework/src/Illuminate/Database/DatabaseManager.php',
 +    'Illuminate\\Database\\DatabaseServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Database/DatabaseServiceProvider.php',
 +    'Illuminate\\Database\\Eloquent\\Builder' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php',
 +    'Illuminate\\Database\\Eloquent\\Collection' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php',
 +    'Illuminate\\Database\\Eloquent\\MassAssignmentException' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/MassAssignmentException.php',
 +    'Illuminate\\Database\\Eloquent\\Model' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Model.php',
 +    'Illuminate\\Database\\Eloquent\\ModelNotFoundException' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/ModelNotFoundException.php',
 +    'Illuminate\\Database\\Eloquent\\Relations\\BelongsTo' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php',
 +    'Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php',
 +    'Illuminate\\Database\\Eloquent\\Relations\\HasMany' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasMany.php',
 +    'Illuminate\\Database\\Eloquent\\Relations\\HasManyThrough' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasManyThrough.php',
 +    'Illuminate\\Database\\Eloquent\\Relations\\HasOne' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOne.php',
 +    'Illuminate\\Database\\Eloquent\\Relations\\HasOneOrMany' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php',
 +    'Illuminate\\Database\\Eloquent\\Relations\\MorphMany' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphMany.php',
 +    'Illuminate\\Database\\Eloquent\\Relations\\MorphOne' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOne.php',
 +    'Illuminate\\Database\\Eloquent\\Relations\\MorphOneOrMany' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOneOrMany.php',
 +    'Illuminate\\Database\\Eloquent\\Relations\\MorphPivot' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphPivot.php',
 +    'Illuminate\\Database\\Eloquent\\Relations\\MorphTo' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphTo.php',
 +    'Illuminate\\Database\\Eloquent\\Relations\\MorphToMany' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphToMany.php',
 +    'Illuminate\\Database\\Eloquent\\Relations\\Pivot' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Pivot.php',
 +    'Illuminate\\Database\\Eloquent\\Relations\\Relation' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Relation.php',
 +    'Illuminate\\Database\\Eloquent\\ScopeInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/ScopeInterface.php',
 +    'Illuminate\\Database\\Eloquent\\SoftDeletingScope' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingScope.php',
 +    'Illuminate\\Database\\Eloquent\\SoftDeletingTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingTrait.php',
 +    'Illuminate\\Database\\Grammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Grammar.php',
 +    'Illuminate\\Database\\MigrationServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Database/MigrationServiceProvider.php',
 +    'Illuminate\\Database\\Migrations\\DatabaseMigrationRepository' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Migrations/DatabaseMigrationRepository.php',
 +    'Illuminate\\Database\\Migrations\\Migration' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Migrations/Migration.php',
 +    'Illuminate\\Database\\Migrations\\MigrationCreator' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Migrations/MigrationCreator.php',
 +    'Illuminate\\Database\\Migrations\\MigrationRepositoryInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Migrations/MigrationRepositoryInterface.php',
 +    'Illuminate\\Database\\Migrations\\Migrator' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php',
 +    'Illuminate\\Database\\MySqlConnection' => $vendorDir . '/laravel/framework/src/Illuminate/Database/MySqlConnection.php',
 +    'Illuminate\\Database\\PostgresConnection' => $vendorDir . '/laravel/framework/src/Illuminate/Database/PostgresConnection.php',
 +    'Illuminate\\Database\\QueryException' => $vendorDir . '/laravel/framework/src/Illuminate/Database/QueryException.php',
 +    'Illuminate\\Database\\Query\\Builder' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Builder.php',
 +    'Illuminate\\Database\\Query\\Expression' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Expression.php',
 +    'Illuminate\\Database\\Query\\Grammars\\Grammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php',
 +    'Illuminate\\Database\\Query\\Grammars\\MySqlGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php',
 +    'Illuminate\\Database\\Query\\Grammars\\PostgresGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php',
 +    'Illuminate\\Database\\Query\\Grammars\\SQLiteGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php',
 +    'Illuminate\\Database\\Query\\Grammars\\SqlServerGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php',
 +    'Illuminate\\Database\\Query\\JoinClause' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/JoinClause.php',
 +    'Illuminate\\Database\\Query\\Processors\\MySqlProcessor' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Processors/MySqlProcessor.php',
 +    'Illuminate\\Database\\Query\\Processors\\PostgresProcessor' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Processors/PostgresProcessor.php',
 +    'Illuminate\\Database\\Query\\Processors\\Processor' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php',
 +    'Illuminate\\Database\\Query\\Processors\\SQLiteProcessor' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Processors/SQLiteProcessor.php',
 +    'Illuminate\\Database\\Query\\Processors\\SqlServerProcessor' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Processors/SqlServerProcessor.php',
 +    'Illuminate\\Database\\SQLiteConnection' => $vendorDir . '/laravel/framework/src/Illuminate/Database/SQLiteConnection.php',
 +    'Illuminate\\Database\\Schema\\Blueprint' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php',
 +    'Illuminate\\Database\\Schema\\Builder' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Builder.php',
 +    'Illuminate\\Database\\Schema\\Grammars\\Grammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/Grammar.php',
 +    'Illuminate\\Database\\Schema\\Grammars\\MySqlGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php',
 +    'Illuminate\\Database\\Schema\\Grammars\\PostgresGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php',
 +    'Illuminate\\Database\\Schema\\Grammars\\SQLiteGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/SQLiteGrammar.php',
 +    'Illuminate\\Database\\Schema\\Grammars\\SqlServerGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php',
 +    'Illuminate\\Database\\Schema\\MySqlBuilder' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/MySqlBuilder.php',
 +    'Illuminate\\Database\\SeedServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Database/SeedServiceProvider.php',
 +    'Illuminate\\Database\\Seeder' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Seeder.php',
 +    'Illuminate\\Database\\SqlServerConnection' => $vendorDir . '/laravel/framework/src/Illuminate/Database/SqlServerConnection.php',
 +    'Illuminate\\Encryption\\DecryptException' => $vendorDir . '/laravel/framework/src/Illuminate/Encryption/DecryptException.php',
 +    'Illuminate\\Encryption\\Encrypter' => $vendorDir . '/laravel/framework/src/Illuminate/Encryption/Encrypter.php',
 +    'Illuminate\\Encryption\\EncryptionServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php',
 +    'Illuminate\\Encryption\\InvalidKeyException' => $vendorDir . '/laravel/framework/src/Illuminate/Encryption/InvalidKeyException.php',
 +    'Illuminate\\Events\\Dispatcher' => $vendorDir . '/laravel/framework/src/Illuminate/Events/Dispatcher.php',
 +    'Illuminate\\Events\\EventServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Events/EventServiceProvider.php',
 +    'Illuminate\\Exception\\ExceptionDisplayerInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Exception/ExceptionDisplayerInterface.php',
 +    'Illuminate\\Exception\\ExceptionServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Exception/ExceptionServiceProvider.php',
 +    'Illuminate\\Exception\\Handler' => $vendorDir . '/laravel/framework/src/Illuminate/Exception/Handler.php',
 +    'Illuminate\\Exception\\PlainDisplayer' => $vendorDir . '/laravel/framework/src/Illuminate/Exception/PlainDisplayer.php',
 +    'Illuminate\\Exception\\SymfonyDisplayer' => $vendorDir . '/laravel/framework/src/Illuminate/Exception/SymfonyDisplayer.php',
 +    'Illuminate\\Exception\\WhoopsDisplayer' => $vendorDir . '/laravel/framework/src/Illuminate/Exception/WhoopsDisplayer.php',
 +    'Illuminate\\Filesystem\\FileNotFoundException' => $vendorDir . '/laravel/framework/src/Illuminate/Filesystem/FileNotFoundException.php',
 +    'Illuminate\\Filesystem\\Filesystem' => $vendorDir . '/laravel/framework/src/Illuminate/Filesystem/Filesystem.php',
 +    'Illuminate\\Filesystem\\FilesystemServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php',
 +    'Illuminate\\Foundation\\AliasLoader' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/AliasLoader.php',
 +    'Illuminate\\Foundation\\Application' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Application.php',
 +    'Illuminate\\Foundation\\Artisan' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Artisan.php',
 +    'Illuminate\\Foundation\\AssetPublisher' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/AssetPublisher.php',
 +    'Illuminate\\Foundation\\Composer' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Composer.php',
 +    'Illuminate\\Foundation\\ConfigPublisher' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/ConfigPublisher.php',
 +    'Illuminate\\Foundation\\Console\\AssetPublishCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/AssetPublishCommand.php',
 +    'Illuminate\\Foundation\\Console\\AutoloadCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/AutoloadCommand.php',
 +    'Illuminate\\Foundation\\Console\\ChangesCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ChangesCommand.php',
 +    'Illuminate\\Foundation\\Console\\ClearCompiledCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ClearCompiledCommand.php',
 +    'Illuminate\\Foundation\\Console\\CommandMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/CommandMakeCommand.php',
 +    'Illuminate\\Foundation\\Console\\ConfigPublishCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ConfigPublishCommand.php',
 +    'Illuminate\\Foundation\\Console\\DownCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/DownCommand.php',
 +    'Illuminate\\Foundation\\Console\\EnvironmentCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/EnvironmentCommand.php',
 +    'Illuminate\\Foundation\\Console\\KeyGenerateCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/KeyGenerateCommand.php',
 +    'Illuminate\\Foundation\\Console\\MigratePublishCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/MigratePublishCommand.php',
 +    'Illuminate\\Foundation\\Console\\OptimizeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/OptimizeCommand.php',
 +    'Illuminate\\Foundation\\Console\\RoutesCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/RoutesCommand.php',
 +    'Illuminate\\Foundation\\Console\\ServeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php',
 +    'Illuminate\\Foundation\\Console\\TailCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/TailCommand.php',
 +    'Illuminate\\Foundation\\Console\\TinkerCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/TinkerCommand.php',
 +    'Illuminate\\Foundation\\Console\\UpCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/UpCommand.php',
 +    'Illuminate\\Foundation\\Console\\ViewPublishCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ViewPublishCommand.php',
 +    'Illuminate\\Foundation\\EnvironmentDetector' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/EnvironmentDetector.php',
 +    'Illuminate\\Foundation\\MigrationPublisher' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/MigrationPublisher.php',
 +    'Illuminate\\Foundation\\ProviderRepository' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php',
 +    'Illuminate\\Foundation\\Providers\\ArtisanServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/ArtisanServiceProvider.php',
 +    'Illuminate\\Foundation\\Providers\\CommandCreatorServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/CommandCreatorServiceProvider.php',
 +    'Illuminate\\Foundation\\Providers\\ComposerServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/ComposerServiceProvider.php',
 +    'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/ConsoleSupportServiceProvider.php',
 +    'Illuminate\\Foundation\\Providers\\KeyGeneratorServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/KeyGeneratorServiceProvider.php',
 +    'Illuminate\\Foundation\\Providers\\MaintenanceServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/MaintenanceServiceProvider.php',
 +    'Illuminate\\Foundation\\Providers\\OptimizeServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/OptimizeServiceProvider.php',
 +    'Illuminate\\Foundation\\Providers\\PublisherServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/PublisherServiceProvider.php',
 +    'Illuminate\\Foundation\\Providers\\RouteListServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/RouteListServiceProvider.php',
 +    'Illuminate\\Foundation\\Providers\\ServerServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/ServerServiceProvider.php',
 +    'Illuminate\\Foundation\\Providers\\TinkerServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Providers/TinkerServiceProvider.php',
 +    'Illuminate\\Foundation\\Testing\\ApplicationTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/ApplicationTrait.php',
 +    'Illuminate\\Foundation\\Testing\\AssertionsTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/AssertionsTrait.php',
 +    'Illuminate\\Foundation\\Testing\\Client' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/Client.php',
 +    'Illuminate\\Foundation\\Testing\\TestCase' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php',
 +    'Illuminate\\Foundation\\ViewPublisher' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/ViewPublisher.php',
 +    'Illuminate\\Hashing\\BcryptHasher' => $vendorDir . '/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php',
 +    'Illuminate\\Hashing\\HashServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Hashing/HashServiceProvider.php',
 +    'Illuminate\\Hashing\\HasherInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Hashing/HasherInterface.php',
 +    'Illuminate\\Html\\FormBuilder' => $vendorDir . '/laravel/framework/src/Illuminate/Html/FormBuilder.php',
 +    'Illuminate\\Html\\HtmlBuilder' => $vendorDir . '/laravel/framework/src/Illuminate/Html/HtmlBuilder.php',
 +    'Illuminate\\Html\\HtmlServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Html/HtmlServiceProvider.php',
 +    'Illuminate\\Http\\FrameGuard' => $vendorDir . '/laravel/framework/src/Illuminate/Http/FrameGuard.php',
 +    'Illuminate\\Http\\JsonResponse' => $vendorDir . '/laravel/framework/src/Illuminate/Http/JsonResponse.php',
 +    'Illuminate\\Http\\RedirectResponse' => $vendorDir . '/laravel/framework/src/Illuminate/Http/RedirectResponse.php',
 +    'Illuminate\\Http\\Request' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Request.php',
 +    'Illuminate\\Http\\Response' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Response.php',
 +    'Illuminate\\Http\\ResponseTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Http/ResponseTrait.php',
 +    'Illuminate\\Log\\LogServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Log/LogServiceProvider.php',
 +    'Illuminate\\Log\\Writer' => $vendorDir . '/laravel/framework/src/Illuminate/Log/Writer.php',
 +    'Illuminate\\Mail\\MailServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/MailServiceProvider.php',
 +    'Illuminate\\Mail\\Mailer' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Mailer.php',
 +    'Illuminate\\Mail\\Message' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Message.php',
 +    'Illuminate\\Mail\\Transport\\LogTransport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/LogTransport.php',
 +    'Illuminate\\Mail\\Transport\\MailgunTransport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/MailgunTransport.php',
 +    'Illuminate\\Mail\\Transport\\MandrillTransport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/MandrillTransport.php',
 +    'Illuminate\\Pagination\\BootstrapPresenter' => $vendorDir . '/laravel/framework/src/Illuminate/Pagination/BootstrapPresenter.php',
 +    'Illuminate\\Pagination\\Factory' => $vendorDir . '/laravel/framework/src/Illuminate/Pagination/Factory.php',
 +    'Illuminate\\Pagination\\PaginationServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Pagination/PaginationServiceProvider.php',
 +    'Illuminate\\Pagination\\Paginator' => $vendorDir . '/laravel/framework/src/Illuminate/Pagination/Paginator.php',
 +    'Illuminate\\Pagination\\Presenter' => $vendorDir . '/laravel/framework/src/Illuminate/Pagination/Presenter.php',
 +    'Illuminate\\Queue\\BeanstalkdQueue' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/BeanstalkdQueue.php',
 +    'Illuminate\\Queue\\Capsule\\Manager' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Capsule/Manager.php',
 +    'Illuminate\\Queue\\Connectors\\BeanstalkdConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Connectors/BeanstalkdConnector.php',
 +    'Illuminate\\Queue\\Connectors\\ConnectorInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Connectors/ConnectorInterface.php',
 +    'Illuminate\\Queue\\Connectors\\IronConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Connectors/IronConnector.php',
 +    'Illuminate\\Queue\\Connectors\\RedisConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Connectors/RedisConnector.php',
 +    'Illuminate\\Queue\\Connectors\\SqsConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Connectors/SqsConnector.php',
 +    'Illuminate\\Queue\\Connectors\\SyncConnector' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Connectors/SyncConnector.php',
 +    'Illuminate\\Queue\\Console\\FailedTableCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Console/FailedTableCommand.php',
 +    'Illuminate\\Queue\\Console\\FlushFailedCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Console/FlushFailedCommand.php',
 +    'Illuminate\\Queue\\Console\\ForgetFailedCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Console/ForgetFailedCommand.php',
 +    'Illuminate\\Queue\\Console\\ListFailedCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Console/ListFailedCommand.php',
 +    'Illuminate\\Queue\\Console\\ListenCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Console/ListenCommand.php',
 +    'Illuminate\\Queue\\Console\\RestartCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Console/RestartCommand.php',
 +    'Illuminate\\Queue\\Console\\RetryCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Console/RetryCommand.php',
 +    'Illuminate\\Queue\\Console\\SubscribeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Console/SubscribeCommand.php',
 +    'Illuminate\\Queue\\Console\\WorkCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php',
 +    'Illuminate\\Queue\\FailConsoleServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/FailConsoleServiceProvider.php',
 +    'Illuminate\\Queue\\Failed\\DatabaseFailedJobProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Failed/DatabaseFailedJobProvider.php',
 +    'Illuminate\\Queue\\Failed\\FailedJobProviderInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Failed/FailedJobProviderInterface.php',
 +    'Illuminate\\Queue\\IronQueue' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/IronQueue.php',
 +    'Illuminate\\Queue\\Jobs\\BeanstalkdJob' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Jobs/BeanstalkdJob.php',
 +    'Illuminate\\Queue\\Jobs\\IronJob' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Jobs/IronJob.php',
 +    'Illuminate\\Queue\\Jobs\\Job' => $vendorDir .

<TRUNCATED>

[22/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/MemcachedConnector.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/MemcachedConnector.php b/vendor/laravel/framework/src/Illuminate/Cache/MemcachedConnector.php
new file mode 100755
index 0000000..e860c07
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/MemcachedConnector.php
@@ -0,0 +1,47 @@
+<?php namespace Illuminate\Cache;
+
+use Memcached;
+
+class MemcachedConnector {
+
+	/**
+	 * Create a new Memcached connection.
+	 *
+	 * @param  array  $servers
+	 * @return \Memcached
+	 *
+	 * @throws \RuntimeException
+	 */
+	public function connect(array $servers)
+	{
+		$memcached = $this->getMemcached();
+
+		// For each server in the array, we'll just extract the configuration and add
+		// the server to the Memcached connection. Once we have added all of these
+		// servers we'll verify the connection is successful and return it back.
+		foreach ($servers as $server)
+		{
+			$memcached->addServer(
+				$server['host'], $server['port'], $server['weight']
+			);
+		}
+
+		if ($memcached->getVersion() === false)
+		{
+			throw new \RuntimeException("Could not establish Memcached connection.");
+		}
+
+		return $memcached;
+	}
+
+	/**
+	 * Get a new Memcached instance.
+	 *
+	 * @return \Memcached
+	 */
+	protected function getMemcached()
+	{
+		return new Memcached;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/MemcachedStore.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/MemcachedStore.php b/vendor/laravel/framework/src/Illuminate/Cache/MemcachedStore.php
new file mode 100755
index 0000000..5e50946
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/MemcachedStore.php
@@ -0,0 +1,138 @@
+<?php namespace Illuminate\Cache;
+
+class MemcachedStore extends TaggableStore implements StoreInterface {
+
+	/**
+	 * The Memcached instance.
+	 *
+	 * @var \Memcached
+	 */
+	protected $memcached;
+
+	/**
+	 * A string that should be prepended to keys.
+	 *
+	 * @var string
+	 */
+	protected $prefix;
+
+	/**
+	 * Create a new Memcached store.
+	 *
+	 * @param  \Memcached  $memcached
+	 * @param  string      $prefix
+	 * @return void
+	 */
+	public function __construct($memcached, $prefix = '')
+	{
+		$this->memcached = $memcached;
+		$this->prefix = strlen($prefix) > 0 ? $prefix.':' : '';
+	}
+
+	/**
+	 * Retrieve an item from the cache by key.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function get($key)
+	{
+		$value = $this->memcached->get($this->prefix.$key);
+
+		if ($this->memcached->getResultCode() == 0)
+		{
+			return $value;
+		}
+	}
+
+	/**
+	 * Store an item in the cache for a given number of minutes.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @param  int     $minutes
+	 * @return void
+	 */
+	public function put($key, $value, $minutes)
+	{
+		$this->memcached->set($this->prefix.$key, $value, $minutes * 60);
+	}
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int|bool
+	 */
+	public function increment($key, $value = 1)
+	{
+		return $this->memcached->increment($this->prefix.$key, $value);
+	}
+
+	/**
+	 * Decrement the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int|bool
+	 */
+	public function decrement($key, $value = 1)
+	{
+		return $this->memcached->decrement($this->prefix.$key, $value);
+	}
+
+	/**
+	 * Store an item in the cache indefinitely.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function forever($key, $value)
+	{
+		return $this->put($key, $value, 0);
+	}
+
+	/**
+	 * Remove an item from the cache.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function forget($key)
+	{
+		$this->memcached->delete($this->prefix.$key);
+	}
+
+	/**
+	 * Remove all items from the cache.
+	 *
+	 * @return void
+	 */
+	public function flush()
+	{
+		$this->memcached->flush();
+	}
+
+	/**
+	 * Get the underlying Memcached connection.
+	 *
+	 * @return \Memcached
+	 */
+	public function getMemcached()
+	{
+		return $this->memcached;
+	}
+
+	/**
+	 * Get the cache key prefix.
+	 *
+	 * @return string
+	 */
+	public function getPrefix()
+	{
+		return $this->prefix;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/NullStore.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/NullStore.php b/vendor/laravel/framework/src/Illuminate/Cache/NullStore.php
new file mode 100755
index 0000000..51d7f50
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/NullStore.php
@@ -0,0 +1,103 @@
+<?php namespace Illuminate\Cache;
+
+class NullStore extends TaggableStore implements StoreInterface {
+
+	/**
+	 * The array of stored values.
+	 *
+	 * @var array
+	 */
+	protected $storage = array();
+
+	/**
+	 * Retrieve an item from the cache by key.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function get($key)
+	{
+		//
+	}
+
+	/**
+	 * Store an item in the cache for a given number of minutes.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @param  int     $minutes
+	 * @return void
+	 */
+	public function put($key, $value, $minutes)
+	{
+		//
+	}
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int
+	 */
+	public function increment($key, $value = 1)
+	{
+		//
+	}
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int
+	 */
+	public function decrement($key, $value = 1)
+	{
+		//
+	}
+
+	/**
+	 * Store an item in the cache indefinitely.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function forever($key, $value)
+	{
+		//
+	}
+
+	/**
+	 * Remove an item from the cache.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function forget($key)
+	{
+		//
+	}
+
+	/**
+	 * Remove all items from the cache.
+	 *
+	 * @return void
+	 */
+	public function flush()
+	{
+		//
+	}
+
+	/**
+	 * Get the cache key prefix.
+	 *
+	 * @return string
+	 */
+	public function getPrefix()
+	{
+		return '';
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php b/vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php
new file mode 100755
index 0000000..bc76c3c
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php
@@ -0,0 +1,185 @@
+<?php namespace Illuminate\Cache;
+
+use Illuminate\Redis\Database as Redis;
+
+class RedisStore extends TaggableStore implements StoreInterface {
+
+	/**
+	 * The Redis database connection.
+	 *
+	 * @var \Illuminate\Redis\Database
+	 */
+	protected $redis;
+
+	/**
+	 * A string that should be prepended to keys.
+	 *
+	 * @var string
+	 */
+	protected $prefix;
+
+	/**
+	 * The Redis connection that should be used.
+	 *
+	 * @var string
+	 */
+	protected $connection;
+
+	/**
+	 * Create a new Redis store.
+	 *
+	 * @param  \Illuminate\Redis\Database  $redis
+	 * @param  string  $prefix
+	 * @param  string  $connection
+	 * @return void
+	 */
+	public function __construct(Redis $redis, $prefix = '', $connection = 'default')
+	{
+		$this->redis = $redis;
+		$this->connection = $connection;
+		$this->prefix = strlen($prefix) > 0 ? $prefix.':' : '';
+	}
+
+	/**
+	 * Retrieve an item from the cache by key.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function get($key)
+	{
+		if ( ! is_null($value = $this->connection()->get($this->prefix.$key)))
+		{
+			return is_numeric($value) ? $value : unserialize($value);
+		}
+	}
+
+	/**
+	 * Store an item in the cache for a given number of minutes.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @param  int     $minutes
+	 * @return void
+	 */
+	public function put($key, $value, $minutes)
+	{
+		$value = is_numeric($value) ? $value : serialize($value);
+
+		$minutes = max(1, $minutes);
+
+		$this->connection()->setex($this->prefix.$key, $minutes * 60, $value);
+	}
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int
+	 */
+	public function increment($key, $value = 1)
+	{
+		return $this->connection()->incrby($this->prefix.$key, $value);
+	}
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int
+	 */
+	public function decrement($key, $value = 1)
+	{
+		return $this->connection()->decrby($this->prefix.$key, $value);
+	}
+
+	/**
+	 * Store an item in the cache indefinitely.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function forever($key, $value)
+	{
+		$value = is_numeric($value) ? $value : serialize($value);
+
+		$this->connection()->set($this->prefix.$key, $value);
+	}
+
+	/**
+	 * Remove an item from the cache.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function forget($key)
+	{
+		$this->connection()->del($this->prefix.$key);
+	}
+
+	/**
+	 * Remove all items from the cache.
+	 *
+	 * @return void
+	 */
+	public function flush()
+	{
+		$this->connection()->flushdb();
+	}
+
+	/**
+	 * Begin executing a new tags operation.
+	 *
+	 * @param  array|mixed  $names
+	 * @return \Illuminate\Cache\RedisTaggedCache
+	 */
+	public function tags($names)
+	{
+		return new RedisTaggedCache($this, new TagSet($this, is_array($names) ? $names : func_get_args()));
+	}
+
+	/**
+	 * Get the Redis connection instance.
+	 *
+	 * @return \Predis\ClientInterface
+	 */
+	public function connection()
+	{
+		return $this->redis->connection($this->connection);
+	}
+
+	/**
+	 * Set the connection name to be used.
+	 *
+	 * @param  string  $connection
+	 * @return void
+	 */
+	public function setConnection($connection)
+	{
+		$this->connection = $connection;
+	}
+
+	/**
+	 * Get the Redis database instance.
+	 *
+	 * @return \Illuminate\Redis\Database
+	 */
+	public function getRedis()
+	{
+		return $this->redis;
+	}
+
+	/**
+	 * Get the cache key prefix.
+	 *
+	 * @return string
+	 */
+	public function getPrefix()
+	{
+		return $this->prefix;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/RedisTaggedCache.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/RedisTaggedCache.php b/vendor/laravel/framework/src/Illuminate/Cache/RedisTaggedCache.php
new file mode 100644
index 0000000..bd54827
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/RedisTaggedCache.php
@@ -0,0 +1,90 @@
+<?php namespace Illuminate\Cache;
+
+class RedisTaggedCache extends TaggedCache {
+
+	/**
+	 * Store an item in the cache indefinitely.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function forever($key, $value)
+	{
+		$this->pushForeverKeys($namespace = $this->tags->getNamespace(), $key);
+
+		$this->store->forever(sha1($namespace).':'.$key, $value);
+	}
+
+	/**
+	 * Remove all items from the cache.
+	 *
+	 * @return void
+	 */
+	public function flush()
+	{
+		$this->deleteForeverKeys();
+
+		parent::flush();
+	}
+
+	/**
+	 * Store a copy of the full key for each namespace segment.
+	 *
+	 * @param  string  $namespace
+	 * @param  string  $key
+	 * @return void
+	 */
+	protected function pushForeverKeys($namespace, $key)
+	{
+		$fullKey = $this->getPrefix().sha1($namespace).':'.$key;
+
+		foreach (explode('|', $namespace) as $segment)
+		{
+			$this->store->connection()->lpush($this->foreverKey($segment), $fullKey);
+		}
+	}
+
+	/**
+	 * Delete all of the items that were stored forever.
+	 *
+	 * @return void
+	 */
+	protected function deleteForeverKeys()
+	{
+		foreach (explode('|', $this->tags->getNamespace()) as $segment)
+		{
+			$this->deleteForeverValues($segment = $this->foreverKey($segment));
+
+			$this->store->connection()->del($segment);
+		}
+	}
+
+	/**
+	 * Delete all of the keys that have been stored forever.
+	 *
+	 * @param  string  $foreverKey
+	 * @return void
+	 */
+	protected function deleteForeverValues($foreverKey)
+	{
+		$forever = array_unique($this->store->connection()->lrange($foreverKey, 0, -1));
+
+		if (count($forever) > 0)
+		{
+			call_user_func_array(array($this->store->connection(), 'del'), $forever);
+		}
+	}
+
+	/**
+	 * Get the forever reference key for the segment.
+	 *
+	 * @param  string  $segment
+	 * @return string
+	 */
+	protected function foreverKey($segment)
+	{
+		return $this->getPrefix().$segment.':forever';
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/Repository.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/Repository.php b/vendor/laravel/framework/src/Illuminate/Cache/Repository.php
new file mode 100755
index 0000000..f87f29b
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/Repository.php
@@ -0,0 +1,284 @@
+<?php namespace Illuminate\Cache;
+
+use Closure;
+use DateTime;
+use ArrayAccess;
+use Carbon\Carbon;
+use Illuminate\Support\Traits\MacroableTrait;
+
+class Repository implements ArrayAccess {
+
+	use MacroableTrait {
+		__call as macroCall;
+	}
+
+	/**
+	 * The cache store implementation.
+	 *
+	 * @var \Illuminate\Cache\StoreInterface
+	 */
+	protected $store;
+
+	/**
+	 * The default number of minutes to store items.
+	 *
+	 * @var int
+	 */
+	protected $default = 60;
+
+	/**
+	 * Create a new cache repository instance.
+	 *
+	 * @param  \Illuminate\Cache\StoreInterface  $store
+	 */
+	public function __construct(StoreInterface $store)
+	{
+		$this->store = $store;
+	}
+
+	/**
+	 * Determine if an item exists in the cache.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function has($key)
+	{
+		return ! is_null($this->get($key));
+	}
+
+	/**
+	 * Retrieve an item from the cache by key.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return mixed
+	 */
+	public function get($key, $default = null)
+	{
+		$value = $this->store->get($key);
+
+		return ! is_null($value) ? $value : value($default);
+	}
+
+	/**
+	 * Retrieve an item from the cache and delete it.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return mixed
+	 */
+	public function pull($key, $default = null)
+	{
+		$value = $this->get($key, $default);
+
+		$this->forget($key);
+
+		return $value;
+	}
+
+	/**
+	 * Store an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @param  \DateTime|int  $minutes
+	 * @return void
+	 */
+	public function put($key, $value, $minutes)
+	{
+		$minutes = $this->getMinutes($minutes);
+
+		if ( ! is_null($minutes))
+		{
+			$this->store->put($key, $value, $minutes);
+		}
+	}
+
+	/**
+	 * Store an item in the cache if the key does not exist.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @param  \DateTime|int  $minutes
+	 * @return bool
+	 */
+	public function add($key, $value, $minutes)
+	{
+		if (is_null($this->get($key)))
+		{
+			$this->put($key, $value, $minutes); return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Get an item from the cache, or store the default value.
+	 *
+	 * @param  string  $key
+	 * @param  \DateTime|int  $minutes
+	 * @param  \Closure  $callback
+	 * @return mixed
+	 */
+	public function remember($key, $minutes, Closure $callback)
+	{
+		// If the item exists in the cache we will just return this immediately
+		// otherwise we will execute the given Closure and cache the result
+		// of that execution for the given number of minutes in storage.
+		if ( ! is_null($value = $this->get($key)))
+		{
+			return $value;
+		}
+
+		$this->put($key, $value = $callback(), $minutes);
+
+		return $value;
+	}
+
+	/**
+	 * Get an item from the cache, or store the default value forever.
+	 *
+	 * @param  string   $key
+	 * @param  \Closure  $callback
+	 * @return mixed
+	 */
+	public function sear($key, Closure $callback)
+	{
+		return $this->rememberForever($key, $callback);
+	}
+
+	/**
+	 * Get an item from the cache, or store the default value forever.
+	 *
+	 * @param  string   $key
+	 * @param  \Closure  $callback
+	 * @return mixed
+	 */
+	public function rememberForever($key, Closure $callback)
+	{
+		// If the item exists in the cache we will just return this immediately
+		// otherwise we will execute the given Closure and cache the result
+		// of that execution for the given number of minutes. It's easy.
+		if ( ! is_null($value = $this->get($key)))
+		{
+			return $value;
+		}
+
+		$this->forever($key, $value = $callback());
+
+		return $value;
+	}
+
+	/**
+	 * Get the default cache time.
+	 *
+	 * @return int
+	 */
+	public function getDefaultCacheTime()
+	{
+		return $this->default;
+	}
+
+	/**
+	 * Set the default cache time in minutes.
+	 *
+	 * @param  int   $minutes
+	 * @return void
+	 */
+	public function setDefaultCacheTime($minutes)
+	{
+		$this->default = $minutes;
+	}
+
+	/**
+	 * Get the cache store implementation.
+	 *
+	 * @return \Illuminate\Cache\StoreInterface
+	 */
+	public function getStore()
+	{
+		return $this->store;
+	}
+
+	/**
+	 * Determine if a cached value exists.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function offsetExists($key)
+	{
+		return $this->has($key);
+	}
+
+	/**
+	 * Retrieve an item from the cache by key.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function offsetGet($key)
+	{
+		return $this->get($key);
+	}
+
+	/**
+	 * Store an item in the cache for the default time.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function offsetSet($key, $value)
+	{
+		$this->put($key, $value, $this->default);
+	}
+
+	/**
+	 * Remove an item from the cache.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function offsetUnset($key)
+	{
+		return $this->forget($key);
+	}
+
+	/**
+	 * Calculate the number of minutes with the given duration.
+	 *
+	 * @param  \DateTime|int  $duration
+	 * @return int|null
+	 */
+	protected function getMinutes($duration)
+	{
+		if ($duration instanceof DateTime)
+		{
+			$fromNow = Carbon::instance($duration)->diffInMinutes();
+
+			return $fromNow > 0 ? $fromNow : null;
+		}
+
+		return is_string($duration) ? (int) $duration : $duration;
+	}
+
+	/**
+	 * Handle dynamic calls into macros or pass missing methods to the store.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 */
+	public function __call($method, $parameters)
+	{
+		if (static::hasMacro($method))
+		{
+			return $this->macroCall($method, $parameters);
+		}
+
+		return call_user_func_array(array($this->store, $method), $parameters);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/StoreInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/StoreInterface.php b/vendor/laravel/framework/src/Illuminate/Cache/StoreInterface.php
new file mode 100755
index 0000000..b07686f
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/StoreInterface.php
@@ -0,0 +1,72 @@
+<?php namespace Illuminate\Cache;
+
+interface StoreInterface {
+
+	/**
+	 * Retrieve an item from the cache by key.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function get($key);
+
+	/**
+	 * Store an item in the cache for a given number of minutes.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @param  int     $minutes
+	 * @return void
+	 */
+	public function put($key, $value, $minutes);
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int|bool
+	 */
+	public function increment($key, $value = 1);
+
+	/**
+	 * Decrement the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int|bool
+	 */
+	public function decrement($key, $value = 1);
+
+	/**
+	 * Store an item in the cache indefinitely.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function forever($key, $value);
+
+	/**
+	 * Remove an item from the cache.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function forget($key);
+
+	/**
+	 * Remove all items from the cache.
+	 *
+	 * @return void
+	 */
+	public function flush();
+
+	/**
+	 * Get the cache key prefix.
+	 *
+	 * @return string
+	 */
+	public function getPrefix();
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/TagSet.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/TagSet.php b/vendor/laravel/framework/src/Illuminate/Cache/TagSet.php
new file mode 100644
index 0000000..36df05d
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/TagSet.php
@@ -0,0 +1,97 @@
+<?php namespace Illuminate\Cache;
+
+class TagSet {
+
+	/**
+	 * The cache store implementation.
+	 *
+	 * @var \Illuminate\Cache\StoreInterface
+	 */
+	protected $store;
+
+	/**
+	 * The tag names.
+	 *
+	 * @var array
+	 */
+	protected $names = array();
+
+	/**
+	 * Create a new TagSet instance.
+	 *
+	 * @param  \Illuminate\Cache\StoreInterface  $store
+	 * @param  array  $names
+	 * @return void
+	 */
+	public function __construct(StoreInterface $store, array $names = array())
+	{
+		$this->store = $store;
+		$this->names = $names;
+	}
+
+	/**
+	 * Reset all tags in the set.
+	 *
+	 * @return void
+	 */
+	public function reset()
+	{
+		array_walk($this->names, array($this, 'resetTag'));
+	}
+
+	/**
+	 * Get the unique tag identifier for a given tag.
+	 *
+	 * @param  string  $name
+	 * @return string
+	 */
+	public function tagId($name)
+	{
+		return $this->store->get($this->tagKey($name)) ?: $this->resetTag($name);
+	}
+
+	/**
+	 * Get an array of tag identifiers for all of the tags in the set.
+	 *
+	 * @return array
+	 */
+	protected function tagIds()
+	{
+		return array_map(array($this, 'tagId'), $this->names);
+	}
+
+	/**
+	 * Get a unique namespace that changes when any of the tags are flushed.
+	 *
+	 * @return string
+	 */
+	public function getNamespace()
+	{
+		return implode('|', $this->tagIds());
+	}
+
+	/**
+	 * Reset the tag and return the new tag identifier
+	 *
+	 * @param  string  $name
+	 * @return string
+	 */
+	public function resetTag($name)
+	{
+		$this->store->forever($this->tagKey($name), $id = str_replace('.', '', uniqid('', true)));
+
+		return $id;
+	}
+
+	/**
+	 * Get the tag identifier key for a given tag.
+	 *
+	 * @param  string  $name
+	 * @return string
+	 */
+	public function tagKey($name)
+	{
+		return 'tag:'.$name.':key';
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/TaggableStore.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/TaggableStore.php b/vendor/laravel/framework/src/Illuminate/Cache/TaggableStore.php
new file mode 100644
index 0000000..c0b965d
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/TaggableStore.php
@@ -0,0 +1,27 @@
+<?php namespace Illuminate\Cache;
+
+abstract class TaggableStore {
+
+	/**
+	 * Begin executing a new tags operation.
+	 *
+	 * @param  string  $name
+	 * @return \Illuminate\Cache\TaggedCache
+	 */
+	public function section($name)
+	{
+		return $this->tags($name);
+	}
+
+	/**
+	 * Begin executing a new tags operation.
+	 *
+	 * @param  array|mixed  $names
+	 * @return \Illuminate\Cache\TaggedCache
+	 */
+	public function tags($names)
+	{
+		return new TaggedCache($this, new TagSet($this, is_array($names) ? $names : func_get_args()));
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/TaggedCache.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/TaggedCache.php b/vendor/laravel/framework/src/Illuminate/Cache/TaggedCache.php
new file mode 100644
index 0000000..6b9eb7a
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/TaggedCache.php
@@ -0,0 +1,244 @@
+<?php namespace Illuminate\Cache;
+
+use Closure;
+use DateTime;
+use Carbon\Carbon;
+
+class TaggedCache implements StoreInterface {
+
+	/**
+	 * The cache store implementation.
+	 *
+	 * @var \Illuminate\Cache\StoreInterface
+	 */
+	protected $store;
+
+	/**
+	 * The tag set instance.
+	 *
+	 * @var \Illuminate\Cache\TagSet
+	 */
+	protected $tags;
+
+	/**
+	 * Create a new tagged cache instance.
+	 *
+	 * @param  \Illuminate\Cache\StoreInterface  $store
+	 * @param  \Illuminate\Cache\TagSet  $tags
+	 * @return void
+	 */
+	public function __construct(StoreInterface $store, TagSet $tags)
+	{
+		$this->tags = $tags;
+		$this->store = $store;
+	}
+
+	/**
+	 * Determine if an item exists in the cache.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function has($key)
+	{
+		return ! is_null($this->get($key));
+	}
+
+	/**
+	 * Retrieve an item from the cache by key.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return mixed
+	 */
+	public function get($key, $default = null)
+	{
+		$value = $this->store->get($this->taggedItemKey($key));
+
+		return ! is_null($value) ? $value : value($default);
+	}
+
+	/**
+	 * Store an item in the cache for a given number of minutes.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @param  \DateTime|int  $minutes
+	 * @return void
+	 */
+	public function put($key, $value, $minutes)
+	{
+		$minutes = $this->getMinutes($minutes);
+
+		if ( ! is_null($minutes))
+		{
+			$this->store->put($this->taggedItemKey($key), $value, $minutes);
+		}
+	}
+
+	/**
+	 * Store an item in the cache if the key does not exist.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @param  \DateTime|int  $minutes
+	 * @return bool
+	 */
+	public function add($key, $value, $minutes)
+	{
+		if (is_null($this->get($key)))
+		{
+			$this->put($key, $value, $minutes); return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function increment($key, $value = 1)
+	{
+		$this->store->increment($this->taggedItemKey($key), $value);
+	}
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function decrement($key, $value = 1)
+	{
+		$this->store->decrement($this->taggedItemKey($key), $value);
+	}
+
+	/**
+	 * Store an item in the cache indefinitely.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function forever($key, $value)
+	{
+		$this->store->forever($this->taggedItemKey($key), $value);
+	}
+
+	/**
+	 * Remove an item from the cache.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function forget($key)
+	{
+		return $this->store->forget($this->taggedItemKey($key));
+	}
+
+	/**
+	 * Remove all items from the cache.
+	 *
+	 * @return void
+	 */
+	public function flush()
+	{
+		$this->tags->reset();
+	}
+
+	/**
+	 * Get an item from the cache, or store the default value.
+	 *
+	 * @param  string  $key
+	 * @param  \DateTime|int  $minutes
+	 * @param  \Closure  $callback
+	 * @return mixed
+	 */
+	public function remember($key, $minutes, Closure $callback)
+	{
+		// If the item exists in the cache we will just return this immediately
+		// otherwise we will execute the given Closure and cache the result
+		// of that execution for the given number of minutes in storage.
+		if ( ! is_null($value = $this->get($key))) return $value;
+
+		$this->put($key, $value = $callback(), $minutes);
+
+		return $value;
+	}
+
+	/**
+	 * Get an item from the cache, or store the default value forever.
+	 *
+	 * @param  string    $key
+	 * @param  \Closure  $callback
+	 * @return mixed
+	 */
+	public function sear($key, Closure $callback)
+	{
+		return $this->rememberForever($key, $callback);
+	}
+
+	/**
+	 * Get an item from the cache, or store the default value forever.
+	 *
+	 * @param  string    $key
+	 * @param  \Closure  $callback
+	 * @return mixed
+	 */
+	public function rememberForever($key, Closure $callback)
+	{
+		// If the item exists in the cache we will just return this immediately
+		// otherwise we will execute the given Closure and cache the result
+		// of that execution for the given number of minutes. It's easy.
+		if ( ! is_null($value = $this->get($key))) return $value;
+
+		$this->forever($key, $value = $callback());
+
+		return $value;
+	}
+
+	/**
+	 * Get a fully qualified key for a tagged item.
+	 *
+	 * @param  string  $key
+	 * @return string
+	 */
+	public function taggedItemKey($key)
+	{
+		return sha1($this->tags->getNamespace()).':'.$key;
+	}
+
+	/**
+	 * Get the cache key prefix.
+	 *
+	 * @return string
+	 */
+	public function getPrefix()
+	{
+		return $this->store->getPrefix();
+	}
+
+	/**
+	 * Calculate the number of minutes with the given duration.
+	 *
+	 * @param  \DateTime|int  $duration
+	 * @return int|null
+	 */
+	protected function getMinutes($duration)
+	{
+		if ($duration instanceof DateTime)
+		{
+			$fromNow = Carbon::instance($duration)->diffInMinutes();
+
+			return $fromNow > 0 ? $fromNow : null;
+		}
+
+		return is_string($duration) ? (int) $duration : $duration;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/WinCacheStore.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/WinCacheStore.php b/vendor/laravel/framework/src/Illuminate/Cache/WinCacheStore.php
new file mode 100755
index 0000000..43dd617
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/WinCacheStore.php
@@ -0,0 +1,119 @@
+<?php namespace Illuminate\Cache;
+
+class WinCacheStore extends TaggableStore implements StoreInterface {
+
+	/**
+	 * A string that should be prepended to keys.
+	 *
+	 * @var string
+	 */
+	protected $prefix;
+
+	/**
+	 * Create a new WinCache store.
+	 *
+	 * @param  string  $prefix
+	 * @return void
+	 */
+	public function __construct($prefix = '')
+	{
+		$this->prefix = $prefix;
+	}
+
+	/**
+	 * Retrieve an item from the cache by key.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function get($key)
+	{
+		$value = wincache_ucache_get($this->prefix.$key);
+
+		if ($value !== false)
+		{
+			return $value;
+		}
+	}
+
+	/**
+	 * Store an item in the cache for a given number of minutes.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @param  int     $minutes
+	 * @return void
+	 */
+	public function put($key, $value, $minutes)
+	{
+		wincache_ucache_set($this->prefix.$key, $value, $minutes * 60);
+	}
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int|bool
+	 */
+	public function increment($key, $value = 1)
+	{
+		return wincache_ucache_inc($this->prefix.$key, $value);
+	}
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int|bool
+	 */
+	public function decrement($key, $value = 1)
+	{
+		return wincache_ucache_dec($this->prefix.$key, $value);
+	}
+
+	/**
+	 * Store an item in the cache indefinitely.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function forever($key, $value)
+	{
+		return $this->put($key, $value, 0);
+	}
+
+	/**
+	 * Remove an item from the cache.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function forget($key)
+	{
+		wincache_ucache_delete($this->prefix.$key);
+	}
+
+	/**
+	 * Remove all items from the cache.
+	 *
+	 * @return void
+	 */
+	public function flush()
+	{
+		wincache_ucache_clear();
+	}
+
+	/**
+	 * Get the cache key prefix.
+	 *
+	 * @return string
+	 */
+	public function getPrefix()
+	{
+		return $this->prefix;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/XCacheStore.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/XCacheStore.php b/vendor/laravel/framework/src/Illuminate/Cache/XCacheStore.php
new file mode 100755
index 0000000..c7786e2
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/XCacheStore.php
@@ -0,0 +1,119 @@
+<?php namespace Illuminate\Cache;
+
+class XCacheStore extends TaggableStore implements StoreInterface {
+
+	/**
+	 * A string that should be prepended to keys.
+	 *
+	 * @var string
+	 */
+	protected $prefix;
+
+	/**
+	 * Create a new WinCache store.
+	 *
+	 * @param  string  $prefix
+	 * @return void
+	 */
+	public function __construct($prefix = '')
+	{
+		$this->prefix = $prefix;
+	}
+
+	/**
+	 * Retrieve an item from the cache by key.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function get($key)
+	{
+		$value = xcache_get($this->prefix.$key);
+
+		if (isset($value))
+		{
+			return $value;
+		}
+	}
+
+	/**
+	 * Store an item in the cache for a given number of minutes.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @param  int     $minutes
+	 * @return void
+	 */
+	public function put($key, $value, $minutes)
+	{
+		xcache_set($this->prefix.$key, $value, $minutes * 60);
+	}
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int
+	 */
+	public function increment($key, $value = 1)
+	{
+		return xcache_inc($this->prefix.$key, $value);
+	}
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int
+	 */
+	public function decrement($key, $value = 1)
+	{
+		return xcache_dec($this->prefix.$key, $value);
+	}
+
+	/**
+	 * Store an item in the cache indefinitely.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function forever($key, $value)
+	{
+		return $this->put($key, $value, 0);
+	}
+
+	/**
+	 * Remove an item from the cache.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function forget($key)
+	{
+		xcache_unset($this->prefix.$key);
+	}
+
+	/**
+	 * Remove all items from the cache.
+	 *
+	 * @return void
+	 */
+	public function flush()
+	{
+		xcache_clear_cache(XC_TYPE_VAR);
+	}
+
+	/**
+	 * Get the cache key prefix.
+	 *
+	 * @return string
+	 */
+	public function getPrefix()
+	{
+		return $this->prefix;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/composer.json b/vendor/laravel/framework/src/Illuminate/Cache/composer.json
new file mode 100755
index 0000000..441833d
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/composer.json
@@ -0,0 +1,31 @@
+{
+    "name": "illuminate/cache",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/support": "4.2.*",
+        "nesbot/carbon": "~1.0"
+    },
+    "require-dev": {
+        "illuminate/database": "4.2.*",
+        "illuminate/encryption": "4.2.*",
+        "illuminate/filesystem": "4.2.*",
+        "illuminate/redis": "4.2.*"
+    },
+    "autoload": {
+        "psr-0": {"Illuminate\\Cache": ""}
+    },
+    "target-dir": "Illuminate/Cache",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Config/EnvironmentVariables.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Config/EnvironmentVariables.php b/vendor/laravel/framework/src/Illuminate/Config/EnvironmentVariables.php
new file mode 100644
index 0000000..dfe89aa
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Config/EnvironmentVariables.php
@@ -0,0 +1,45 @@
+<?php namespace Illuminate\Config;
+
+/**
+ * PHP $_ENV loader for protecting sensitive configuration options.
+ *
+ * Inspired by the wonderful "Dotenv" library by Vance Lucas.
+ */
+class EnvironmentVariables {
+
+	/**
+	 * The environment loader implementation.
+	 *
+	 * @var \Illuminate\Config\EnvironmentVariablesLoaderInterface  $loader
+	 */
+	protected $loader;
+
+	/**
+	 * The server environment instance.
+	 *
+	 * @param  \Illuminate\Config\EnvironmentVariablesLoaderInterface  $loader
+	 * @return void
+	 */
+	public function __construct(EnvironmentVariablesLoaderInterface $loader)
+	{
+		$this->loader = $loader;
+	}
+
+	/**
+	 * Load the server variables for a given environment.
+	 *
+	 * @param  string  $environment
+	 */
+	public function load($environment = null)
+	{
+		foreach ($this->loader->load($environment) as $key => $value)
+		{
+			$_ENV[$key] = $value;
+
+			$_SERVER[$key] = $value;
+
+			putenv("{$key}={$value}");
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Config/EnvironmentVariablesLoaderInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Config/EnvironmentVariablesLoaderInterface.php b/vendor/laravel/framework/src/Illuminate/Config/EnvironmentVariablesLoaderInterface.php
new file mode 100644
index 0000000..376f666
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Config/EnvironmentVariablesLoaderInterface.php
@@ -0,0 +1,13 @@
+<?php namespace Illuminate\Config;
+
+interface EnvironmentVariablesLoaderInterface {
+
+	/**
+	 * Load the environment variables for the given environment.
+	 *
+	 * @param  string  $environment
+	 * @return array
+	 */
+	public function load($environment = null);
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Config/FileEnvironmentVariablesLoader.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Config/FileEnvironmentVariablesLoader.php b/vendor/laravel/framework/src/Illuminate/Config/FileEnvironmentVariablesLoader.php
new file mode 100644
index 0000000..8a095cb
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Config/FileEnvironmentVariablesLoader.php
@@ -0,0 +1,68 @@
+<?php namespace Illuminate\Config;
+
+use Illuminate\Filesystem\Filesystem;
+
+class FileEnvironmentVariablesLoader implements EnvironmentVariablesLoaderInterface {
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * The path to the configuration files.
+	 *
+	 * @var string
+	 */
+	protected $path;
+
+	/**
+	 * Create a new file environment loader instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @param  string  $path
+	 * @return void
+	 */
+	public function __construct(Filesystem $files, $path = null)
+	{
+		$this->files = $files;
+		$this->path = $path ?: base_path();
+	}
+
+	/**
+	 * Load the environment variables for the given environment.
+	 *
+	 * @param  string  $environment
+	 * @return array
+	 */
+	public function load($environment = null)
+	{
+		if ($environment == 'production') $environment = null;
+
+		if ( ! $this->files->exists($path = $this->getFile($environment)))
+		{
+			return array();
+		}
+
+		return array_dot($this->files->getRequire($path));
+	}
+
+	/**
+	 * Get the file for the given environment.
+	 *
+	 * @param  string  $environment
+	 * @return string
+	 */
+	protected function getFile($environment)
+	{
+		if ($environment)
+		{
+			return $this->path.'/.env.'.$environment.'.php';
+		}
+
+		return $this->path.'/.env.php';
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Config/FileLoader.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Config/FileLoader.php b/vendor/laravel/framework/src/Illuminate/Config/FileLoader.php
new file mode 100755
index 0000000..3563f07
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Config/FileLoader.php
@@ -0,0 +1,259 @@
+<?php namespace Illuminate\Config;
+
+use Illuminate\Filesystem\Filesystem;
+
+class FileLoader implements LoaderInterface {
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * The default configuration path.
+	 *
+	 * @var string
+	 */
+	protected $defaultPath;
+
+	/**
+	 * All of the named path hints.
+	 *
+	 * @var array
+	 */
+	protected $hints = array();
+
+	/**
+	 * A cache of whether namespaces and groups exists.
+	 *
+	 * @var array
+	 */
+	protected $exists = array();
+
+	/**
+	 * Create a new file configuration loader.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @param  string  $defaultPath
+	 * @return void
+	 */
+	public function __construct(Filesystem $files, $defaultPath)
+	{
+		$this->files = $files;
+		$this->defaultPath = $defaultPath;
+	}
+
+	/**
+	 * Load the given configuration group.
+	 *
+	 * @param  string  $environment
+	 * @param  string  $group
+	 * @param  string  $namespace
+	 * @return array
+	 */
+	public function load($environment, $group, $namespace = null)
+	{
+		$items = array();
+
+		// First we'll get the root configuration path for the environment which is
+		// where all of the configuration files live for that namespace, as well
+		// as any environment folders with their specific configuration items.
+		$path = $this->getPath($namespace);
+
+		if (is_null($path))
+		{
+			return $items;
+		}
+
+		// First we'll get the main configuration file for the groups. Once we have
+		// that we can check for any environment specific files, which will get
+		// merged on top of the main arrays to make the environments cascade.
+		$file = "{$path}/{$group}.php";
+
+		if ($this->files->exists($file))
+		{
+			$items = $this->getRequire($file);
+		}
+
+		// Finally we're ready to check for the environment specific configuration
+		// file which will be merged on top of the main arrays so that they get
+		// precedence over them if we are currently in an environments setup.
+		$file = "{$path}/{$environment}/{$group}.php";
+
+		if ($this->files->exists($file))
+		{
+			$items = $this->mergeEnvironment($items, $file);
+		}
+
+		return $items;
+	}
+
+	/**
+	 * Merge the items in the given file into the items.
+	 *
+	 * @param  array   $items
+	 * @param  string  $file
+	 * @return array
+	 */
+	protected function mergeEnvironment(array $items, $file)
+	{
+		return array_replace_recursive($items, $this->getRequire($file));
+	}
+
+	/**
+	 * Determine if the given group exists.
+	 *
+	 * @param  string  $group
+	 * @param  string  $namespace
+	 * @return bool
+	 */
+	public function exists($group, $namespace = null)
+	{
+		$key = $group.$namespace;
+
+		// We'll first check to see if we have determined if this namespace and
+		// group combination have been checked before. If they have, we will
+		// just return the cached result so we don't have to hit the disk.
+		if (isset($this->exists[$key]))
+		{
+			return $this->exists[$key];
+		}
+
+		$path = $this->getPath($namespace);
+
+		// To check if a group exists, we will simply get the path based on the
+		// namespace, and then check to see if this files exists within that
+		// namespace. False is returned if no path exists for a namespace.
+		if (is_null($path))
+		{
+			return $this->exists[$key] = false;
+		}
+
+		$file = "{$path}/{$group}.php";
+
+		// Finally, we can simply check if this file exists. We will also cache
+		// the value in an array so we don't have to go through this process
+		// again on subsequent checks for the existing of the config file.
+		$exists = $this->files->exists($file);
+
+		return $this->exists[$key] = $exists;
+	}
+
+	/**
+	 * Apply any cascades to an array of package options.
+	 *
+	 * @param  string  $env
+	 * @param  string  $package
+	 * @param  string  $group
+	 * @param  array   $items
+	 * @return array
+	 */
+	public function cascadePackage($env, $package, $group, $items)
+	{
+		// First we will look for a configuration file in the packages configuration
+		// folder. If it exists, we will load it and merge it with these original
+		// options so that we will easily "cascade" a package's configurations.
+		$file = "packages/{$package}/{$group}.php";
+
+		if ($this->files->exists($path = $this->defaultPath.'/'.$file))
+		{
+			$items = array_merge(
+				$items, $this->getRequire($path)
+			);
+		}
+
+		// Once we have merged the regular package configuration we need to look for
+		// an environment specific configuration file. If one exists, we will get
+		// the contents and merge them on top of this array of options we have.
+		$path = $this->getPackagePath($env, $package, $group);
+
+		if ($this->files->exists($path))
+		{
+			$items = array_merge(
+				$items, $this->getRequire($path)
+			);
+		}
+
+		return $items;
+	}
+
+	/**
+	 * Get the package path for an environment and group.
+	 *
+	 * @param  string  $env
+	 * @param  string  $package
+	 * @param  string  $group
+	 * @return string
+	 */
+	protected function getPackagePath($env, $package, $group)
+	{
+		$file = "packages/{$package}/{$env}/{$group}.php";
+
+		return $this->defaultPath.'/'.$file;
+	}
+
+	/**
+	 * Get the configuration path for a namespace.
+	 *
+	 * @param  string  $namespace
+	 * @return string
+	 */
+	protected function getPath($namespace)
+	{
+		if (is_null($namespace))
+		{
+			return $this->defaultPath;
+		}
+		elseif (isset($this->hints[$namespace]))
+		{
+			return $this->hints[$namespace];
+		}
+	}
+
+	/**
+	 * Add a new namespace to the loader.
+	 *
+	 * @param  string  $namespace
+	 * @param  string  $hint
+	 * @return void
+	 */
+	public function addNamespace($namespace, $hint)
+	{
+		$this->hints[$namespace] = $hint;
+	}
+
+	/**
+	 * Returns all registered namespaces with the config
+	 * loader.
+	 *
+	 * @return array
+	 */
+	public function getNamespaces()
+	{
+		return $this->hints;
+	}
+
+	/**
+	 * Get a file's contents by requiring it.
+	 *
+	 * @param  string  $path
+	 * @return mixed
+	 */
+	protected function getRequire($path)
+	{
+		return $this->files->getRequire($path);
+	}
+
+	/**
+	 * Get the Filesystem instance.
+	 *
+	 * @return \Illuminate\Filesystem\Filesystem
+	 */
+	public function getFilesystem()
+	{
+		return $this->files;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Config/LoaderInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Config/LoaderInterface.php b/vendor/laravel/framework/src/Illuminate/Config/LoaderInterface.php
new file mode 100755
index 0000000..d4b6a8f
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Config/LoaderInterface.php
@@ -0,0 +1,52 @@
+<?php namespace Illuminate\Config;
+
+interface LoaderInterface {
+
+	/**
+	 * Load the given configuration group.
+	 *
+	 * @param  string  $environment
+	 * @param  string  $group
+	 * @param  string  $namespace
+	 * @return array
+	 */
+	public function load($environment, $group, $namespace = null);
+
+	/**
+	 * Determine if the given configuration group exists.
+	 *
+	 * @param  string  $group
+	 * @param  string  $namespace
+	 * @return bool
+	 */
+	public function exists($group, $namespace = null);
+
+	/**
+	 * Add a new namespace to the loader.
+	 *
+	 * @param  string  $namespace
+	 * @param  string  $hint
+	 * @return void
+	 */
+	public function addNamespace($namespace, $hint);
+
+	/**
+	 * Returns all registered namespaces with the config
+	 * loader.
+	 *
+	 * @return array
+	 */
+	public function getNamespaces();
+
+	/**
+	 * Apply any cascades to an array of package options.
+	 *
+	 * @param  string  $environment
+	 * @param  string  $package
+	 * @param  string  $group
+	 * @param  array   $items
+	 * @return array
+	 */
+	public function cascadePackage($environment, $package, $group, $items);
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Config/Repository.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Config/Repository.php b/vendor/laravel/framework/src/Illuminate/Config/Repository.php
new file mode 100755
index 0000000..36f9505
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Config/Repository.php
@@ -0,0 +1,415 @@
+<?php namespace Illuminate\Config;
+
+use Closure;
+use ArrayAccess;
+use Illuminate\Support\NamespacedItemResolver;
+
+class Repository extends NamespacedItemResolver implements ArrayAccess {
+
+	/**
+	 * The loader implementation.
+	 *
+	 * @var \Illuminate\Config\LoaderInterface
+	 */
+	protected $loader;
+
+	/**
+	 * The current environment.
+	 *
+	 * @var string
+	 */
+	protected $environment;
+
+	/**
+	 * All of the configuration items.
+	 *
+	 * @var array
+	 */
+	protected $items = array();
+
+	/**
+	 * All of the registered packages.
+	 *
+	 * @var array
+	 */
+	protected $packages = array();
+
+	/**
+	 * The after load callbacks for namespaces.
+	 *
+	 * @var array
+	 */
+	protected $afterLoad = array();
+
+	/**
+	 * Create a new configuration repository.
+	 *
+	 * @param  \Illuminate\Config\LoaderInterface  $loader
+	 * @param  string  $environment
+	 * @return void
+	 */
+	public function __construct(LoaderInterface $loader, $environment)
+	{
+		$this->loader = $loader;
+		$this->environment = $environment;
+	}
+
+	/**
+	 * Determine if the given configuration value exists.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function has($key)
+	{
+		$default = microtime(true);
+
+		return $this->get($key, $default) !== $default;
+	}
+
+	/**
+	 * Determine if a configuration group exists.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function hasGroup($key)
+	{
+		list($namespace, $group, $item) = $this->parseKey($key);
+
+		return $this->loader->exists($group, $namespace);
+	}
+
+	/**
+	 * Get the specified configuration value.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return mixed
+	 */
+	public function get($key, $default = null)
+	{
+		list($namespace, $group, $item) = $this->parseKey($key);
+
+		// Configuration items are actually keyed by "collection", which is simply a
+		// combination of each namespace and groups, which allows a unique way to
+		// identify the arrays of configuration items for the particular files.
+		$collection = $this->getCollection($group, $namespace);
+
+		$this->load($group, $namespace, $collection);
+
+		return array_get($this->items[$collection], $item, $default);
+	}
+
+	/**
+	 * Set a given configuration value.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function set($key, $value)
+	{
+		list($namespace, $group, $item) = $this->parseKey($key);
+
+		$collection = $this->getCollection($group, $namespace);
+
+		// We'll need to go ahead and lazy load each configuration groups even when
+		// we're just setting a configuration item so that the set item does not
+		// get overwritten if a different item in the group is requested later.
+		$this->load($group, $namespace, $collection);
+
+		if (is_null($item))
+		{
+			$this->items[$collection] = $value;
+		}
+		else
+		{
+			array_set($this->items[$collection], $item, $value);
+		}
+	}
+
+	/**
+	 * Load the configuration group for the key.
+	 *
+	 * @param  string  $group
+	 * @param  string  $namespace
+	 * @param  string  $collection
+	 * @return void
+	 */
+	protected function load($group, $namespace, $collection)
+	{
+		$env = $this->environment;
+
+		// If we've already loaded this collection, we will just bail out since we do
+		// not want to load it again. Once items are loaded a first time they will
+		// stay kept in memory within this class and not loaded from disk again.
+		if (isset($this->items[$collection]))
+		{
+			return;
+		}
+
+		$items = $this->loader->load($env, $group, $namespace);
+
+		// If we've already loaded this collection, we will just bail out since we do
+		// not want to load it again. Once items are loaded a first time they will
+		// stay kept in memory within this class and not loaded from disk again.
+		if (isset($this->afterLoad[$namespace]))
+		{
+			$items = $this->callAfterLoad($namespace, $group, $items);
+		}
+
+		$this->items[$collection] = $items;
+	}
+
+	/**
+	 * Call the after load callback for a namespace.
+	 *
+	 * @param  string  $namespace
+	 * @param  string  $group
+	 * @param  array   $items
+	 * @return array
+	 */
+	protected function callAfterLoad($namespace, $group, $items)
+	{
+		$callback = $this->afterLoad[$namespace];
+
+		return call_user_func($callback, $this, $group, $items);
+	}
+
+	/**
+	 * Parse an array of namespaced segments.
+	 *
+	 * @param  string  $key
+	 * @return array
+	 */
+	protected function parseNamespacedSegments($key)
+	{
+		list($namespace, $item) = explode('::', $key);
+
+		// If the namespace is registered as a package, we will just assume the group
+		// is equal to the namespace since all packages cascade in this way having
+		// a single file per package, otherwise we'll just parse them as normal.
+		if (in_array($namespace, $this->packages))
+		{
+			return $this->parsePackageSegments($key, $namespace, $item);
+		}
+
+		return parent::parseNamespacedSegments($key);
+	}
+
+	/**
+	 * Parse the segments of a package namespace.
+	 *
+	 * @param  string  $key
+	 * @param  string  $namespace
+	 * @param  string  $item
+	 * @return array
+	 */
+	protected function parsePackageSegments($key, $namespace, $item)
+	{
+		$itemSegments = explode('.', $item);
+
+		// If the configuration file doesn't exist for the given package group we can
+		// assume that we should implicitly use the config file matching the name
+		// of the namespace. Generally packages should use one type or another.
+		if ( ! $this->loader->exists($itemSegments[0], $namespace))
+		{
+			return array($namespace, 'config', $item);
+		}
+
+		return parent::parseNamespacedSegments($key);
+	}
+
+	/**
+	 * Register a package for cascading configuration.
+	 *
+	 * @param  string  $package
+	 * @param  string  $hint
+	 * @param  string  $namespace
+	 * @return void
+	 */
+	public function package($package, $hint, $namespace = null)
+	{
+		$namespace = $this->getPackageNamespace($package, $namespace);
+
+		$this->packages[] = $namespace;
+
+		// First we will simply register the namespace with the repository so that it
+		// can be loaded. Once we have done that we'll register an after namespace
+		// callback so that we can cascade an application package configuration.
+		$this->addNamespace($namespace, $hint);
+
+		$this->afterLoading($namespace, function($me, $group, $items) use ($package)
+		{
+			$env = $me->getEnvironment();
+
+			$loader = $me->getLoader();
+
+			return $loader->cascadePackage($env, $package, $group, $items);
+		});
+	}
+
+	/**
+	 * Get the configuration namespace for a package.
+	 *
+	 * @param  string  $package
+	 * @param  string  $namespace
+	 * @return string
+	 */
+	protected function getPackageNamespace($package, $namespace)
+	{
+		if (is_null($namespace))
+		{
+			list($vendor, $namespace) = explode('/', $package);
+		}
+
+		return $namespace;
+	}
+
+	/**
+	 * Register an after load callback for a given namespace.
+	 *
+	 * @param  string   $namespace
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function afterLoading($namespace, Closure $callback)
+	{
+		$this->afterLoad[$namespace] = $callback;
+	}
+
+	/**
+	 * Get the collection identifier.
+	 *
+	 * @param  string  $group
+	 * @param  string  $namespace
+	 * @return string
+	 */
+	protected function getCollection($group, $namespace = null)
+	{
+		$namespace = $namespace ?: '*';
+
+		return $namespace.'::'.$group;
+	}
+
+	/**
+	 * Add a new namespace to the loader.
+	 *
+	 * @param  string  $namespace
+	 * @param  string  $hint
+	 * @return void
+	 */
+	public function addNamespace($namespace, $hint)
+	{
+		$this->loader->addNamespace($namespace, $hint);
+	}
+
+	/**
+	 * Returns all registered namespaces with the config
+	 * loader.
+	 *
+	 * @return array
+	 */
+	public function getNamespaces()
+	{
+		return $this->loader->getNamespaces();
+	}
+
+	/**
+	 * Get the loader implementation.
+	 *
+	 * @return \Illuminate\Config\LoaderInterface
+	 */
+	public function getLoader()
+	{
+		return $this->loader;
+	}
+
+	/**
+	 * Set the loader implementation.
+	 *
+	 * @param  \Illuminate\Config\LoaderInterface  $loader
+	 * @return void
+	 */
+	public function setLoader(LoaderInterface $loader)
+	{
+		$this->loader = $loader;
+	}
+
+	/**
+	 * Get the current configuration environment.
+	 *
+	 * @return string
+	 */
+	public function getEnvironment()
+	{
+		return $this->environment;
+	}
+
+	/**
+	 * Get the after load callback array.
+	 *
+	 * @return array
+	 */
+	public function getAfterLoadCallbacks()
+	{
+		return $this->afterLoad;
+	}
+
+	/**
+	 * Get all of the configuration items.
+	 *
+	 * @return array
+	 */
+	public function getItems()
+	{
+		return $this->items;
+	}
+
+	/**
+	 * Determine if the given configuration option exists.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function offsetExists($key)
+	{
+		return $this->has($key);
+	}
+
+	/**
+	 * Get a configuration option.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function offsetGet($key)
+	{
+		return $this->get($key);
+	}
+
+	/**
+	 * Set a configuration option.
+	 *
+	 * @param  string  $key
+	 * @param  mixed  $value
+	 * @return void
+	 */
+	public function offsetSet($key, $value)
+	{
+		$this->set($key, $value);
+	}
+
+	/**
+	 * Unset a configuration option.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function offsetUnset($key)
+	{
+		$this->set($key, null);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Config/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Config/composer.json b/vendor/laravel/framework/src/Illuminate/Config/composer.json
new file mode 100755
index 0000000..921e1b6
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Config/composer.json
@@ -0,0 +1,25 @@
+{
+    "name": "illuminate/config",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/filesystem": "4.2.*",
+        "illuminate/support": "4.2.*"
+    },
+    "autoload": {
+        "psr-0": {"Illuminate\\Config": ""}
+    },
+    "target-dir": "Illuminate/Config",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Console/Application.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Console/Application.php b/vendor/laravel/framework/src/Illuminate/Console/Application.php
new file mode 100755
index 0000000..f65db40
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Console/Application.php
@@ -0,0 +1,243 @@
+<?php namespace Illuminate\Console;
+
+use Symfony\Component\Console\Input\ArrayInput;
+use Symfony\Component\Console\Output\NullOutput;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Command\Command as SymfonyCommand;
+
+class Application extends \Symfony\Component\Console\Application {
+
+	/**
+	 * The exception handler instance.
+	 *
+	 * @var \Illuminate\Exception\Handler
+	 */
+	protected $exceptionHandler;
+
+	/**
+	 * The Laravel application instance.
+	 *
+	 * @var \Illuminate\Foundation\Application
+	 */
+	protected $laravel;
+
+	/**
+	 * Create and boot a new Console application.
+	 *
+	 * @param  \Illuminate\Foundation\Application  $app
+	 * @return \Illuminate\Console\Application
+	 */
+	public static function start($app)
+	{
+		return static::make($app)->boot();
+	}
+
+	/**
+	 * Create a new Console application.
+	 *
+	 * @param  \Illuminate\Foundation\Application  $app
+	 * @return \Illuminate\Console\Application
+	 */
+	public static function make($app)
+	{
+		$app->boot();
+
+		$console = with($console = new static('Laravel Framework', $app::VERSION))
+								->setLaravel($app)
+								->setExceptionHandler($app['exception'])
+								->setAutoExit(false);
+
+		$app->instance('artisan', $console);
+
+		return $console;
+	}
+
+	/**
+	 * Boot the Console application.
+	 *
+	 * @return $this
+	 */
+	public function boot()
+	{
+		$path = $this->laravel['path'].'/start/artisan.php';
+
+		if (file_exists($path))
+		{
+			require $path;
+		}
+
+		// If the event dispatcher is set on the application, we will fire an event
+		// with the Artisan instance to provide each listener the opportunity to
+		// register their commands on this application before it gets started.
+		if (isset($this->laravel['events']))
+		{
+			$this->laravel['events']
+					->fire('artisan.start', array($this));
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Run an Artisan console command by name.
+	 *
+	 * @param  string  $command
+	 * @param  array   $parameters
+	 * @param  \Symfony\Component\Console\Output\OutputInterface  $output
+	 * @return void
+	 */
+	public function call($command, array $parameters = array(), OutputInterface $output = null)
+	{
+		$parameters['command'] = $command;
+
+		// Unless an output interface implementation was specifically passed to us we
+		// will use the "NullOutput" implementation by default to keep any writing
+		// suppressed so it doesn't leak out to the browser or any other source.
+		$output = $output ?: new NullOutput;
+
+		$input = new ArrayInput($parameters);
+
+		return $this->find($command)->run($input, $output);
+	}
+
+	/**
+	 * Add a command to the console.
+	 *
+	 * @param  \Symfony\Component\Console\Command\Command  $command
+	 * @return \Symfony\Component\Console\Command\Command
+	 */
+	public function add(SymfonyCommand $command)
+	{
+		if ($command instanceof Command)
+		{
+			$command->setLaravel($this->laravel);
+		}
+
+		return $this->addToParent($command);
+	}
+
+	/**
+	 * Add the command to the parent instance.
+	 *
+	 * @param  \Symfony\Component\Console\Command\Command  $command
+	 * @return \Symfony\Component\Console\Command\Command
+	 */
+	protected function addToParent(SymfonyCommand $command)
+	{
+		return parent::add($command);
+	}
+
+	/**
+	 * Add a command, resolving through the application.
+	 *
+	 * @param  string  $command
+	 * @return \Symfony\Component\Console\Command\Command
+	 */
+	public function resolve($command)
+	{
+		return $this->add($this->laravel[$command]);
+	}
+
+	/**
+	 * Resolve an array of commands through the application.
+	 *
+	 * @param  array|mixed  $commands
+	 * @return void
+	 */
+	public function resolveCommands($commands)
+	{
+		$commands = is_array($commands) ? $commands : func_get_args();
+
+		foreach ($commands as $command)
+		{
+			$this->resolve($command);
+		}
+	}
+
+	/**
+	 * Get the default input definitions for the applications.
+	 *
+	 * @return \Symfony\Component\Console\Input\InputDefinition
+	 */
+	protected function getDefaultInputDefinition()
+	{
+		$definition = parent::getDefaultInputDefinition();
+
+		$definition->addOption($this->getEnvironmentOption());
+
+		return $definition;
+	}
+
+	/**
+	 * Get the global environment option for the definition.
+	 *
+	 * @return \Symfony\Component\Console\Input\InputOption
+	 */
+	protected function getEnvironmentOption()
+	{
+		$message = 'The environment the command should run under.';
+
+		return new InputOption('--env', null, InputOption::VALUE_OPTIONAL, $message);
+	}
+
+	/**
+	 * Render the given exception.
+	 *
+	 * @param  \Exception  $e
+	 * @param  \Symfony\Component\Console\Output\OutputInterface  $output
+	 * @return void
+	 */
+	public function renderException($e, $output)
+	{
+		// If we have an exception handler instance, we will call that first in case
+		// it has some handlers that need to be run first. We will pass "true" as
+		// the second parameter to indicate that it's handling a console error.
+		if (isset($this->exceptionHandler))
+		{
+			$this->exceptionHandler->handleConsole($e);
+		}
+
+		parent::renderException($e, $output);
+	}
+
+	/**
+	 * Set the exception handler instance.
+	 *
+	 * @param  \Illuminate\Exception\Handler  $handler
+	 * @return $this
+	 */
+	public function setExceptionHandler($handler)
+	{
+		$this->exceptionHandler = $handler;
+
+		return $this;
+	}
+
+	/**
+	 * Set the Laravel application instance.
+	 *
+	 * @param  \Illuminate\Foundation\Application  $laravel
+	 * @return $this
+	 */
+	public function setLaravel($laravel)
+	{
+		$this->laravel = $laravel;
+
+		return $this;
+	}
+
+	/**
+	 * Set whether the Console app should auto-exit when done.
+	 *
+	 * @param  bool  $boolean
+	 * @return $this
+	 */
+	public function setAutoExit($boolean)
+	{
+		parent::setAutoExit($boolean);
+
+		return $this;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Console/Command.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Console/Command.php b/vendor/laravel/framework/src/Illuminate/Console/Command.php
new file mode 100755
index 0000000..a2a4ca3
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Console/Command.php
@@ -0,0 +1,384 @@
+<?php namespace Illuminate\Console;
+
+use Symfony\Component\Console\Helper\Table;
+use Symfony\Component\Console\Input\ArrayInput;
+use Symfony\Component\Console\Output\NullOutput;
+use Symfony\Component\Console\Question\Question;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Question\ChoiceQuestion;
+use Symfony\Component\Console\Question\ConfirmationQuestion;
+
+class Command extends \Symfony\Component\Console\Command\Command {
+
+	/**
+	 * The Laravel application instance.
+	 *
+	 * @var \Illuminate\Foundation\Application
+	 */
+	protected $laravel;
+
+	/**
+	 * The input interface implementation.
+	 *
+	 * @var \Symfony\Component\Console\Input\InputInterface
+	 */
+	protected $input;
+
+	/**
+	 * The output interface implementation.
+	 *
+	 * @var \Symfony\Component\Console\Output\OutputInterface
+	 */
+	protected $output;
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name;
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description;
+
+	/**
+	 * Create a new console command instance.
+	 *
+	 * @return void
+	 */
+	public function __construct()
+	{
+		parent::__construct($this->name);
+
+		// We will go ahead and set the name, description, and parameters on console
+		// commands just to make things a little easier on the developer. This is
+		// so they don't have to all be manually specified in the constructors.
+		$this->setDescription($this->description);
+
+		$this->specifyParameters();
+	}
+
+	/**
+	 * Specify the arguments and options on the command.
+	 *
+	 * @return void
+	 */
+	protected function specifyParameters()
+	{
+		// We will loop through all of the arguments and options for the command and
+		// set them all on the base command instance. This specifies what can get
+		// passed into these commands as "parameters" to control the execution.
+		foreach ($this->getArguments() as $arguments)
+		{
+			call_user_func_array(array($this, 'addArgument'), $arguments);
+		}
+
+		foreach ($this->getOptions() as $options)
+		{
+			call_user_func_array(array($this, 'addOption'), $options);
+		}
+	}
+
+	/**
+	 * Run the console command.
+	 *
+	 * @param  \Symfony\Component\Console\Input\InputInterface  $input
+	 * @param  \Symfony\Component\Console\Output\OutputInterface  $output
+	 * @return int
+	 */
+	public function run(InputInterface $input, OutputInterface $output)
+	{
+		$this->input = $input;
+
+		$this->output = $output;
+
+		return parent::run($input, $output);
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @param  \Symfony\Component\Console\Input\InputInterface  $input
+	 * @param  \Symfony\Component\Console\Output\OutputInterface  $output
+	 * @return mixed
+	 */
+	protected function execute(InputInterface $input, OutputInterface $output)
+	{
+		return $this->fire();
+	}
+
+	/**
+	 * Call another console command.
+	 *
+	 * @param  string  $command
+	 * @param  array   $arguments
+	 * @return int
+	 */
+	public function call($command, array $arguments = array())
+	{
+		$instance = $this->getApplication()->find($command);
+
+		$arguments['command'] = $command;
+
+		return $instance->run(new ArrayInput($arguments), $this->output);
+	}
+
+	/**
+	 * Call another console command silently.
+	 *
+	 * @param  string  $command
+	 * @param  array   $arguments
+	 * @return int
+	 */
+	public function callSilent($command, array $arguments = array())
+	{
+		$instance = $this->getApplication()->find($command);
+
+		$arguments['command'] = $command;
+
+		return $instance->run(new ArrayInput($arguments), new NullOutput);
+	}
+
+	/**
+	 * Get the value of a command argument.
+	 *
+	 * @param  string  $key
+	 * @return string|array
+	 */
+	public function argument($key = null)
+	{
+		if (is_null($key)) return $this->input->getArguments();
+
+		return $this->input->getArgument($key);
+	}
+
+	/**
+	 * Get the value of a command option.
+	 *
+	 * @param  string  $key
+	 * @return string|array
+	 */
+	public function option($key = null)
+	{
+		if (is_null($key)) return $this->input->getOptions();
+
+		return $this->input->getOption($key);
+	}
+
+	/**
+	 * Confirm a question with the user.
+	 *
+	 * @param  string  $question
+	 * @param  bool    $default
+	 * @return bool
+	 */
+	public function confirm($question, $default = false)
+	{
+		$helper = $this->getHelperSet()->get('question');
+
+		$question = new ConfirmationQuestion("<question>{$question}</question> ", $default);
+
+		return $helper->ask($this->input, $this->output, $question);
+	}
+
+	/**
+	 * Prompt the user for input.
+	 *
+	 * @param  string  $question
+	 * @param  string  $default
+	 * @return string
+	 */
+	public function ask($question, $default = null)
+	{
+		$helper = $this->getHelperSet()->get('question');
+
+		$question = new Question("<question>$question</question>", $default);
+
+		return $helper->ask($this->input, $this->output, $question);
+	}
+
+	/**
+	 * Prompt the user for input with auto completion.
+	 *
+	 * @param  string  $question
+	 * @param  array   $choices
+	 * @param  string  $default
+	 * @return string
+	 */
+	public function askWithCompletion($question, array $choices, $default = null)
+	{
+		$helper = $this->getHelperSet()->get('question');
+
+		$question = new Question("<question>$question</question>", $default);
+
+		$question->setAutocompleterValues($choices);
+
+		return $helper->ask($this->input, $this->output, $question);
+	}
+
+	/**
+	 * Prompt the user for input but hide the answer from the console.
+	 *
+	 * @param  string  $question
+	 * @param  bool    $fallback
+	 * @return string
+	 */
+	public function secret($question, $fallback = true)
+	{
+		$helper = $this->getHelperSet()->get('question');
+
+		$question = new Question("<question>$question</question>");
+
+		$question->setHidden(true)->setHiddenFallback($fallback);
+
+		return $helper->ask($this->input, $this->output, $question);
+	}
+
+	/**
+	 * Give the user a single choice from an array of answers.
+	 *
+	 * @param  string  $question
+	 * @param  array   $choices
+	 * @param  string  $default
+	 * @param  mixed   $attempts
+	 * @param  bool    $multiple
+	 * @return bool
+	 */
+	public function choice($question, array $choices, $default = null, $attempts = null, $multiple = null)
+	{
+		$helper = $this->getHelperSet()->get('question');
+
+		$question = new ChoiceQuestion("<question>$question</question>", $choices, $default);
+
+		$question->setMaxAttempts($attempts)->setMultiselect($multiple);
+
+		return $helper->ask($this->input, $this->output, $question);
+	}
+
+	/**
+	 * Format input to textual table
+	 *
+	 * @param  array   $headers
+	 * @param  array   $rows
+	 * @param  string  $style
+	 * @return void
+	 */
+	public function table(array $headers, array $rows, $style = 'default')
+	{
+		$table = new Table($this->output);
+
+		$table->setHeaders($headers)->setRows($rows)->setStyle($style)->render();
+	}
+
+	/**
+	 * Write a string as information output.
+	 *
+	 * @param  string  $string
+	 * @return void
+	 */
+	public function info($string)
+	{
+		$this->output->writeln("<info>$string</info>");
+	}
+
+	/**
+	 * Write a string as standard output.
+	 *
+	 * @param  string  $string
+	 * @return void
+	 */
+	public function line($string)
+	{
+		$this->output->writeln($string);
+	}
+
+	/**
+	 * Write a string as comment output.
+	 *
+	 * @param  string  $string
+	 * @return void
+	 */
+	public function comment($string)
+	{
+		$this->output->writeln("<comment>$string</comment>");
+	}
+
+	/**
+	 * Write a string as question output.
+	 *
+	 * @param  string  $string
+	 * @return void
+	 */
+	public function question($string)
+	{
+		$this->output->writeln("<question>$string</question>");
+	}
+
+	/**
+	 * Write a string as error output.
+	 *
+	 * @param  string  $string
+	 * @return void
+	 */
+	public function error($string)
+	{
+		$this->output->writeln("<error>$string</error>");
+	}
+
+	/**
+	 * Get the console command arguments.
+	 *
+	 * @return array
+	 */
+	protected function getArguments()
+	{
+		return array();
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array();
+	}
+
+	/**
+	 * Get the output implementation.
+	 *
+	 * @return \Symfony\Component\Console\Output\OutputInterface
+	 */
+	public function getOutput()
+	{
+		return $this->output;
+	}
+
+	/**
+	 * Get the Laravel application instance.
+	 *
+	 * @return \Illuminate\Foundation\Application
+	 */
+	public function getLaravel()
+	{
+		return $this->laravel;
+	}
+
+	/**
+	 * Set the Laravel application instance.
+	 *
+	 * @param  \Illuminate\Foundation\Application  $laravel
+	 * @return void
+	 */
+	public function setLaravel($laravel)
+	{
+		$this->laravel = $laravel;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Console/ConfirmableTrait.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Console/ConfirmableTrait.php b/vendor/laravel/framework/src/Illuminate/Console/ConfirmableTrait.php
new file mode 100644
index 0000000..69a587a
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Console/ConfirmableTrait.php
@@ -0,0 +1,50 @@
+<?php namespace Illuminate\Console;
+
+use Closure;
+
+trait ConfirmableTrait {
+
+	/**
+	 * Confirm before proceeding with the action
+	 *
+	 * @param  string    $warning
+	 * @param  \Closure  $callback
+	 * @return bool
+	 */
+	public function confirmToProceed($warning = 'Application In Production!', Closure $callback = null)
+	{
+		$shouldConfirm = $callback ?: $this->getDefaultConfirmCallback();
+
+		if (call_user_func($shouldConfirm))
+		{
+			if ($this->option('force')) return true;
+
+			$this->comment(str_repeat('*', strlen($warning) + 12));
+			$this->comment('*     '.$warning.'     *');
+			$this->comment(str_repeat('*', strlen($warning) + 12));
+			$this->output->writeln('');
+
+			$confirmed = $this->confirm('Do you really wish to run this command?');
+
+			if ( ! $confirmed)
+			{
+				$this->comment('Command Cancelled!');
+
+				return false;
+			}
+		}
+
+		return true;
+	}
+
+	/**
+	 * Get the default confirmation callback.
+	 *
+	 * @return \Closure
+	 */
+	protected function getDefaultConfirmCallback()
+	{
+		return function() { return $this->getLaravel()->environment() == 'production'; };
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Console/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Console/composer.json b/vendor/laravel/framework/src/Illuminate/Console/composer.json
new file mode 100755
index 0000000..c35c6ce
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Console/composer.json
@@ -0,0 +1,26 @@
+{
+    "name": "illuminate/console",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "symfony/console": "2.5.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Console": ""
+        }
+    },
+    "target-dir": "Illuminate/Console",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Container/BindingResolutionException.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Container/BindingResolutionException.php b/vendor/laravel/framework/src/Illuminate/Container/BindingResolutionException.php
new file mode 100644
index 0000000..36975df
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Container/BindingResolutionException.php
@@ -0,0 +1,3 @@
+<?php namespace Illuminate\Container;
+
+class BindingResolutionException extends \Exception {}


[32/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/css/datetimepicker.css
----------------------------------------------------------------------
diff --git a/public/css/datetimepicker.css b/public/css/datetimepicker.css
new file mode 100644
index 0000000..cf838a3
--- /dev/null
+++ b/public/css/datetimepicker.css
@@ -0,0 +1,5 @@
+/*!
+ * Datetimepicker for Bootstrap v3
+//! version : 3.1.3
+ * https://github.com/Eonasdan/bootstrap-datetimepicker/
+ */.bootstrap-datetimepicker-widget{top:0;left:0;width:250px;padding:4px;margin-top:1px;z-index:99999!important;border-radius:4px}.bootstrap-datetimepicker-widget.timepicker-sbs{width:600px}.bootstrap-datetimepicker-widget.bottom:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);position:absolute;top:-7px;left:7px}.bootstrap-datetimepicker-widget.bottom:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:8px}.bootstrap-datetimepicker-widget.top:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.top:after{content:'';display:inline-block;border-left:6px solid transpar
 ent;border-right:6px solid transparent;border-top:6px solid #fff;position:absolute;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget .dow{width:14.2857%}.bootstrap-datetimepicker-widget.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget>ul{list-style-type:none;margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:700;font-size:1.2em;margin:0}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget table[data-hour-format="12"] .separator{width:4px;padding:0;margin:0}.bootstrap-datetimepicker-widget .datepicker>div{display:none}.bootstrap-datetimepicker-widget .picker-switch{text-align:center
 }.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget td,.bootstrap-datetimepicker-widget th{text-align:center;border-radius:4px}.bootstrap-datetimepicker-widget td{height:54px;line-height:54px;width:54px}.bootstrap-datetimepicker-widget td.cw{font-size:10px;height:20px;line-height:20px;color:#777}.bootstrap-datetimepicker-widget td.day{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget td.day:hover,.bootstrap-datetimepicker-widget td.hour:hover,.bootstrap-datetimepicker-widget td.minute:hover,.bootstrap-datetimepicker-widget td.second:hover{background:#eee;cursor:pointer}.bootstrap-datetimepicker-widget td.old,.bootstrap-datetimepicker-widget td.new{color:#777}.bootstrap-datetimepicker-widget td.today{position:relative}.bootstrap-datetimepicker-widget td.today:before{content:'';display:inline-block;border-left:7px solid transparent;border-bottom:7px solid #428bca;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:4p
 x;right:4px}.bootstrap-datetimepicker-widget td.active,.bootstrap-datetimepicker-widget td.active:hover{background-color:#428bca;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget td.disabled,.bootstrap-datetimepicker-widget td.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:4px}.bootstrap-datetimepicker-widget td span:hover{background:#eee}.bootstrap-datetimepicker-widget td span.active{background-color:#428bca;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget td span.old{color:#777}.bootstrap-datetimepicker-widget td span.disabled,.bootstrap-datetimepicker-widget td span.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget th{height:20px;line-he
 ight:20px;width:20px}.bootstrap-datetimepicker-widget th.picker-switch{width:145px}.bootstrap-datetimepicker-widget th.next,.bootstrap-datetimepicker-widget th.prev{font-size:21px}.bootstrap-datetimepicker-widget th.disabled,.bootstrap-datetimepicker-widget th.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget thead tr:first-child th:hover{background:#eee}.input-group.date .input-group-addon span{display:block;cursor:pointer;width:16px;height:16px}.bootstrap-datetimepicker-widget.left-oriented:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.left-oriented:after{left:auto;right:7px}.bootstrap-datetimepicker-widget ul.list-unstyled li div.timepicker div.timepicker-picker table.table-condensed tbody>tr>td{padding:0!important}@media screen and (max-width:767px){.bootstrap-datetimepicker-widget.timepicker-sbs{width:283px}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/css/style.css
----------------------------------------------------------------------
diff --git a/public/css/style.css b/public/css/style.css
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/favicon.ico
----------------------------------------------------------------------
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100755
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/fonts/glyphicons-halflings-regular.eot
----------------------------------------------------------------------
diff --git a/public/fonts/glyphicons-halflings-regular.eot b/public/fonts/glyphicons-halflings-regular.eot
new file mode 100644
index 0000000..423bd5d
Binary files /dev/null and b/public/fonts/glyphicons-halflings-regular.eot differ

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/fonts/glyphicons-halflings-regular.svg
----------------------------------------------------------------------
diff --git a/public/fonts/glyphicons-halflings-regular.svg b/public/fonts/glyphicons-halflings-regular.svg
new file mode 100644
index 0000000..4469488
--- /dev/null
+++ b/public/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,229 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
+<font-face units-per-em="1200" ascent="960" descent="-240" />
+<missing-glyph horiz-adv-x="500" />
+<glyph />
+<glyph />
+<glyph unicode="&#xd;" />
+<glyph unicode=" " />
+<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
+<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
+<glyph unicode="&#xa0;" />
+<glyph unicode="&#x2000;" horiz-adv-x="652" />
+<glyph unicode="&#x2001;" horiz-adv-x="1304" />
+<glyph unicode="&#x2002;" horiz-adv-x="652" />
+<glyph unicode="&#x2003;" horiz-adv-x="1304" />
+<glyph unicode="&#x2004;" horiz-adv-x="434" />
+<glyph unicode="&#x2005;" horiz-adv-x="326" />
+<glyph unicode="&#x2006;" horiz-adv-x="217" />
+<glyph unicode="&#x2007;" horiz-adv-x="217" />
+<glyph unicode="&#x2008;" horiz-adv-x="163" />
+<glyph unicode="&#x2009;" horiz-adv-x="260" />
+<glyph unicode="&#x200a;" horiz-adv-x="72" />
+<glyph unicode="&#x202f;" horiz-adv-x="260" />
+<glyph unicode="&#x205f;" horiz-adv-x="326" />
+<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
+<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
+<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86t85 208q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
+<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
+<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
+<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
+<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q17 -55 85.5 -75.5t147.5 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
+<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
+<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
+<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
+<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
+<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
+<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
+<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 
 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
+<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
+<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
+<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 299q-120 -77 -261 -77q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
+<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
+<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
+<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
+<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
+<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
+<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
+<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
+<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
+<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
+<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
+<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
+<glyph unicode="&#xe028;" d="M0 25v475l200 700h800q199 -700 200 -700v-475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
+<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
+<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
+<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
+<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
+<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
+<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
+<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
+<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
+<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
+<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
+<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
+<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
+<glyph unicode="&#xe041;" d="M1 700v475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
+<glyph unicode="&#xe042;" d="M2 700v475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
+<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
+<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
+<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
+<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
+<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
+<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v70h471q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
+<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
+<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
+<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
+<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
+<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
+<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
+<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
+<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-10
 0q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
+<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
+<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
+<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
+<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
+<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
+<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
+<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 138.5t-64 210.5zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
+<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
+<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
+<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l566 567l-136 137l-430 -431l-147 147z" />
+<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
+<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
+<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" />
+<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
+<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
+<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
+<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
+<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
+<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
+<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
+<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
+<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
+<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM300 500h600v200h-600v-200z" />
+<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141z" />
+<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
+<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM363 700h144q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5q19 0 30 -10t11 -26 q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-105 0 -172 -56t-67 -183zM500 300h200v100h-200v-100z" />
+<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
+<glyph unicode="&#xe087;" d="M0 500v200h194q15 60 36 104.5t55.5 86t88 69t126.5 40.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200 v-206q149 48 201 206h-201v200h200q-25 74 -76 127.5t-124 76.5v-204h-200v203q-75 -24 -130 -77.5t-79 -125.5h209v-200h-210z" />
+<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
+<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
+<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
+<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" />
+<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
+<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
+<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" />
+<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
+<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
+<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
+<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-33 14.5h-207q-20 0 -32 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
+<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111v6t-1 15t-3 18l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6h-111v-100z M100 0h400v400h-400v-400zM200 900q-3 0 14 48t35 96l18 47l214 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
+<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
+<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
+<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
+<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
+<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 33 -48 36t-48 -29l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
+<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -21 -13 -29t-32 1l-94 78h-222l-94 -78q-19 -9 -32 -1t-13 29v64 q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
+<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
+<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
+<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
+<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
+<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
+<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
+<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
+<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
+<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
+<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
+<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
+<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
+<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
+<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM99 500v250v5q0 13 0.5 18.5t2.5 13t8 10.5t15 3h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35q-56 337 -56 351z M1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
+<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-22 -9 -63 -23t-167.5 -37 t-251.5 -23t-245.5 20.5t-178.5 41.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
+<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
+<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q123 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 212l100 213h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
+<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q123 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
+<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
+<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 37h302l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 16.5 -10.5t26 -26t16.5 -36.5v-526q0 -13 -85.5 -93.5t-93.5 -80.5h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l106 89v502l-342 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM999 201v600h200v-600h-200z" />
+<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6v7.5v7v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
+<glyph unicode="&#xe130;" d="M1 585q-15 -31 7 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85l-1 -302q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM76 565l237 339h503l89 -100v-294l-340 -130 q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
+<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 500h300l-2 -194l402 294l-402 298v-197h-298v-201z" />
+<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l400 -294v194h302v201h-300v197z" />
+<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
+<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
+<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -34 5.5 -93t7.5 -87q0 -9 17 -44t16 -60q12 0 23 -5.5 t23 -15t20 -13.5q20 -10 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55.5t-20 -57.5q12 -21 22.5 -34.5t28 -27t36.5 -17.5q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q101 -2 221 111q31 30 47 48t34 49t21 62q-14 9 -37.5 9.5t-35.5 7.5q-14 7 -49 15t-52 19 q-9 0 -39.5 -0.5t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q8 16 22 22q6 -1 26 -1.5t33.5 -4.5t19.5 -13q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5 t5.5 57.5q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 41 1 44q31 -13 58.5 -14.5t39.5 3.5l11 4q6 3
 6 -17 53.5t-64 28.5t-56 23 q-19 -3 -37 0q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -46 0t-45 -3q-20 -6 -51.5 -25.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79zM518 915q3 12 16 30.5t16 25.5q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -18 8 -42.5t16.5 -44 t9.5 -23.5q-6 1 -39 5t-53.5 10t-36.5 16z" />
+<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
+<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
+<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
+<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
+<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
+<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM513 609q0 32 21 56.5t52 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-16 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5q-37 0 -62.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
+<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -79.5 -17t-67.5 -51l-388 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23q38 0 53 -36 q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60l517 511 q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
+<glyph unicode="&#xe143;" d="M79 784q0 131 99 229.5t230 98.5q144 0 242 -129q103 129 245 129q130 0 227 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100l-84.5 84.5t-68 74t-60 78t-33.5 70.5t-15 78z M250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-106 48.5q-73 0 -131 -83l-118 -171l-114 174q-51 80 -124 80q-59 0 -108.5 -49.5t-49.5 -118.5z" />
+<glyph unicode="&#xe144;" d="M57 353q0 -94 66 -160l141 -141q66 -66 159 -66q95 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-12 12 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141l19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -18q46 -46 77 -99l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
+<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
+<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
+<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335l-27 7q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5v-307l64 -14 q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5zM700 237 q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
+<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -11 2.5 -24.5t5.5 -24t9.5 -26.5t10.5 -25t14 -27.5t14 -25.5 t15.5 -27t13.5 -24h242v-100h-197q8 -50 -2.5 -115t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q32 1 102 -16t104 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10 t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5t-30 142.5h-221z" />
+<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
+<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
+<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
+<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
+<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
+<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
+<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
+<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
+<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
+<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
+<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
+<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
+<glyph unicode="&#xe162;" d="M216 519q10 -19 32 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8l9 -1q13 0 26 16l538 630q15 19 6 36q-8 18 -32 16h-300q1 4 78 219.5t79 227.5q2 17 -6 27l-8 8h-9q-16 0 -25 -15q-4 -5 -98.5 -111.5t-228 -257t-209.5 -238.5q-17 -19 -7 -40z" />
+<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
+<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
+<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
+<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
+<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
+<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
+<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 401h700v699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
+<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l248 -237v700h-699zM900 150h100v50h-100v-50z" />
+<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
+<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
+<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
+<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
+<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
+<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
+<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
+<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
+<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -117q-25 -16 -43.5 -50.5t-18.5 -65.5v-359z" />
+<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
+<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
+<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q16 17 13 40.5t-22 37.5l-192 136q-19 14 -45 12t-42 -19l-119 -118q-143 103 -267 227q-126 126 -227 268l118 118q17 17 20 41.5 t-11 44.5l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
+<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -15 -35.5t-35 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
+<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
+<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
+<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
+<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
+<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
+<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
+<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
+<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
+<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
+<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
+<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
+<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
+<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86t85 208q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300 h200l-300 -300z" />
+<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104t60.5 178q0 121 -85 207.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
+<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
+<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -12t1 -11q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
+</font>
+</defs></svg> 
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/fonts/glyphicons-halflings-regular.ttf
----------------------------------------------------------------------
diff --git a/public/fonts/glyphicons-halflings-regular.ttf b/public/fonts/glyphicons-halflings-regular.ttf
new file mode 100644
index 0000000..a498ef4
Binary files /dev/null and b/public/fonts/glyphicons-halflings-regular.ttf differ

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/fonts/glyphicons-halflings-regular.woff
----------------------------------------------------------------------
diff --git a/public/fonts/glyphicons-halflings-regular.woff b/public/fonts/glyphicons-halflings-regular.woff
new file mode 100644
index 0000000..d83c539
Binary files /dev/null and b/public/fonts/glyphicons-halflings-regular.woff differ

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/index.php
----------------------------------------------------------------------
diff --git a/public/index.php b/public/index.php
new file mode 100755
index 0000000..6649cb7
--- /dev/null
+++ b/public/index.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Laravel - A PHP Framework For Web Artisans
+ *
+ * @package  Laravel
+ * @author   Taylor Otwell <ta...@gmail.com>
+ */
+
+/*
+|--------------------------------------------------------------------------
+| Register The Auto Loader
+|--------------------------------------------------------------------------
+|
+| Composer provides a convenient, automatically generated class loader
+| for our application. We just need to utilize it! We'll require it
+| into the script here so that we do not have to worry about the
+| loading of any our classes "manually". Feels great to relax.
+|
+*/
+
+require __DIR__.'/../bootstrap/autoload.php';
+
+/*
+|--------------------------------------------------------------------------
+| Turn On The Lights
+|--------------------------------------------------------------------------
+|
+| We need to illuminate PHP development, so let's turn on the lights.
+| This bootstraps the framework and gets it ready for use, then it
+| will load up this application so that we can run it and send
+| the responses back to the browser and delight these users.
+|
+*/
+
+$app = require_once __DIR__.'/../bootstrap/start.php';
+
+/*
+|--------------------------------------------------------------------------
+| Run The Application
+|--------------------------------------------------------------------------
+|
+| Once we have the application, we can simply call the run method,
+| which will execute the request and send the response back to
+| the client's browser allowing them to enjoy the creative
+| and wonderful application we have whipped up for them.
+|
+*/
+
+
+//try{
+	$app->run();
+//}
+//catch(\Exception $e){
+//	var_dump( $e);
+//}


[13/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php b/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php
new file mode 100755
index 0000000..e3da955
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php
@@ -0,0 +1,412 @@
+<?php namespace Illuminate\Filesystem;
+
+use FilesystemIterator;
+use Symfony\Component\Finder\Finder;
+
+class Filesystem {
+
+	/**
+	 * Determine if a file exists.
+	 *
+	 * @param  string  $path
+	 * @return bool
+	 */
+	public function exists($path)
+	{
+		return file_exists($path);
+	}
+
+	/**
+	 * Get the contents of a file.
+	 *
+	 * @param  string  $path
+	 * @return string
+	 *
+	 * @throws FileNotFoundException
+	 */
+	public function get($path)
+	{
+		if ($this->isFile($path)) return file_get_contents($path);
+
+		throw new FileNotFoundException("File does not exist at path {$path}");
+	}
+
+	/**
+	 * Get the returned value of a file.
+	 *
+	 * @param  string  $path
+	 * @return mixed
+	 *
+	 * @throws FileNotFoundException
+	 */
+	public function getRequire($path)
+	{
+		if ($this->isFile($path)) return require $path;
+
+		throw new FileNotFoundException("File does not exist at path {$path}");
+	}
+
+	/**
+	 * Require the given file once.
+	 *
+	 * @param  string  $file
+	 * @return mixed
+	 */
+	public function requireOnce($file)
+	{
+		require_once $file;
+	}
+
+	/**
+	 * Write the contents of a file.
+	 *
+	 * @param  string  $path
+	 * @param  string  $contents
+	 * @param  bool  $lock
+	 * @return int
+	 */
+	public function put($path, $contents, $lock = false)
+	{
+		return file_put_contents($path, $contents, $lock ? LOCK_EX : 0);
+	}
+
+	/**
+	 * Prepend to a file.
+	 *
+	 * @param  string  $path
+	 * @param  string  $data
+	 * @return int
+	 */
+	public function prepend($path, $data)
+	{
+		if ($this->exists($path))
+		{
+			return $this->put($path, $data.$this->get($path));
+		}
+
+		return $this->put($path, $data);
+	}
+
+	/**
+	 * Append to a file.
+	 *
+	 * @param  string  $path
+	 * @param  string  $data
+	 * @return int
+	 */
+	public function append($path, $data)
+	{
+		return file_put_contents($path, $data, FILE_APPEND);
+	}
+
+	/**
+	 * Delete the file at a given path.
+	 *
+	 * @param  string|array  $paths
+	 * @return bool
+	 */
+	public function delete($paths)
+	{
+		$paths = is_array($paths) ? $paths : func_get_args();
+
+		$success = true;
+
+		foreach ($paths as $path) { if ( ! @unlink($path)) $success = false; }
+
+		return $success;
+	}
+
+	/**
+	 * Move a file to a new location.
+	 *
+	 * @param  string  $path
+	 * @param  string  $target
+	 * @return bool
+	 */
+	public function move($path, $target)
+	{
+		return rename($path, $target);
+	}
+
+	/**
+	 * Copy a file to a new location.
+	 *
+	 * @param  string  $path
+	 * @param  string  $target
+	 * @return bool
+	 */
+	public function copy($path, $target)
+	{
+		return copy($path, $target);
+	}
+
+	/**
+	 * Extract the file name from a file path.
+	 *
+	 * @param  string  $path
+	 * @return string
+	 */
+	public function name($path)
+	{
+		return pathinfo($path, PATHINFO_FILENAME);
+	}
+
+	/**
+	 * Extract the file extension from a file path.
+	 *
+	 * @param  string  $path
+	 * @return string
+	 */
+	public function extension($path)
+	{
+		return pathinfo($path, PATHINFO_EXTENSION);
+	}
+
+	/**
+	 * Get the file type of a given file.
+	 *
+	 * @param  string  $path
+	 * @return string
+	 */
+	public function type($path)
+	{
+		return filetype($path);
+	}
+
+	/**
+	 * Get the file size of a given file.
+	 *
+	 * @param  string  $path
+	 * @return int
+	 */
+	public function size($path)
+	{
+		return filesize($path);
+	}
+
+	/**
+	 * Get the file's last modification time.
+	 *
+	 * @param  string  $path
+	 * @return int
+	 */
+	public function lastModified($path)
+	{
+		return filemtime($path);
+	}
+
+	/**
+	 * Determine if the given path is a directory.
+	 *
+	 * @param  string  $directory
+	 * @return bool
+	 */
+	public function isDirectory($directory)
+	{
+		return is_dir($directory);
+	}
+
+	/**
+	 * Determine if the given path is writable.
+	 *
+	 * @param  string  $path
+	 * @return bool
+	 */
+	public function isWritable($path)
+	{
+		return is_writable($path);
+	}
+
+	/**
+	 * Determine if the given path is a file.
+	 *
+	 * @param  string  $file
+	 * @return bool
+	 */
+	public function isFile($file)
+	{
+		return is_file($file);
+	}
+
+	/**
+	 * Find path names matching a given pattern.
+	 *
+	 * @param  string  $pattern
+	 * @param  int     $flags
+	 * @return array
+	 */
+	public function glob($pattern, $flags = 0)
+	{
+		return glob($pattern, $flags);
+	}
+
+	/**
+	 * Get an array of all files in a directory.
+	 *
+	 * @param  string  $directory
+	 * @return array
+	 */
+	public function files($directory)
+	{
+		$glob = glob($directory.'/*');
+
+		if ($glob === false) return array();
+
+		// To get the appropriate files, we'll simply glob the directory and filter
+		// out any "files" that are not truly files so we do not end up with any
+		// directories in our list, but only true files within the directory.
+		return array_filter($glob, function($file)
+		{
+			return filetype($file) == 'file';
+		});
+	}
+
+	/**
+	 * Get all of the files from the given directory (recursive).
+	 *
+	 * @param  string  $directory
+	 * @return array
+	 */
+	public function allFiles($directory)
+	{
+		return iterator_to_array(Finder::create()->files()->in($directory), false);
+	}
+
+	/**
+	 * Get all of the directories within a given directory.
+	 *
+	 * @param  string  $directory
+	 * @return array
+	 */
+	public function directories($directory)
+	{
+		$directories = array();
+
+		foreach (Finder::create()->in($directory)->directories()->depth(0) as $dir)
+		{
+			$directories[] = $dir->getPathname();
+		}
+
+		return $directories;
+	}
+
+	/**
+	 * Create a directory.
+	 *
+	 * @param  string  $path
+	 * @param  int     $mode
+	 * @param  bool    $recursive
+	 * @param  bool    $force
+	 * @return bool
+	 */
+	public function makeDirectory($path, $mode = 0755, $recursive = false, $force = false)
+	{
+		if ($force)
+		{
+			return @mkdir($path, $mode, $recursive);
+		}
+
+		return mkdir($path, $mode, $recursive);
+	}
+
+	/**
+	 * Copy a directory from one location to another.
+	 *
+	 * @param  string  $directory
+	 * @param  string  $destination
+	 * @param  int     $options
+	 * @return bool
+	 */
+	public function copyDirectory($directory, $destination, $options = null)
+	{
+		if ( ! $this->isDirectory($directory)) return false;
+
+		$options = $options ?: FilesystemIterator::SKIP_DOTS;
+
+		// If the destination directory does not actually exist, we will go ahead and
+		// create it recursively, which just gets the destination prepared to copy
+		// the files over. Once we make the directory we'll proceed the copying.
+		if ( ! $this->isDirectory($destination))
+		{
+			$this->makeDirectory($destination, 0777, true);
+		}
+
+		$items = new FilesystemIterator($directory, $options);
+
+		foreach ($items as $item)
+		{
+			// As we spin through items, we will check to see if the current file is actually
+			// a directory or a file. When it is actually a directory we will need to call
+			// back into this function recursively to keep copying these nested folders.
+			$target = $destination.'/'.$item->getBasename();
+
+			if ($item->isDir())
+			{
+				$path = $item->getPathname();
+
+				if ( ! $this->copyDirectory($path, $target, $options)) return false;
+			}
+
+			// If the current items is just a regular file, we will just copy this to the new
+			// location and keep looping. If for some reason the copy fails we'll bail out
+			// and return false, so the developer is aware that the copy process failed.
+			else
+			{
+				if ( ! $this->copy($item->getPathname(), $target)) return false;
+			}
+		}
+
+		return true;
+	}
+
+	/**
+	 * Recursively delete a directory.
+	 *
+	 * The directory itself may be optionally preserved.
+	 *
+	 * @param  string  $directory
+	 * @param  bool    $preserve
+	 * @return bool
+	 */
+	public function deleteDirectory($directory, $preserve = false)
+	{
+		if ( ! $this->isDirectory($directory)) return false;
+
+		$items = new FilesystemIterator($directory);
+
+		foreach ($items as $item)
+		{
+			// If the item is a directory, we can just recurse into the function and
+			// delete that sub-directory otherwise we'll just delete the file and
+			// keep iterating through each file until the directory is cleaned.
+			if ($item->isDir())
+			{
+				$this->deleteDirectory($item->getPathname());
+			}
+
+			// If the item is just a file, we can go ahead and delete it since we're
+			// just looping through and waxing all of the files in this directory
+			// and calling directories recursively, so we delete the real path.
+			else
+			{
+				$this->delete($item->getPathname());
+			}
+		}
+
+		if ( ! $preserve) @rmdir($directory);
+
+		return true;
+	}
+
+	/**
+	 * Empty the specified directory of all files and folders.
+	 *
+	 * @param  string  $directory
+	 * @return bool
+	 */
+	public function cleanDirectory($directory)
+	{
+		return $this->deleteDirectory($directory, true);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php
new file mode 100755
index 0000000..5e76b2a
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php
@@ -0,0 +1,17 @@
+<?php namespace Illuminate\Filesystem;
+
+use Illuminate\Support\ServiceProvider;
+
+class FilesystemServiceProvider extends ServiceProvider {
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('files', function() { return new Filesystem; });
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Filesystem/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Filesystem/composer.json b/vendor/laravel/framework/src/Illuminate/Filesystem/composer.json
new file mode 100755
index 0000000..7466c89
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Filesystem/composer.json
@@ -0,0 +1,27 @@
+{
+    "name": "illuminate/filesystem",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/support": "4.2.*",
+        "symfony/finder": "2.5.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Filesystem": ""
+        }
+    },
+    "target-dir": "Illuminate/Filesystem",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/AliasLoader.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/AliasLoader.php b/vendor/laravel/framework/src/Illuminate/Foundation/AliasLoader.php
new file mode 100755
index 0000000..9894a73
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/AliasLoader.php
@@ -0,0 +1,158 @@
+<?php namespace Illuminate\Foundation;
+
+class AliasLoader {
+
+	/**
+	 * The array of class aliases.
+	 *
+	 * @var array
+	 */
+	protected $aliases;
+
+	/**
+	 * Indicates if a loader has been registered.
+	 *
+	 * @var bool
+	 */
+	protected $registered = false;
+
+	/**
+	 * The singleton instance of the loader.
+	 *
+	 * @var \Illuminate\Foundation\AliasLoader
+	 */
+	protected static $instance;
+
+	/**
+	 * Create a new class alias loader instance.
+	 *
+	 * @param  array  $aliases
+	 * @return void
+	 */
+	public function __construct(array $aliases = array())
+	{
+		$this->aliases = $aliases;
+	}
+
+	/**
+	 * Get or create the singleton alias loader instance.
+	 *
+	 * @param  array  $aliases
+	 * @return \Illuminate\Foundation\AliasLoader
+	 */
+	public static function getInstance(array $aliases = array())
+	{
+		if (is_null(static::$instance)) return static::$instance = new static($aliases);
+
+		$aliases = array_merge(static::$instance->getAliases(), $aliases);
+
+		static::$instance->setAliases($aliases);
+
+		return static::$instance;
+	}
+
+	/**
+	 * Load a class alias if it is registered.
+	 *
+	 * @param  string  $alias
+	 * @return void
+	 */
+	public function load($alias)
+	{
+		if (isset($this->aliases[$alias]))
+		{
+			return class_alias($this->aliases[$alias], $alias);
+		}
+	}
+
+	/**
+	 * Add an alias to the loader.
+	 *
+	 * @param  string  $class
+	 * @param  string  $alias
+	 * @return void
+	 */
+	public function alias($class, $alias)
+	{
+		$this->aliases[$class] = $alias;
+	}
+
+	/**
+	 * Register the loader on the auto-loader stack.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		if ( ! $this->registered)
+		{
+			$this->prependToLoaderStack();
+
+			$this->registered = true;
+		}
+	}
+
+	/**
+	 * Prepend the load method to the auto-loader stack.
+	 *
+	 * @return void
+	 */
+	protected function prependToLoaderStack()
+	{
+		spl_autoload_register(array($this, 'load'), true, true);
+	}
+
+	/**
+	 * Get the registered aliases.
+	 *
+	 * @return array
+	 */
+	public function getAliases()
+	{
+		return $this->aliases;
+	}
+
+	/**
+	 * Set the registered aliases.
+	 *
+	 * @param  array  $aliases
+	 * @return void
+	 */
+	public function setAliases(array $aliases)
+	{
+		$this->aliases = $aliases;
+	}
+
+	/**
+	 * Indicates if the loader has been registered.
+	 *
+	 * @return bool
+	 */
+	public function isRegistered()
+	{
+		return $this->registered;
+	}
+
+	/**
+	 * Set the "registered" state of the loader.
+	 *
+	 * @param  bool  $value
+	 * @return void
+	 */
+	public function setRegistered($value)
+	{
+		$this->registered = $value;
+	}
+
+	/**
+	 * Set the value of the singleton alias loader.
+	 *
+	 * @param  \Illuminate\Foundation\AliasLoader  $loader
+	 * @return void
+	 */
+	public static function setInstance($loader)
+	{
+		static::$instance = $loader;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Application.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Application.php b/vendor/laravel/framework/src/Illuminate/Foundation/Application.php
new file mode 100755
index 0000000..fac4e0a
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Application.php
@@ -0,0 +1,1141 @@
+<?php namespace Illuminate\Foundation;
+
+use Closure;
+use Stack\Builder;
+use Illuminate\Http\Request;
+use Illuminate\Http\Response;
+use Illuminate\Config\FileLoader;
+use Illuminate\Container\Container;
+use Illuminate\Filesystem\Filesystem;
+use Illuminate\Support\Facades\Facade;
+use Illuminate\Events\EventServiceProvider;
+use Illuminate\Routing\RoutingServiceProvider;
+use Illuminate\Exception\ExceptionServiceProvider;
+use Illuminate\Config\FileEnvironmentVariablesLoader;
+use Symfony\Component\HttpKernel\HttpKernelInterface;
+use Symfony\Component\HttpKernel\TerminableInterface;
+use Symfony\Component\HttpKernel\Exception\HttpException;
+use Symfony\Component\Debug\Exception\FatalErrorException;
+use Illuminate\Support\Contracts\ResponsePreparerInterface;
+use Symfony\Component\HttpFoundation\Request as SymfonyRequest;
+use Symfony\Component\HttpFoundation\Response as SymfonyResponse;
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
+
+class Application extends Container implements HttpKernelInterface, TerminableInterface, ResponsePreparerInterface {
+
+	/**
+	 * The Laravel framework version.
+	 *
+	 * @var string
+	 */
+	const VERSION = '4.2.17';
+
+	/**
+	 * Indicates if the application has "booted".
+	 *
+	 * @var bool
+	 */
+	protected $booted = false;
+
+	/**
+	 * The array of booting callbacks.
+	 *
+	 * @var array
+	 */
+	protected $bootingCallbacks = array();
+
+	/**
+	 * The array of booted callbacks.
+	 *
+	 * @var array
+	 */
+	protected $bootedCallbacks = array();
+
+	/**
+	 * The array of finish callbacks.
+	 *
+	 * @var array
+	 */
+	protected $finishCallbacks = array();
+
+	/**
+	 * The array of shutdown callbacks.
+	 *
+	 * @var array
+	 */
+	protected $shutdownCallbacks = array();
+
+	/**
+	 * All of the developer defined middlewares.
+	 *
+	 * @var array
+	 */
+	protected $middlewares = array();
+
+	/**
+	 * All of the registered service providers.
+	 *
+	 * @var array
+	 */
+	protected $serviceProviders = array();
+
+	/**
+	 * The names of the loaded service providers.
+	 *
+	 * @var array
+	 */
+	protected $loadedProviders = array();
+
+	/**
+	 * The deferred services and their providers.
+	 *
+	 * @var array
+	 */
+	protected $deferredServices = array();
+
+	/**
+	 * The request class used by the application.
+	 *
+	 * @var string
+	 */
+	protected static $requestClass = 'Illuminate\Http\Request';
+
+	/**
+	 * Create a new Illuminate application instance.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return void
+	 */
+	public function __construct(Request $request = null)
+	{
+		$this->registerBaseBindings($request ?: $this->createNewRequest());
+
+		$this->registerBaseServiceProviders();
+
+		$this->registerBaseMiddlewares();
+	}
+
+	/**
+	 * Create a new request instance from the request class.
+	 *
+	 * @return \Illuminate\Http\Request
+	 */
+	protected function createNewRequest()
+	{
+		return forward_static_call(array(static::$requestClass, 'createFromGlobals'));
+	}
+
+	/**
+	 * Register the basic bindings into the container.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return void
+	 */
+	protected function registerBaseBindings($request)
+	{
+		$this->instance('request', $request);
+
+		$this->instance('Illuminate\Container\Container', $this);
+	}
+
+	/**
+	 * Register all of the base service providers.
+	 *
+	 * @return void
+	 */
+	protected function registerBaseServiceProviders()
+	{
+		foreach (array('Event', 'Exception', 'Routing') as $name)
+		{
+			$this->{"register{$name}Provider"}();
+		}
+	}
+
+	/**
+	 * Register the exception service provider.
+	 *
+	 * @return void
+	 */
+	protected function registerExceptionProvider()
+	{
+		$this->register(new ExceptionServiceProvider($this));
+	}
+
+	/**
+	 * Register the routing service provider.
+	 *
+	 * @return void
+	 */
+	protected function registerRoutingProvider()
+	{
+		$this->register(new RoutingServiceProvider($this));
+	}
+
+	/**
+	 * Register the event service provider.
+	 *
+	 * @return void
+	 */
+	protected function registerEventProvider()
+	{
+		$this->register(new EventServiceProvider($this));
+	}
+
+	/**
+	 * Bind the installation paths to the application.
+	 *
+	 * @param  array  $paths
+	 * @return void
+	 */
+	public function bindInstallPaths(array $paths)
+	{
+		$this->instance('path', realpath($paths['app']));
+
+		// Here we will bind the install paths into the container as strings that can be
+		// accessed from any point in the system. Each path key is prefixed with path
+		// so that they have the consistent naming convention inside the container.
+		foreach (array_except($paths, array('app')) as $key => $value)
+		{
+			$this->instance("path.{$key}", realpath($value));
+		}
+	}
+
+	/**
+	 * Get the application bootstrap file.
+	 *
+	 * @return string
+	 */
+	public static function getBootstrapFile()
+	{
+		return __DIR__.'/start.php';
+	}
+
+	/**
+	 * Start the exception handling for the request.
+	 *
+	 * @return void
+	 */
+	public function startExceptionHandling()
+	{
+		$this['exception']->register($this->environment());
+
+		$this['exception']->setDebug($this['config']['app.debug']);
+	}
+
+	/**
+	 * Get or check the current application environment.
+	 *
+	 * @param  mixed
+	 * @return string
+	 */
+	public function environment()
+	{
+		if (count(func_get_args()) > 0)
+		{
+			return in_array($this['env'], func_get_args());
+		}
+
+		return $this['env'];
+	}
+
+	/**
+	 * Determine if application is in local environment.
+	 *
+	 * @return bool
+	 */
+	public function isLocal()
+	{
+		return $this['env'] == 'local';
+	}
+
+	/**
+	 * Detect the application's current environment.
+	 *
+	 * @param  array|string  $envs
+	 * @return string
+	 */
+	public function detectEnvironment($envs)
+	{
+		$args = isset($_SERVER['argv']) ? $_SERVER['argv'] : null;
+
+		return $this['env'] = (new EnvironmentDetector())->detect($envs, $args);
+	}
+
+	/**
+	 * Determine if we are running in the console.
+	 *
+	 * @return bool
+	 */
+	public function runningInConsole()
+	{
+		return php_sapi_name() == 'cli';
+	}
+
+	/**
+	 * Determine if we are running unit tests.
+	 *
+	 * @return bool
+	 */
+	public function runningUnitTests()
+	{
+		return $this['env'] == 'testing';
+	}
+
+	/**
+	 * Force register a service provider with the application.
+	 *
+	 * @param  \Illuminate\Support\ServiceProvider|string  $provider
+	 * @param  array  $options
+	 * @return \Illuminate\Support\ServiceProvider
+	 */
+	public function forceRegister($provider, $options = array())
+	{
+		return $this->register($provider, $options, true);
+	}
+
+	/**
+	 * Register a service provider with the application.
+	 *
+	 * @param  \Illuminate\Support\ServiceProvider|string  $provider
+	 * @param  array  $options
+	 * @param  bool   $force
+	 * @return \Illuminate\Support\ServiceProvider
+	 */
+	public function register($provider, $options = array(), $force = false)
+	{
+		if ($registered = $this->getRegistered($provider) && ! $force)
+                                     return $registered;
+
+		// If the given "provider" is a string, we will resolve it, passing in the
+		// application instance automatically for the developer. This is simply
+		// a more convenient way of specifying your service provider classes.
+		if (is_string($provider))
+		{
+			$provider = $this->resolveProviderClass($provider);
+		}
+
+		$provider->register();
+
+		// Once we have registered the service we will iterate through the options
+		// and set each of them on the application so they will be available on
+		// the actual loading of the service objects and for developer usage.
+		foreach ($options as $key => $value)
+		{
+			$this[$key] = $value;
+		}
+
+		$this->markAsRegistered($provider);
+
+		// If the application has already booted, we will call this boot method on
+		// the provider class so it has an opportunity to do its boot logic and
+		// will be ready for any usage by the developer's application logics.
+		if ($this->booted) $provider->boot();
+
+		return $provider;
+	}
+
+	/**
+	 * Get the registered service provider instance if it exists.
+	 *
+	 * @param  \Illuminate\Support\ServiceProvider|string  $provider
+	 * @return \Illuminate\Support\ServiceProvider|null
+	 */
+	public function getRegistered($provider)
+	{
+		$name = is_string($provider) ? $provider : get_class($provider);
+
+		if (array_key_exists($name, $this->loadedProviders))
+		{
+			return array_first($this->serviceProviders, function($key, $value) use ($name)
+			{
+				return get_class($value) == $name;
+			});
+		}
+	}
+
+	/**
+	 * Resolve a service provider instance from the class name.
+	 *
+	 * @param  string  $provider
+	 * @return \Illuminate\Support\ServiceProvider
+	 */
+	public function resolveProviderClass($provider)
+	{
+		return new $provider($this);
+	}
+
+	/**
+	 * Mark the given provider as registered.
+	 *
+	 * @param  \Illuminate\Support\ServiceProvider
+	 * @return void
+	 */
+	protected function markAsRegistered($provider)
+	{
+		$this['events']->fire($class = get_class($provider), array($provider));
+
+		$this->serviceProviders[] = $provider;
+
+		$this->loadedProviders[$class] = true;
+	}
+
+	/**
+	 * Load and boot all of the remaining deferred providers.
+	 *
+	 * @return void
+	 */
+	public function loadDeferredProviders()
+	{
+		// We will simply spin through each of the deferred providers and register each
+		// one and boot them if the application has booted. This should make each of
+		// the remaining services available to this application for immediate use.
+		foreach ($this->deferredServices as $service => $provider)
+		{
+			$this->loadDeferredProvider($service);
+		}
+
+		$this->deferredServices = array();
+	}
+
+	/**
+	 * Load the provider for a deferred service.
+	 *
+	 * @param  string  $service
+	 * @return void
+	 */
+	protected function loadDeferredProvider($service)
+	{
+		$provider = $this->deferredServices[$service];
+
+		// If the service provider has not already been loaded and registered we can
+		// register it with the application and remove the service from this list
+		// of deferred services, since it will already be loaded on subsequent.
+		if ( ! isset($this->loadedProviders[$provider]))
+		{
+			$this->registerDeferredProvider($provider, $service);
+		}
+	}
+
+	/**
+	 * Register a deferred provider and service.
+	 *
+	 * @param  string  $provider
+	 * @param  string  $service
+	 * @return void
+	 */
+	public function registerDeferredProvider($provider, $service = null)
+	{
+		// Once the provider that provides the deferred service has been registered we
+		// will remove it from our local list of the deferred services with related
+		// providers so that this container does not try to resolve it out again.
+		if ($service) unset($this->deferredServices[$service]);
+
+		$this->register($instance = new $provider($this));
+
+		if ( ! $this->booted)
+		{
+			$this->booting(function() use ($instance)
+			{
+				$instance->boot();
+			});
+		}
+	}
+
+	/**
+	 * Resolve the given type from the container.
+	 *
+	 * (Overriding Container::make)
+	 *
+	 * @param  string  $abstract
+	 * @param  array   $parameters
+	 * @return mixed
+	 */
+	public function make($abstract, $parameters = array())
+	{
+		$abstract = $this->getAlias($abstract);
+
+		if (isset($this->deferredServices[$abstract]))
+		{
+			$this->loadDeferredProvider($abstract);
+		}
+
+		return parent::make($abstract, $parameters);
+	}
+
+	/**
+	 * Determine if the given abstract type has been bound.
+	 *
+	 * (Overriding Container::bound)
+	 *
+	 * @param  string  $abstract
+	 * @return bool
+	 */
+	public function bound($abstract)
+	{
+		return isset($this->deferredServices[$abstract]) || parent::bound($abstract);
+	}
+
+	/**
+	 * "Extend" an abstract type in the container.
+	 *
+	 * (Overriding Container::extend)
+	 *
+	 * @param  string   $abstract
+	 * @param  \Closure  $closure
+	 * @return void
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	public function extend($abstract, Closure $closure)
+	{
+		$abstract = $this->getAlias($abstract);
+
+		if (isset($this->deferredServices[$abstract]))
+		{
+			$this->loadDeferredProvider($abstract);
+		}
+
+		return parent::extend($abstract, $closure);
+	}
+
+	/**
+	 * Register a "before" application filter.
+	 *
+	 * @param  \Closure|string  $callback
+	 * @return void
+	 */
+	public function before($callback)
+	{
+		return $this['router']->before($callback);
+	}
+
+	/**
+	 * Register an "after" application filter.
+	 *
+	 * @param  \Closure|string  $callback
+	 * @return void
+	 */
+	public function after($callback)
+	{
+		return $this['router']->after($callback);
+	}
+
+	/**
+	 * Register a "finish" application filter.
+	 *
+	 * @param  \Closure|string  $callback
+	 * @return void
+	 */
+	public function finish($callback)
+	{
+		$this->finishCallbacks[] = $callback;
+	}
+
+	/**
+	 * Register a "shutdown" callback.
+	 *
+	 * @param  callable  $callback
+	 * @return void
+	 */
+	public function shutdown(callable $callback = null)
+	{
+		if (is_null($callback))
+		{
+			$this->fireAppCallbacks($this->shutdownCallbacks);
+		}
+		else
+		{
+			$this->shutdownCallbacks[] = $callback;
+		}
+	}
+
+	/**
+	 * Register a function for determining when to use array sessions.
+	 *
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function useArraySessions(Closure $callback)
+	{
+		$this->bind('session.reject', function() use ($callback)
+		{
+			return $callback;
+		});
+	}
+
+	/**
+	 * Determine if the application has booted.
+	 *
+	 * @return bool
+	 */
+	public function isBooted()
+	{
+		return $this->booted;
+	}
+
+	/**
+	 * Boot the application's service providers.
+	 *
+	 * @return void
+	 */
+	public function boot()
+	{
+		if ($this->booted) return;
+
+		array_walk($this->serviceProviders, function($p) { $p->boot(); });
+
+		$this->bootApplication();
+	}
+
+	/**
+	 * Boot the application and fire app callbacks.
+	 *
+	 * @return void
+	 */
+	protected function bootApplication()
+	{
+		// Once the application has booted we will also fire some "booted" callbacks
+		// for any listeners that need to do work after this initial booting gets
+		// finished. This is useful when ordering the boot-up processes we run.
+		$this->fireAppCallbacks($this->bootingCallbacks);
+
+		$this->booted = true;
+
+		$this->fireAppCallbacks($this->bootedCallbacks);
+	}
+
+	/**
+	 * Register a new boot listener.
+	 *
+	 * @param  mixed  $callback
+	 * @return void
+	 */
+	public function booting($callback)
+	{
+		$this->bootingCallbacks[] = $callback;
+	}
+
+	/**
+	 * Register a new "booted" listener.
+	 *
+	 * @param  mixed  $callback
+	 * @return void
+	 */
+	public function booted($callback)
+	{
+		$this->bootedCallbacks[] = $callback;
+
+		if ($this->isBooted()) $this->fireAppCallbacks(array($callback));
+	}
+
+	/**
+	 * Run the application and send the response.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @return void
+	 */
+	public function run(SymfonyRequest $request = null)
+	{
+		$request = $request ?: $this['request'];
+
+		$response = with($stack = $this->getStackedClient())->handle($request);
+
+		$response->send();
+
+		$stack->terminate($request, $response);
+	}
+
+	/**
+	 * Get the stacked HTTP kernel for the application.
+	 *
+	 * @return  \Symfony\Component\HttpKernel\HttpKernelInterface
+	 */
+	protected function getStackedClient()
+	{
+		$sessionReject = $this->bound('session.reject') ? $this['session.reject'] : null;
+
+		$client = (new Builder)
+                    ->push('Illuminate\Cookie\Guard', $this['encrypter'])
+                    ->push('Illuminate\Cookie\Queue', $this['cookie'])
+                    ->push('Illuminate\Session\Middleware', $this['session'], $sessionReject);
+
+		$this->mergeCustomMiddlewares($client);
+
+		return $client->resolve($this);
+	}
+
+	/**
+	 * Merge the developer defined middlewares onto the stack.
+	 *
+	 * @param  \Stack\Builder
+	 * @return void
+	 */
+	protected function mergeCustomMiddlewares(Builder $stack)
+	{
+		foreach ($this->middlewares as $middleware)
+		{
+			list($class, $parameters) = array_values($middleware);
+
+			array_unshift($parameters, $class);
+
+			call_user_func_array(array($stack, 'push'), $parameters);
+		}
+	}
+
+	/**
+	 * Register the default, but optional middlewares.
+	 *
+	 * @return void
+	 */
+	protected function registerBaseMiddlewares()
+	{
+		//
+	}
+
+	/**
+	 * Add a HttpKernel middleware onto the stack.
+	 *
+	 * @param  string  $class
+	 * @param  array  $parameters
+	 * @return $this
+	 */
+	public function middleware($class, array $parameters = array())
+	{
+		$this->middlewares[] = compact('class', 'parameters');
+
+		return $this;
+	}
+
+	/**
+	 * Remove a custom middleware from the application.
+	 *
+	 * @param  string  $class
+	 * @return void
+	 */
+	public function forgetMiddleware($class)
+	{
+		$this->middlewares = array_filter($this->middlewares, function($m) use ($class)
+		{
+			return $m['class'] != $class;
+		});
+	}
+
+	/**
+	 * Handle the given request and get the response.
+	 *
+	 * Provides compatibility with BrowserKit functional testing.
+	 *
+	 * @implements HttpKernelInterface::handle
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @param  int   $type
+	 * @param  bool  $catch
+	 * @return \Symfony\Component\HttpFoundation\Response
+	 *
+	 * @throws \Exception
+	 */
+	public function handle(SymfonyRequest $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
+	{
+		try
+		{
+			$this->refreshRequest($request = Request::createFromBase($request));
+
+			$this->boot();
+
+			return $this->dispatch($request);
+		}
+		catch (\Exception $e)
+		{
+			if ( ! $catch || $this->runningUnitTests()) throw $e;
+
+			return $this['exception']->handleException($e);
+		}
+	}
+
+	/**
+	 * Handle the given request and get the response.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return \Symfony\Component\HttpFoundation\Response
+	 */
+	public function dispatch(Request $request)
+	{
+		if ($this->isDownForMaintenance())
+		{
+			$response = $this['events']->until('illuminate.app.down');
+
+			if ( ! is_null($response)) return $this->prepareResponse($response, $request);
+		}
+
+		if ($this->runningUnitTests() && ! $this['session']->isStarted())
+		{
+			$this['session']->start();
+		}
+
+		return $this['router']->dispatch($this->prepareRequest($request));
+	}
+
+	/**
+	 * Call the "finish" and "shutdown" callbacks assigned to the application.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @param  \Symfony\Component\HttpFoundation\Response  $response
+	 * @return void
+	 */
+	public function terminate(SymfonyRequest $request, SymfonyResponse $response)
+	{
+		$this->callFinishCallbacks($request, $response);
+
+		$this->shutdown();
+	}
+
+	/**
+	 * Refresh the bound request instance in the container.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return void
+	 */
+	protected function refreshRequest(Request $request)
+	{
+		$this->instance('request', $request);
+
+		Facade::clearResolvedInstance('request');
+	}
+
+	/**
+	 * Call the "finish" callbacks assigned to the application.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @param  \Symfony\Component\HttpFoundation\Response  $response
+	 * @return void
+	 */
+	public function callFinishCallbacks(SymfonyRequest $request, SymfonyResponse $response)
+	{
+		foreach ($this->finishCallbacks as $callback)
+		{
+			call_user_func($callback, $request, $response);
+		}
+	}
+
+	/**
+	 * Call the booting callbacks for the application.
+	 *
+	 * @param  array  $callbacks
+	 * @return void
+	 */
+	protected function fireAppCallbacks(array $callbacks)
+	{
+		foreach ($callbacks as $callback)
+		{
+			call_user_func($callback, $this);
+		}
+	}
+
+	/**
+	 * Prepare the request by injecting any services.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @return \Illuminate\Http\Request
+	 */
+	public function prepareRequest(Request $request)
+	{
+		if ( ! is_null($this['config']['session.driver']) && ! $request->hasSession())
+		{
+			$request->setSession($this['session']->driver());
+		}
+
+		return $request;
+	}
+
+	/**
+	 * Prepare the given value as a Response object.
+	 *
+	 * @param  mixed  $value
+	 * @return \Symfony\Component\HttpFoundation\Response
+	 */
+	public function prepareResponse($value)
+	{
+		if ( ! $value instanceof SymfonyResponse) $value = new Response($value);
+
+		return $value->prepare($this['request']);
+	}
+
+	/**
+	 * Determine if the application is ready for responses.
+	 *
+	 * @return bool
+	 */
+	public function readyForResponses()
+	{
+		return $this->booted;
+	}
+
+	/**
+	 * Determine if the application is currently down for maintenance.
+	 *
+	 * @return bool
+	 */
+	public function isDownForMaintenance()
+	{
+		return file_exists($this['config']['app.manifest'].'/down');
+	}
+
+	/**
+	 * Register a maintenance mode event listener.
+	 *
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function down(Closure $callback)
+	{
+		$this['events']->listen('illuminate.app.down', $callback);
+	}
+
+	/**
+	 * Throw an HttpException with the given data.
+	 *
+	 * @param  int     $code
+	 * @param  string  $message
+	 * @param  array   $headers
+	 * @return void
+	 *
+	 * @throws \Symfony\Component\HttpKernel\Exception\HttpException
+	 * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
+	 */
+	public function abort($code, $message = '', array $headers = array())
+	{
+		if ($code == 404)
+		{
+			throw new NotFoundHttpException($message);
+		}
+
+		throw new HttpException($code, $message, null, $headers);
+	}
+
+	/**
+	 * Register a 404 error handler.
+	 *
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function missing(Closure $callback)
+	{
+		$this->error(function(NotFoundHttpException $e) use ($callback)
+		{
+			return call_user_func($callback, $e);
+		});
+	}
+
+	/**
+	 * Register an application error handler.
+	 *
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function error(Closure $callback)
+	{
+		$this['exception']->error($callback);
+	}
+
+	/**
+	 * Register an error handler at the bottom of the stack.
+	 *
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function pushError(Closure $callback)
+	{
+		$this['exception']->pushError($callback);
+	}
+
+	/**
+	 * Register an error handler for fatal errors.
+	 *
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function fatal(Closure $callback)
+	{
+		$this->error(function(FatalErrorException $e) use ($callback)
+		{
+			return call_user_func($callback, $e);
+		});
+	}
+
+	/**
+	 * Get the configuration loader instance.
+	 *
+	 * @return \Illuminate\Config\LoaderInterface
+	 */
+	public function getConfigLoader()
+	{
+		return new FileLoader(new Filesystem, $this['path'].'/config');
+	}
+
+	/**
+	 * Get the environment variables loader instance.
+	 *
+	 * @return \Illuminate\Config\EnvironmentVariablesLoaderInterface
+	 */
+	public function getEnvironmentVariablesLoader()
+	{
+		return new FileEnvironmentVariablesLoader(new Filesystem, $this['path.base']);
+	}
+
+	/**
+	 * Get the service provider repository instance.
+	 *
+	 * @return \Illuminate\Foundation\ProviderRepository
+	 */
+	public function getProviderRepository()
+	{
+		$manifest = $this['config']['app.manifest'];
+
+		return new ProviderRepository(new Filesystem, $manifest);
+	}
+
+	/**
+	 * Get the service providers that have been loaded.
+	 *
+	 * @return array
+	 */
+	public function getLoadedProviders()
+	{
+		return $this->loadedProviders;
+	}
+
+	/**
+	 * Set the application's deferred services.
+	 *
+	 * @param  array  $services
+	 * @return void
+	 */
+	public function setDeferredServices(array $services)
+	{
+		$this->deferredServices = $services;
+	}
+
+	/**
+	 * Determine if the given service is a deferred service.
+	 *
+	 * @param  string  $service
+	 * @return bool
+	 */
+	public function isDeferredService($service)
+	{
+		return isset($this->deferredServices[$service]);
+	}
+
+	/**
+	 * Get or set the request class for the application.
+	 *
+	 * @param  string  $class
+	 * @return string
+	 */
+	public static function requestClass($class = null)
+	{
+		if ( ! is_null($class)) static::$requestClass = $class;
+
+		return static::$requestClass;
+	}
+
+	/**
+	 * Set the application request for the console environment.
+	 *
+	 * @return void
+	 */
+	public function setRequestForConsoleEnvironment()
+	{
+		$url = $this['config']->get('app.url', 'http://localhost');
+
+		$parameters = array($url, 'GET', array(), array(), array(), $_SERVER);
+
+		$this->refreshRequest(static::onRequest('create', $parameters));
+	}
+
+	/**
+	 * Call a method on the default request class.
+	 *
+	 * @param  string  $method
+	 * @param  array  $parameters
+	 * @return mixed
+	 */
+	public static function onRequest($method, $parameters = array())
+	{
+		return forward_static_call_array(array(static::requestClass(), $method), $parameters);
+	}
+
+	/**
+	 * Get the current application locale.
+	 *
+	 * @return string
+	 */
+	public function getLocale()
+	{
+		return $this['config']->get('app.locale');
+	}
+
+	/**
+	 * Set the current application locale.
+	 *
+	 * @param  string  $locale
+	 * @return void
+	 */
+	public function setLocale($locale)
+	{
+		$this['config']->set('app.locale', $locale);
+
+		$this['translator']->setLocale($locale);
+
+		$this['events']->fire('locale.changed', array($locale));
+	}
+
+	/**
+	 * Register the core class aliases in the container.
+	 *
+	 * @return void
+	 */
+	public function registerCoreContainerAliases()
+	{
+		$aliases = array(
+			'app'            => 'Illuminate\Foundation\Application',
+			'artisan'        => 'Illuminate\Console\Application',
+			'auth'           => 'Illuminate\Auth\AuthManager',
+			'auth.reminder.repository' => 'Illuminate\Auth\Reminders\ReminderRepositoryInterface',
+			'blade.compiler' => 'Illuminate\View\Compilers\BladeCompiler',
+			'cache'          => 'Illuminate\Cache\CacheManager',
+			'cache.store'    => 'Illuminate\Cache\Repository',
+			'config'         => 'Illuminate\Config\Repository',
+			'cookie'         => 'Illuminate\Cookie\CookieJar',
+			'encrypter'      => 'Illuminate\Encryption\Encrypter',
+			'db'             => 'Illuminate\Database\DatabaseManager',
+			'events'         => 'Illuminate\Events\Dispatcher',
+			'files'          => 'Illuminate\Filesystem\Filesystem',
+			'form'           => 'Illuminate\Html\FormBuilder',
+			'hash'           => 'Illuminate\Hashing\HasherInterface',
+			'html'           => 'Illuminate\Html\HtmlBuilder',
+			'translator'     => 'Illuminate\Translation\Translator',
+			'log'            => 'Illuminate\Log\Writer',
+			'mailer'         => 'Illuminate\Mail\Mailer',
+			'paginator'      => 'Illuminate\Pagination\Factory',
+			'auth.reminder'  => 'Illuminate\Auth\Reminders\PasswordBroker',
+			'queue'          => 'Illuminate\Queue\QueueManager',
+			'redirect'       => 'Illuminate\Routing\Redirector',
+			'redis'          => 'Illuminate\Redis\Database',
+			'request'        => 'Illuminate\Http\Request',
+			'router'         => 'Illuminate\Routing\Router',
+			'session'        => 'Illuminate\Session\SessionManager',
+			'session.store'  => 'Illuminate\Session\Store',
+			'remote'         => 'Illuminate\Remote\RemoteManager',
+			'url'            => 'Illuminate\Routing\UrlGenerator',
+			'validator'      => 'Illuminate\Validation\Factory',
+			'view'           => 'Illuminate\View\Factory',
+		);
+
+		foreach ($aliases as $key => $alias)
+		{
+			$this->alias($key, $alias);
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Artisan.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Artisan.php b/vendor/laravel/framework/src/Illuminate/Foundation/Artisan.php
new file mode 100755
index 0000000..2b6f23d
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Artisan.php
@@ -0,0 +1,60 @@
+<?php namespace Illuminate\Foundation;
+
+use Illuminate\Console\Application as ConsoleApplication;
+
+class Artisan {
+
+	/**
+	 * The application instance.
+	 *
+	 * @var \Illuminate\Foundation\Application
+	 */
+	protected $app;
+
+	/**
+	 * The Artisan console instance.
+	 *
+	 * @var \Illuminate\Console\Application
+	 */
+	protected $artisan;
+
+	/**
+	 * Create a new Artisan command runner instance.
+	 *
+	 * @param  \Illuminate\Foundation\Application  $app
+	 * @return void
+	 */
+	public function __construct(Application $app)
+	{
+		$this->app = $app;
+	}
+
+	/**
+	 * Get the Artisan console instance.
+	 *
+	 * @return \Illuminate\Console\Application
+	 */
+	protected function getArtisan()
+	{
+		if ( ! is_null($this->artisan)) return $this->artisan;
+
+		$this->app->loadDeferredProviders();
+
+		$this->artisan = ConsoleApplication::make($this->app);
+
+		return $this->artisan->boot();
+	}
+
+	/**
+	 * Dynamically pass all missing methods to console Artisan.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 */
+	public function __call($method, $parameters)
+	{
+		return call_user_func_array(array($this->getArtisan(), $method), $parameters);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/AssetPublisher.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/AssetPublisher.php b/vendor/laravel/framework/src/Illuminate/Foundation/AssetPublisher.php
new file mode 100755
index 0000000..a7fd36d
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/AssetPublisher.php
@@ -0,0 +1,94 @@
+<?php namespace Illuminate\Foundation;
+
+use Illuminate\Filesystem\Filesystem;
+
+class AssetPublisher {
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * The path where assets should be published.
+	 *
+	 * @var string
+	 */
+	protected $publishPath;
+
+	/**
+	 * The path where packages are located.
+	 *
+	 * @var string
+	 */
+	protected $packagePath;
+
+	/**
+	 * Create a new asset publisher instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @param  string  $publishPath
+	 * @return void
+	 */
+	public function __construct(Filesystem $files, $publishPath)
+	{
+		$this->files = $files;
+		$this->publishPath = $publishPath;
+	}
+
+	/**
+	 * Copy all assets from a given path to the publish path.
+	 *
+	 * @param  string  $name
+	 * @param  string  $source
+	 * @return bool
+	 *
+	 * @throws \RuntimeException
+	 */
+	public function publish($name, $source)
+	{
+		$destination = $this->publishPath."/packages/{$name}";
+
+		$success = $this->files->copyDirectory($source, $destination);
+
+		if ( ! $success)
+		{
+			throw new \RuntimeException("Unable to publish assets.");
+		}
+
+		return $success;
+	}
+
+	/**
+	 * Publish a given package's assets to the publish path.
+	 *
+	 * @param  string  $package
+	 * @param  string  $packagePath
+	 * @return bool
+	 */
+	public function publishPackage($package, $packagePath = null)
+	{
+		$packagePath = $packagePath ?: $this->packagePath;
+
+		// Once we have the package path we can just create the source and destination
+		// path and copy the directory from one to the other. The directory copy is
+		// recursive so all nested files and directories will get copied as well.
+		$source = $packagePath."/{$package}/public";
+
+		return $this->publish($package, $source);
+	}
+
+	/**
+	 * Set the default package path.
+	 *
+	 * @param  string  $packagePath
+	 * @return void
+	 */
+	public function setPackagePath($packagePath)
+	{
+		$this->packagePath = $packagePath;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Composer.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Composer.php b/vendor/laravel/framework/src/Illuminate/Foundation/Composer.php
new file mode 100755
index 0000000..abe7102
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Composer.php
@@ -0,0 +1,98 @@
+<?php namespace Illuminate\Foundation;
+
+use Illuminate\Filesystem\Filesystem;
+use Symfony\Component\Process\Process;
+
+class Composer {
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * The working path to regenerate from.
+	 *
+	 * @var string
+	 */
+	protected $workingPath;
+
+	/**
+	 * Create a new Composer manager instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @param  string  $workingPath
+	 * @return void
+	 */
+	public function __construct(Filesystem $files, $workingPath = null)
+	{
+		$this->files = $files;
+		$this->workingPath = $workingPath;
+	}
+
+	/**
+	 * Regenerate the Composer autoloader files.
+	 *
+	 * @param  string  $extra
+	 * @return void
+	 */
+	public function dumpAutoloads($extra = '')
+	{
+		$process = $this->getProcess();
+
+		$process->setCommandLine(trim($this->findComposer().' dump-autoload '.$extra));
+
+		$process->run();
+	}
+
+	/**
+	 * Regenerate the optimized Composer autoloader files.
+	 *
+	 * @return void
+	 */
+	public function dumpOptimized()
+	{
+		$this->dumpAutoloads('--optimize');
+	}
+
+	/**
+	 * Get the composer command for the environment.
+	 *
+	 * @return string
+	 */
+	protected function findComposer()
+	{
+		if ($this->files->exists($this->workingPath.'/composer.phar'))
+		{
+			return '"'.PHP_BINARY.'" composer.phar';
+		}
+
+		return 'composer';
+	}
+
+	/**
+	 * Get a new Symfony process instance.
+	 *
+	 * @return \Symfony\Component\Process\Process
+	 */
+	protected function getProcess()
+	{
+		return (new Process('', $this->workingPath))->setTimeout(null);
+	}
+
+	/**
+	 * Set the working path used by the class.
+	 *
+	 * @param  string  $path
+	 * @return $this
+	 */
+	public function setWorkingPath($path)
+	{
+		$this->workingPath = realpath($path);
+
+		return $this;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/ConfigPublisher.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/ConfigPublisher.php b/vendor/laravel/framework/src/Illuminate/Foundation/ConfigPublisher.php
new file mode 100755
index 0000000..fcb4dc8
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/ConfigPublisher.php
@@ -0,0 +1,144 @@
+<?php namespace Illuminate\Foundation;
+
+use Illuminate\Filesystem\Filesystem;
+
+class ConfigPublisher {
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * The destination of the config files.
+	 *
+	 * @var string
+	 */
+	protected $publishPath;
+
+	/**
+	 * The path to the application's packages.
+	 *
+	 * @var string
+	 */
+	protected $packagePath;
+
+	/**
+	 * Create a new configuration publisher instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @param  string  $publishPath
+	 * @return void
+	 */
+	public function __construct(Filesystem $files, $publishPath)
+	{
+		$this->files = $files;
+		$this->publishPath = $publishPath;
+	}
+
+	/**
+	 * Publish configuration files from a given path.
+	 *
+	 * @param  string  $package
+	 * @param  string  $source
+	 * @return bool
+	 */
+	public function publish($package, $source)
+	{
+		$destination = $this->getDestinationPath($package);
+
+		$this->makeDestination($destination);
+
+		return $this->files->copyDirectory($source, $destination);
+	}
+
+	/**
+	 * Publish the configuration files for a package.
+	 *
+	 * @param  string  $package
+	 * @param  string  $packagePath
+	 * @return bool
+	 */
+	public function publishPackage($package, $packagePath = null)
+	{
+		// First we will figure out the source of the package's configuration location
+		// which we do by convention. Once we have that we will move the files over
+		// to the "main" configuration directory for this particular application.
+		$path = $packagePath ?: $this->packagePath;
+
+		$source = $this->getSource($package, $path);
+
+		return $this->publish($package, $source);
+	}
+
+	/**
+	 * Get the source configuration directory to publish.
+	 *
+	 * @param  string  $package
+	 * @param  string  $packagePath
+	 * @return string
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	protected function getSource($package, $packagePath)
+	{
+		$source = $packagePath."/{$package}/src/config";
+
+		if ( ! $this->files->isDirectory($source))
+		{
+			throw new \InvalidArgumentException("Configuration not found.");
+		}
+
+		return $source;
+	}
+
+	/**
+	 * Create the destination directory if it doesn't exist.
+	 *
+	 * @param  string  $destination
+	 * @return void
+	 */
+	protected function makeDestination($destination)
+	{
+		if ( ! $this->files->isDirectory($destination))
+		{
+			$this->files->makeDirectory($destination, 0777, true);
+		}
+	}
+
+	/**
+	 * Determine if a given package has already been published.
+	 *
+	 * @param  string  $package
+	 * @return bool
+	 */
+	public function alreadyPublished($package)
+	{
+		return $this->files->isDirectory($this->getDestinationPath($package));
+	}
+
+	/**
+	 * Get the target destination path for the configuration files.
+	 *
+	 * @param  string  $package
+	 * @return string
+	 */
+	public function getDestinationPath($package)
+	{
+		return $this->publishPath."/packages/{$package}";
+	}
+
+	/**
+	 * Set the default package path.
+	 *
+	 * @param  string  $packagePath
+	 * @return void
+	 */
+	public function setPackagePath($packagePath)
+	{
+		$this->packagePath = $packagePath;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/AssetPublishCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/AssetPublishCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/AssetPublishCommand.php
new file mode 100755
index 0000000..d9cbf9d
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/AssetPublishCommand.php
@@ -0,0 +1,170 @@
+<?php namespace Illuminate\Foundation\Console;
+
+use Illuminate\Console\Command;
+use Symfony\Component\Finder\Finder;
+use Illuminate\Foundation\AssetPublisher;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputArgument;
+
+class AssetPublishCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'asset:publish';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = "Publish a package's assets to the public directory";
+
+	/**
+	 * The asset publisher instance.
+	 *
+	 * @var \Illuminate\Foundation\AssetPublisher
+	 */
+	protected $assets;
+
+	/**
+	 * Create a new asset publish command instance.
+	 *
+	 * @param  \Illuminate\Foundation\AssetPublisher  $assets
+	 * @return void
+	 */
+	public function __construct(AssetPublisher $assets)
+	{
+		parent::__construct();
+
+		$this->assets = $assets;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		foreach ($this->getPackages() as $package)
+		{
+			$this->publishAssets($package);
+		}
+	}
+
+	/**
+	 * Publish the assets for a given package name.
+	 *
+	 * @param  string  $package
+	 * @return void
+	 */
+	protected function publishAssets($package)
+	{
+		if ( ! is_null($path = $this->getPath()))
+		{
+			$this->assets->publish($package, $path);
+		}
+		else
+		{
+			$this->assets->publishPackage($package);
+		}
+
+		$this->output->writeln('<info>Assets published for package:</info> '.$package);
+	}
+
+	/**
+	 * Get the name of the package being published.
+	 *
+	 * @return array
+	 */
+	protected function getPackages()
+	{
+		if ( ! is_null($package = $this->input->getArgument('package')))
+		{
+			return array($package);
+		}
+		elseif ( ! is_null($bench = $this->input->getOption('bench')))
+		{
+			return array($bench);
+		}
+
+		return $this->findAllAssetPackages();
+	}
+
+	/**
+	 * Find all the asset hosting packages in the system.
+	 *
+	 * @return array
+	 */
+	protected function findAllAssetPackages()
+	{
+		$vendor = $this->laravel['path.base'].'/vendor';
+
+		$packages = array();
+
+		foreach (Finder::create()->directories()->in($vendor)->name('public')->depth('< 3') as $package)
+		{
+			$packages[] = $package->getRelativePath();
+		}
+
+		return $packages;
+	}
+
+	/**
+	 * Get the specified path to the files.
+	 *
+	 * @return string
+	 */
+	protected function getPath()
+	{
+		$path = $this->input->getOption('path');
+
+		// First we will check for an explicitly specified path from the user. If one
+		// exists we will use that as the path to the assets. This allows the free
+		// storage of assets wherever is best for this developer's web projects.
+		if ( ! is_null($path))
+		{
+			return $this->laravel['path.base'].'/'.$path;
+		}
+
+		// If a "bench" option was specified, we will publish from a workbench as the
+		// source location. This is mainly just a short-cut for having to manually
+		// specify the full workbench path using the --path command line option.
+		$bench = $this->input->getOption('bench');
+
+		if ( ! is_null($bench))
+		{
+			return $this->laravel['path.base']."/workbench/{$bench}/public";
+		}
+	}
+
+	/**
+	 * Get the console command arguments.
+	 *
+	 * @return array
+	 */
+	protected function getArguments()
+	{
+		return array(
+			array('package', InputArgument::OPTIONAL, 'The name of package being published.'),
+		);
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('bench', null, InputOption::VALUE_OPTIONAL, 'The name of the workbench to publish.', null),
+
+			array('path', null, InputOption::VALUE_OPTIONAL, 'The path to the asset files.', null),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/AutoloadCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/AutoloadCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/AutoloadCommand.php
new file mode 100755
index 0000000..df32177
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/AutoloadCommand.php
@@ -0,0 +1,91 @@
+<?php namespace Illuminate\Foundation\Console;
+
+use Illuminate\Console\Command;
+use Illuminate\Foundation\Composer;
+use Symfony\Component\Finder\Finder;
+
+class AutoloadCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'dump-autoload';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = "Regenerate framework autoload files";
+
+	/**
+	 * The composer instance.
+	 *
+	 * @var \Illuminate\Foundation\Composer
+	 */
+	protected $composer;
+
+	/**
+	 * Create a new optimize command instance.
+	 *
+	 * @param  \Illuminate\Foundation\Composer  $composer
+	 * @return void
+	 */
+	public function __construct(Composer $composer)
+	{
+		parent::__construct();
+
+		$this->composer = $composer;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$this->call('optimize');
+
+		foreach ($this->findWorkbenches() as $workbench)
+		{
+			$this->comment("Running for workbench [{$workbench['name']}]...");
+
+			$this->composer->setWorkingPath($workbench['path'])->dumpOptimized();
+		}
+	}
+
+	/**
+	 * Get all of the workbench directories.
+	 *
+	 * @return array
+	 */
+	protected function findWorkbenches()
+	{
+		$results = array();
+
+		foreach ($this->getWorkbenchComposers() as $file)
+		{
+			$results[] = array('name' => $file->getRelativePath(), 'path' => $file->getPath());
+		}
+
+		return $results;
+	}
+
+	/**
+	 * Get all of the workbench composer files.
+	 *
+	 * @return \Symfony\Component\Finder\Finder
+	 */
+	protected function getWorkbenchComposers()
+	{
+		$workbench = $this->laravel['path.base'].'/workbench';
+
+		if ( ! is_dir($workbench)) return array();
+
+		return Finder::create()->files()->followLinks()->in($workbench)->name('composer.json')->depth('< 3');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/ChangesCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ChangesCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ChangesCommand.php
new file mode 100755
index 0000000..698094e
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ChangesCommand.php
@@ -0,0 +1,112 @@
+<?php namespace Illuminate\Foundation\Console;
+
+use Illuminate\Console\Command;
+use Symfony\Component\Console\Input\InputArgument;
+
+class ChangesCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'changes';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = "Display the framework change list";
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		list($version, $changes) = $this->getChangeVersion($this->getChangesArray());
+
+		$this->writeHeader($version);
+
+		foreach ($changes as $change)
+		{
+			$this->line($this->formatMessage($change));
+		}
+	}
+
+	/**
+	 * Write the heading for the change log.
+	 *
+	 * @param  string  $version
+	 * @return void
+	 */
+	protected function writeHeader($version)
+	{
+		$this->info($heading = 'Changes For Laravel '.$version);
+
+		$this->comment(str_repeat('-', strlen($heading)));
+	}
+
+	/**
+	 * Format the given change message.
+	 *
+	 * @param  array   $change
+	 * @return string
+	 */
+	protected function formatMessage(array $change)
+	{
+		$message = '<comment>-></comment> <info>'.$change['message'].'</info>';
+
+		if ( ! is_null($change['backport']))
+		{
+			$message .= ' <comment>(Backported to '.$change['backport'].')</comment>';
+		}
+
+		return $message;
+	}
+
+	/**
+	 * Get the change list for the specified version.
+	 *
+	 * @param  array  $changes
+	 * @return array
+	 */
+	protected function getChangeVersion(array $changes)
+	{
+		$version = $this->argument('version');
+
+		if (is_null($version))
+		{
+			$latest = head(array_keys($changes));
+
+			return array($latest, $changes[$latest]);
+		}
+
+		return array($version, array_get($changes, $version, array()));
+	}
+
+	/**
+	 * Get the changes array from disk.
+	 *
+	 * @return array
+	 */
+	protected function getChangesArray()
+	{
+		return json_decode(file_get_contents(__DIR__.'/../changes.json'), true);
+	}
+
+	/**
+	 * Get the console command arguments.
+	 *
+	 * @return array
+	 */
+	protected function getArguments()
+	{
+		return array(
+			array('version', InputArgument::OPTIONAL, 'The version to list changes for.'),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/ClearCompiledCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ClearCompiledCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ClearCompiledCommand.php
new file mode 100755
index 0000000..43e0c04
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ClearCompiledCommand.php
@@ -0,0 +1,39 @@
+<?php namespace Illuminate\Foundation\Console;
+
+use Illuminate\Console\Command;
+
+class ClearCompiledCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'clear-compiled';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = "Remove the compiled class file";
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		if (file_exists($path = $this->laravel['path.base'].'/bootstrap/compiled.php'))
+		{
+			@unlink($path);
+		}
+
+		if (file_exists($path = $this->laravel['config']['app.manifest'].'/services.json'))
+		{
+			@unlink($path);
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/CommandMakeCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/CommandMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/CommandMakeCommand.php
new file mode 100755
index 0000000..ee03af9
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/CommandMakeCommand.php
@@ -0,0 +1,156 @@
+<?php namespace Illuminate\Foundation\Console;
+
+use Illuminate\Console\Command;
+use Illuminate\Filesystem\Filesystem;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputArgument;
+
+class CommandMakeCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'command:make';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = "Create a new Artisan command";
+
+	/**
+	 * Create a new command creator command.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @return void
+	 */
+	public function __construct(Filesystem $files)
+	{
+		parent::__construct();
+
+		$this->files = $files;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$path = $this->getPath();
+
+		$stub = $this->files->get(__DIR__.'/stubs/command.stub');
+
+		// We'll grab the class name to determine the file name. Since applications are
+		// typically using the PSR-0 standards we can safely assume the classes name
+		// will correspond to what the actual file should be stored as on storage.
+		$file = $path.'/'.$this->input->getArgument('name').'.php';
+
+		$this->writeCommand($file, $stub);
+	}
+
+	/**
+	 * Write the finished command file to disk.
+	 *
+	 * @param  string  $file
+	 * @param  string  $stub
+	 * @return void
+	 */
+	protected function writeCommand($file, $stub)
+	{
+		if ( ! file_exists($file))
+		{
+			$this->files->put($file, $this->formatStub($stub));
+
+			$this->info('Command created successfully.');
+		}
+		else
+		{
+			$this->error('Command already exists!');
+		}
+	}
+
+	/**
+	 * Format the command class stub.
+	 *
+	 * @param  string  $stub
+	 * @return string
+	 */
+	protected function formatStub($stub)
+	{
+		$stub = str_replace('{{class}}', $this->input->getArgument('name'), $stub);
+
+		if ( ! is_null($this->option('command')))
+		{
+			$stub = str_replace('command:name', $this->option('command'), $stub);
+		}
+
+		return $this->addNamespace($stub);
+	}
+
+	/**
+	 * Add the proper namespace to the command.
+	 *
+	 * @param  string  $stub
+	 * @return string
+	 */
+	protected function addNamespace($stub)
+	{
+		if ( ! is_null($namespace = $this->input->getOption('namespace')))
+		{
+			return str_replace('{{namespace}}', ' namespace '.$namespace.';', $stub);
+		}
+
+		return str_replace('{{namespace}}', '', $stub);
+	}
+
+	/**
+	 * Get the path where the command should be stored.
+	 *
+	 * @return string
+	 */
+	protected function getPath()
+	{
+		$path = $this->input->getOption('path');
+
+		if (is_null($path))
+		{
+			return $this->laravel['path'].'/commands';
+		}
+
+		return $this->laravel['path.base'].'/'.$path;
+	}
+
+	/**
+	 * Get the console command arguments.
+	 *
+	 * @return array
+	 */
+	protected function getArguments()
+	{
+		return array(
+			array('name', InputArgument::REQUIRED, 'The name of the command.'),
+		);
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('command', null, InputOption::VALUE_OPTIONAL, 'The terminal command that should be assigned.', null),
+
+			array('path', null, InputOption::VALUE_OPTIONAL, 'The path where the command should be stored.', null),
+
+			array('namespace', null, InputOption::VALUE_OPTIONAL, 'The command namespace.', null),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/ConfigPublishCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ConfigPublishCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ConfigPublishCommand.php
new file mode 100755
index 0000000..d7e9d1a
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ConfigPublishCommand.php
@@ -0,0 +1,116 @@
+<?php namespace Illuminate\Foundation\Console;
+
+use Illuminate\Console\Command;
+use Illuminate\Console\ConfirmableTrait;
+use Illuminate\Foundation\ConfigPublisher;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputArgument;
+
+class ConfigPublishCommand extends Command {
+
+	use ConfirmableTrait;
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'config:publish';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = "Publish a package's configuration to the application";
+
+	/**
+	 * The config publisher instance.
+	 *
+	 * @var \Illuminate\Foundation\ConfigPublisher
+	 */
+	protected $config;
+
+	/**
+	 * Create a new configuration publish command instance.
+	 *
+	 * @param  \Illuminate\Foundation\ConfigPublisher  $config
+	 * @return void
+	 */
+	public function __construct(ConfigPublisher $config)
+	{
+		parent::__construct();
+
+		$this->config = $config;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$package = $this->input->getArgument('package');
+
+		$proceed = $this->confirmToProceed('Config Already Published!', function() use ($package)
+		{
+			return $this->config->alreadyPublished($package);
+		});
+
+		if ( ! $proceed) return;
+
+		if ( ! is_null($path = $this->getPath()))
+		{
+			$this->config->publish($package, $path);
+		}
+		else
+		{
+			$this->config->publishPackage($package);
+		}
+
+		$this->output->writeln('<info>Configuration published for package:</info> '.$package);
+	}
+
+	/**
+	 * Get the specified path to the files.
+	 *
+	 * @return string
+	 */
+	protected function getPath()
+	{
+		$path = $this->input->getOption('path');
+
+		if ( ! is_null($path))
+		{
+			return $this->laravel['path.base'].'/'.$path;
+		}
+	}
+
+	/**
+	 * Get the console command arguments.
+	 *
+	 * @return array
+	 */
+	protected function getArguments()
+	{
+		return array(
+			array('package', InputArgument::REQUIRED, 'The name of the package being published.'),
+		);
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('path', null, InputOption::VALUE_OPTIONAL, 'The path to the configuration files.', null),
+
+			array('force', null, InputOption::VALUE_NONE, 'Force the operation to run when the file already exists.'),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/DownCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/DownCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/DownCommand.php
new file mode 100755
index 0000000..50e1a36
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/DownCommand.php
@@ -0,0 +1,33 @@
+<?php namespace Illuminate\Foundation\Console;
+
+use Illuminate\Console\Command;
+
+class DownCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'down';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = "Put the application into maintenance mode";
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		touch($this->laravel['config']['app.manifest'].'/down');
+
+		$this->comment('Application is now in maintenance mode.');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/EnvironmentCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/EnvironmentCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/EnvironmentCommand.php
new file mode 100755
index 0000000..5a12976
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/EnvironmentCommand.php
@@ -0,0 +1,31 @@
+<?php namespace Illuminate\Foundation\Console;
+
+use Illuminate\Console\Command;
+
+class EnvironmentCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'env';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = "Display the current framework environment";
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$this->line('<info>Current application environment:</info> <comment>'.$this->laravel['env'].'</comment>');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/KeyGenerateCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/KeyGenerateCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/KeyGenerateCommand.php
new file mode 100755
index 0000000..50a6b8e
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/KeyGenerateCommand.php
@@ -0,0 +1,80 @@
+<?php namespace Illuminate\Foundation\Console;
+
+use Illuminate\Support\Str;
+use Illuminate\Console\Command;
+use Illuminate\Filesystem\Filesystem;
+
+class KeyGenerateCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'key:generate';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = "Set the application key";
+
+	/**
+	 * Create a new key generator command.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @return void
+	 */
+	public function __construct(Filesystem $files)
+	{
+		parent::__construct();
+
+		$this->files = $files;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		list($path, $contents) = $this->getKeyFile();
+
+		$key = $this->getRandomKey();
+
+		$contents = str_replace($this->laravel['config']['app.key'], $key, $contents);
+
+		$this->files->put($path, $contents);
+
+		$this->laravel['config']['app.key'] = $key;
+
+		$this->info("Application key [$key] set successfully.");
+	}
+
+	/**
+	 * Get the key file and contents.
+	 *
+	 * @return array
+	 */
+	protected function getKeyFile()
+	{
+		$env = $this->option('env') ? $this->option('env').'/' : '';
+
+		$contents = $this->files->get($path = $this->laravel['path']."/config/{$env}app.php");
+
+		return array($path, $contents);
+	}
+
+	/**
+	 * Generate a random key for the application.
+	 *
+	 * @return string
+	 */
+	protected function getRandomKey()
+	{
+		return Str::random(32);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/MigratePublishCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/MigratePublishCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/MigratePublishCommand.php
new file mode 100644
index 0000000..a7deca9
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/MigratePublishCommand.php
@@ -0,0 +1,63 @@
+<?php namespace Illuminate\Foundation\Console;
+
+use Illuminate\Console\Command;
+use Symfony\Component\Console\Input\InputArgument;
+
+class MigratePublishCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'migrate:publish';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = "Publish a package's migrations to the application";
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$published = $this->laravel['migration.publisher']->publish(
+			$this->getSourcePath(), $this->laravel['path'].'/database/migrations'
+		);
+
+		foreach ($published as $migration)
+		{
+			$this->line('<info>Published:</info> '.basename($migration));
+		}
+	}
+
+	/**
+	 * Get the path to the source files.
+	 *
+	 * @return string
+	 */
+	protected function getSourcePath()
+	{
+		$vendor = $this->laravel['path.base'].'/vendor';
+
+		return $vendor.'/'.$this->argument('package').'/src/migrations';
+	}
+
+	/**
+	 * Get the console command arguments.
+	 *
+	 * @return array
+	 */
+	protected function getArguments()
+	{
+		return array(
+			array('package', InputArgument::REQUIRED, 'The name of the package being published.'),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Foundation/Console/Optimize/config.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Optimize/config.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/Optimize/config.php
new file mode 100755
index 0000000..5e41b36
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/Optimize/config.php
@@ -0,0 +1,120 @@
+<?php
+
+$basePath = $app['path.base'];
+
+return array_map('realpath', array(
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Support/ClassLoader.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Container/Container.php',
+    $basePath.'/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernelInterface.php',
+    $basePath.'/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/TerminableInterface.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Support/Contracts/ResponsePreparerInterface.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Foundation/Application.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Foundation/EnvironmentDetector.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Http/Request.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Http/FrameGuard.php',
+    $basePath.'/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php',
+    $basePath.'/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ParameterBag.php',
+    $basePath.'/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/FileBag.php',
+    $basePath.'/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ServerBag.php',
+    $basePath.'/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/HeaderBag.php',
+    $basePath.'/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/SessionInterface.php',
+    $basePath.'/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/SessionBagInterface.php',
+    $basePath.'/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Attribute/AttributeBagInterface.php',
+    $basePath.'/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Attribute/AttributeBag.php',
+    $basePath.'/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/MetadataBag.php',
+    $basePath.'/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/AcceptHeaderItem.php',
+    $basePath.'/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/AcceptHeader.php',
+    $basePath.'/vendor/symfony/debug/Symfony/Component/Debug/ExceptionHandler.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Support/ServiceProvider.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Exception/ExceptionServiceProvider.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Events/EventServiceProvider.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Support/Traits/MacroableTrait.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Support/Arr.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Support/Str.php',
+    $basePath.'/vendor/symfony/debug/Symfony/Component/Debug/ErrorHandler.php',
+    $basePath.'/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Debug/ErrorHandler.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Config/Repository.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Config/FileLoader.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Config/LoaderInterface.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Config/EnvironmentVariablesLoaderInterface.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Config/FileEnvironmentVariablesLoader.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Config/EnvironmentVariables.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Foundation/AliasLoader.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Cookie/CookieServiceProvider.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Database/DatabaseServiceProvider.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Session/SessionServiceProvider.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/View/ViewServiceProvider.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Routing/RouteFiltererInterface.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Routing/Router.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Routing/Route.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Routing/Matching/ValidatorInterface.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Routing/Matching/HostValidator.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Routing/Matching/MethodValidator.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Routing/Matching/SchemeValidator.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Routing/Matching/UriValidator.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Workbench/WorkbenchServiceProvider.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Support/Contracts/ArrayableInterface.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Support/Contracts/JsonableInterface.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Database/ConnectionResolverInterface.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Session/SessionInterface.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Session/Middleware.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Session/Store.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Support/Manager.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Cookie/CookieJar.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Cookie/Guard.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Cookie/Queue.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Log/LogServiceProvider.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Log/Writer.php',
+    $basePath.'/vendor/monolog/monolog/src/Monolog/Logger.php',
+    $basePath.'/vendor/psr/log/Psr/Log/LoggerInterface.php',
+    $basePath.'/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php',
+    $basePath.'/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php',
+    $basePath.'/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php',
+    $basePath.'/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php',
+    $basePath.'/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Support/Facades/App.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Exception/ExceptionDisplayerInterface.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Exception/SymfonyDisplayer.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Exception/WhoopsDisplayer.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Exception/Handler.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Support/Facades/Route.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/View/Engines/EngineResolver.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/View/ViewFinderInterface.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/View/FileViewFinder.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/View/Environment.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Support/Contracts/MessageProviderInterface.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Support/MessageBag.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Support/Facades/View.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Support/Contracts/RenderableInterface.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/View/View.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/View/Engines/EngineInterface.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php',
+    $basePath.'/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Response.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Http/ResponseTrait.php',
+    $basePath.'/vendor/laravel/framework/src/Illuminate/Http/Response.php',
+    $basePath.'/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ResponseHeaderBag.php',
+    $basePath.'/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Cookie.php',
+    $basePath.'/vendor/filp/whoops/src/Whoops/Run.php',
+    $basePath.'/vendor/filp/whoops/src/Whoops/Handler/HandlerInterface.php',
+    $basePath.'/vendor/filp/whoops/src/Whoops/Handler/Handler.php',
+    $basePath.'/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php',
+    $basePath.'/vendor/stack/builder/src/Stack/Builder.php',
+    $basePath.'/vendor/stack/builder/src/Stack/StackedHttpKernel.php',
+));


[27/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/composer/autoload_files.php
----------------------------------------------------------------------
diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php
new file mode 100644
index 0000000..e1176ff
--- /dev/null
+++ b/vendor/composer/autoload_files.php
@@ -0,0 +1,13 @@
+<?php
+
+// autoload_files.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    $vendorDir . '/swiftmailer/swiftmailer/lib/swift_required.php',
+    $vendorDir . '/ircmaxell/password-compat/lib/password.php',
+    $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Random.php',
+    $vendorDir . '/laravel/framework/src/Illuminate/Support/helpers.php',
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/composer/autoload_namespaces.php
----------------------------------------------------------------------
diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php
new file mode 100644
index 0000000..ff04239
--- /dev/null
+++ b/vendor/composer/autoload_namespaces.php
@@ -0,0 +1,41 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'Whoops' => array($vendorDir . '/filp/whoops/src'),
+    'Thrift' => array($vendorDir . '/apache/thrift/lib/php/lib'),
+    'System' => array($vendorDir . '/phpseclib/phpseclib/phpseclib'),
+    'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'),
+    'Symfony\\Component\\Security\\Core\\' => array($vendorDir . '/symfony/security-core'),
+    'Symfony\\Component\\Routing\\' => array($vendorDir . '/symfony/routing'),
+    'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'),
+    'Symfony\\Component\\HttpKernel\\' => array($vendorDir . '/symfony/http-kernel'),
+    'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'),
+    'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'),
+    'Symfony\\Component\\Filesystem\\' => array($vendorDir . '/symfony/filesystem'),
+    'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'),
+    'Symfony\\Component\\DomCrawler\\' => array($vendorDir . '/symfony/dom-crawler'),
+    'Symfony\\Component\\Debug\\' => array($vendorDir . '/symfony/debug'),
+    'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'),
+    'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'),
+    'Symfony\\Component\\BrowserKit\\' => array($vendorDir . '/symfony/browser-kit'),
+    'Stack' => array($vendorDir . '/stack/builder/src'),
+    'Psr\\Log\\' => array($vendorDir . '/psr/log'),
+    'Predis' => array($vendorDir . '/predis/predis/lib'),
+    'Patchwork' => array($vendorDir . '/patchwork/utf8/class'),
+    'PHPParser' => array($vendorDir . '/nikic/php-parser/lib'),
+    'Normalizer' => array($vendorDir . '/patchwork/utf8/class'),
+    'Net' => array($vendorDir . '/phpseclib/phpseclib/phpseclib'),
+    'Math' => array($vendorDir . '/phpseclib/phpseclib/phpseclib'),
+    'Jeremeamia\\SuperClosure' => array($vendorDir . '/jeremeamia/SuperClosure/src'),
+    'Illuminate' => array($vendorDir . '/laravel/framework/src'),
+    'File' => array($vendorDir . '/phpseclib/phpseclib/phpseclib'),
+    'Crypt' => array($vendorDir . '/phpseclib/phpseclib/phpseclib'),
+    'ClassPreloader' => array($vendorDir . '/classpreloader/classpreloader/src'),
+    'Carbon' => array($vendorDir . '/nesbot/carbon/src'),
+    'Boris' => array($vendorDir . '/d11wtq/boris/lib'),
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/composer/autoload_psr4.php
----------------------------------------------------------------------
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
new file mode 100644
index 0000000..97bc5b2
--- /dev/null
+++ b/vendor/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/composer/autoload_real.php
----------------------------------------------------------------------
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
new file mode 100644
index 0000000..37e2b9e
--- /dev/null
+++ b/vendor/composer/autoload_real.php
@@ -0,0 +1,59 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInit95aab4dcf953834b79e3b5f569ea8229
+{
+    private static $loader;
+
+    public static function loadClassLoader($class)
+    {
+        if ('Composer\Autoload\ClassLoader' === $class) {
+            require __DIR__ . '/ClassLoader.php';
+        }
+    }
+
+    public static function getLoader()
+    {
+        if (null !== self::$loader) {
+            return self::$loader;
+        }
+
+        spl_autoload_register(array('ComposerAutoloaderInit95aab4dcf953834b79e3b5f569ea8229', 'loadClassLoader'), true, true);
+        self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+        spl_autoload_unregister(array('ComposerAutoloaderInit95aab4dcf953834b79e3b5f569ea8229', 'loadClassLoader'));
+
+        $includePaths = require __DIR__ . '/include_paths.php';
+        array_push($includePaths, get_include_path());
+        set_include_path(join(PATH_SEPARATOR, $includePaths));
+
+        $map = require __DIR__ . '/autoload_namespaces.php';
+        foreach ($map as $namespace => $path) {
+            $loader->set($namespace, $path);
+        }
+
+        $map = require __DIR__ . '/autoload_psr4.php';
+        foreach ($map as $namespace => $path) {
+            $loader->setPsr4($namespace, $path);
+        }
+
+        $classMap = require __DIR__ . '/autoload_classmap.php';
+        if ($classMap) {
+            $loader->addClassMap($classMap);
+        }
+
+        $loader->register(true);
+
+        $includeFiles = require __DIR__ . '/autoload_files.php';
+        foreach ($includeFiles as $file) {
+            composerRequire95aab4dcf953834b79e3b5f569ea8229($file);
+        }
+
+        return $loader;
+    }
+}
+
+function composerRequire95aab4dcf953834b79e3b5f569ea8229($file)
+{
+    require $file;
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/composer/include_paths.php
----------------------------------------------------------------------
diff --git a/vendor/composer/include_paths.php b/vendor/composer/include_paths.php
new file mode 100644
index 0000000..958b960
--- /dev/null
+++ b/vendor/composer/include_paths.php
@@ -0,0 +1,10 @@
+<?php
+
+// include_paths.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    $vendorDir . '/phpseclib/phpseclib/phpseclib',
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/composer/installed.json
----------------------------------------------------------------------
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
new file mode 100644
index 0000000..4410450
--- /dev/null
+++ b/vendor/composer/installed.json
@@ -0,0 +1,1743 @@
+[
+    {
+        "name": "apache/thrift",
+        "version": "dev-master",
+        "version_normalized": "9999999-dev",
+        "source": {
+            "type": "git",
+            "url": "https://git-wip-us.apache.org/repos/asf/thrift.git",
+            "reference": "dc799ca078627a8e400cfcdbb965acf6abf86eef"
+        },
+        "require": {
+            "php": ">=5.3.0"
+        },
+        "time": "2015-04-27 20:56:54",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.0.x-dev"
+            }
+        },
+        "installation-source": "source",
+        "autoload": {
+            "psr-0": {
+                "Thrift": "lib/php/lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "Apache-2.0"
+        ],
+        "authors": [
+            {
+                "name": "Apache Thrift Developers",
+                "email": "dev@thrift.apache.org",
+                "homepage": "http://thrift.apache.org"
+            }
+        ],
+        "description": "Apache Thrift RPC system",
+        "homepage": "http://thrift.apache.org/"
+    },
+    {
+        "name": "symfony/translation",
+        "version": "v2.5.11",
+        "version_normalized": "2.5.11.0",
+        "target-dir": "Symfony/Component/Translation",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/Translation.git",
+            "reference": "165b5348cd20f8c4b2fcf1097c9c8300d1093b90"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/Translation/zipball/165b5348cd20f8c4b2fcf1097c9c8300d1093b90",
+            "reference": "165b5348cd20f8c4b2fcf1097c9c8300d1093b90",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "require-dev": {
+            "symfony/config": "~2.3,>=2.3.12",
+            "symfony/intl": "~2.3",
+            "symfony/yaml": "~2.2"
+        },
+        "suggest": {
+            "symfony/config": "",
+            "symfony/yaml": ""
+        },
+        "time": "2015-01-03 15:23:51",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.5-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Symfony\\Component\\Translation\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            }
+        ],
+        "description": "Symfony Translation Component",
+        "homepage": "http://symfony.com"
+    },
+    {
+        "name": "symfony/security-core",
+        "version": "v2.5.11",
+        "version_normalized": "2.5.11.0",
+        "target-dir": "Symfony/Component/Security/Core",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/security-core.git",
+            "reference": "3a27d7b34ee62cb0fdf5ad970e7777912ef4722f"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/security-core/zipball/3a27d7b34ee62cb0fdf5ad970e7777912ef4722f",
+            "reference": "3a27d7b34ee62cb0fdf5ad970e7777912ef4722f",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "require-dev": {
+            "ircmaxell/password-compat": "1.0.*",
+            "psr/log": "~1.0",
+            "symfony/event-dispatcher": "~2.1",
+            "symfony/expression-language": "~2.4",
+            "symfony/http-foundation": "~2.4",
+            "symfony/translation": "~2.0,>=2.0.5",
+            "symfony/validator": "~2.5,>=2.5.5"
+        },
+        "suggest": {
+            "ircmaxell/password-compat": "For using the BCrypt password encoder in PHP <5.5",
+            "symfony/event-dispatcher": "",
+            "symfony/expression-language": "For using the expression voter",
+            "symfony/http-foundation": "",
+            "symfony/validator": "For using the user password constraint"
+        },
+        "time": "2015-01-25 04:37:39",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.5-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Symfony\\Component\\Security\\Core\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            }
+        ],
+        "description": "Symfony Security Component - Core Library",
+        "homepage": "http://symfony.com"
+    },
+    {
+        "name": "symfony/routing",
+        "version": "v2.5.11",
+        "version_normalized": "2.5.11.0",
+        "target-dir": "Symfony/Component/Routing",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/Routing.git",
+            "reference": "46142c34ea830f47429df6e15faec3a33292d618"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/Routing/zipball/46142c34ea830f47429df6e15faec3a33292d618",
+            "reference": "46142c34ea830f47429df6e15faec3a33292d618",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "require-dev": {
+            "doctrine/annotations": "~1.0",
+            "doctrine/common": "~2.2",
+            "psr/log": "~1.0",
+            "symfony/config": "~2.2",
+            "symfony/expression-language": "~2.4",
+            "symfony/http-foundation": "~2.3",
+            "symfony/yaml": "~2.0,>=2.0.5"
+        },
+        "suggest": {
+            "doctrine/annotations": "For using the annotation loader",
+            "symfony/config": "For using the all-in-one router or any loader",
+            "symfony/expression-language": "For using expression matching",
+            "symfony/yaml": "For using the YAML loader"
+        },
+        "time": "2015-02-08 07:07:45",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.5-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Symfony\\Component\\Routing\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            }
+        ],
+        "description": "Symfony Routing Component",
+        "homepage": "http://symfony.com",
+        "keywords": [
+            "router",
+            "routing",
+            "uri",
+            "url"
+        ]
+    },
+    {
+        "name": "symfony/process",
+        "version": "v2.5.11",
+        "version_normalized": "2.5.11.0",
+        "target-dir": "Symfony/Component/Process",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/Process.git",
+            "reference": "00a1308e8b5aec5eba7c8f1708426a78f929be8c"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/Process/zipball/00a1308e8b5aec5eba7c8f1708426a78f929be8c",
+            "reference": "00a1308e8b5aec5eba7c8f1708426a78f929be8c",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "time": "2015-02-08 07:07:45",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.5-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Symfony\\Component\\Process\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            }
+        ],
+        "description": "Symfony Process Component",
+        "homepage": "http://symfony.com"
+    },
+    {
+        "name": "psr/log",
+        "version": "1.0.0",
+        "version_normalized": "1.0.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/php-fig/log.git",
+            "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b",
+            "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
+            "shasum": ""
+        },
+        "time": "2012-12-21 11:40:51",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Psr\\Log\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "PHP-FIG",
+                "homepage": "http://www.php-fig.org/"
+            }
+        ],
+        "description": "Common interface for logging libraries",
+        "keywords": [
+            "log",
+            "psr",
+            "psr-3"
+        ]
+    },
+    {
+        "name": "symfony/debug",
+        "version": "v2.5.11",
+        "version_normalized": "2.5.11.0",
+        "target-dir": "Symfony/Component/Debug",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/Debug.git",
+            "reference": "ed3019589cdadf32c521d1e181f9d72955645c67"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/Debug/zipball/ed3019589cdadf32c521d1e181f9d72955645c67",
+            "reference": "ed3019589cdadf32c521d1e181f9d72955645c67",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "conflict": {
+            "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
+        },
+        "require-dev": {
+            "symfony/class-loader": "~2.2",
+            "symfony/http-foundation": "~2.1",
+            "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2"
+        },
+        "suggest": {
+            "symfony/http-foundation": "",
+            "symfony/http-kernel": ""
+        },
+        "time": "2015-01-16 14:51:58",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.5-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Symfony\\Component\\Debug\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            }
+        ],
+        "description": "Symfony Debug Component",
+        "homepage": "http://symfony.com"
+    },
+    {
+        "name": "symfony/http-foundation",
+        "version": "v2.5.11",
+        "version_normalized": "2.5.11.0",
+        "target-dir": "Symfony/Component/HttpFoundation",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/HttpFoundation.git",
+            "reference": "08e783861dd9579bac4092814bbfb0cae6666b65"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/08e783861dd9579bac4092814bbfb0cae6666b65",
+            "reference": "08e783861dd9579bac4092814bbfb0cae6666b65",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "require-dev": {
+            "symfony/expression-language": "~2.4"
+        },
+        "time": "2015-04-01 15:49:36",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.5-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Symfony\\Component\\HttpFoundation\\": ""
+            },
+            "classmap": [
+                "Symfony/Component/HttpFoundation/Resources/stubs"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            }
+        ],
+        "description": "Symfony HttpFoundation Component",
+        "homepage": "http://symfony.com"
+    },
+    {
+        "name": "symfony/event-dispatcher",
+        "version": "v2.6.6",
+        "version_normalized": "2.6.6.0",
+        "target-dir": "Symfony/Component/EventDispatcher",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/EventDispatcher.git",
+            "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/70f7c8478739ad21e3deef0d977b38c77f1fb284",
+            "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "require-dev": {
+            "psr/log": "~1.0",
+            "symfony/config": "~2.0,>=2.0.5",
+            "symfony/dependency-injection": "~2.6",
+            "symfony/expression-language": "~2.6",
+            "symfony/phpunit-bridge": "~2.7",
+            "symfony/stopwatch": "~2.3"
+        },
+        "suggest": {
+            "symfony/dependency-injection": "",
+            "symfony/http-kernel": ""
+        },
+        "time": "2015-03-13 17:37:22",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.6-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Symfony\\Component\\EventDispatcher\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            }
+        ],
+        "description": "Symfony EventDispatcher Component",
+        "homepage": "http://symfony.com"
+    },
+    {
+        "name": "symfony/http-kernel",
+        "version": "v2.5.11",
+        "version_normalized": "2.5.11.0",
+        "target-dir": "Symfony/Component/HttpKernel",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/HttpKernel.git",
+            "reference": "7b1632cf2bdbc69c59a44942b70d5aae91034304"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/7b1632cf2bdbc69c59a44942b70d5aae91034304",
+            "reference": "7b1632cf2bdbc69c59a44942b70d5aae91034304",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3",
+            "psr/log": "~1.0",
+            "symfony/debug": "~2.5.9|~2.6,>=2.6.2",
+            "symfony/event-dispatcher": "~2.5.9|~2.6,>=2.6.2",
+            "symfony/http-foundation": "~2.5"
+        },
+        "require-dev": {
+            "symfony/browser-kit": "~2.3",
+            "symfony/class-loader": "~2.1",
+            "symfony/config": "~2.0,>=2.0.5",
+            "symfony/console": "~2.2",
+            "symfony/css-selector": "~2.0,>=2.0.5",
+            "symfony/dependency-injection": "~2.2",
+            "symfony/dom-crawler": "~2.0,>=2.0.5",
+            "symfony/expression-language": "~2.4",
+            "symfony/finder": "~2.0,>=2.0.5",
+            "symfony/process": "~2.0,>=2.0.5",
+            "symfony/routing": "~2.2",
+            "symfony/stopwatch": "~2.3",
+            "symfony/templating": "~2.2"
+        },
+        "suggest": {
+            "symfony/browser-kit": "",
+            "symfony/class-loader": "",
+            "symfony/config": "",
+            "symfony/console": "",
+            "symfony/dependency-injection": "",
+            "symfony/finder": ""
+        },
+        "time": "2015-04-01 16:01:45",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.5-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Symfony\\Component\\HttpKernel\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            }
+        ],
+        "description": "Symfony HttpKernel Component",
+        "homepage": "http://symfony.com"
+    },
+    {
+        "name": "symfony/finder",
+        "version": "v2.5.11",
+        "version_normalized": "2.5.11.0",
+        "target-dir": "Symfony/Component/Finder",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/Finder.git",
+            "reference": "e527ebf47ff912a45e148b7d0b107b80ec0b3cc2"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/Finder/zipball/e527ebf47ff912a45e148b7d0b107b80ec0b3cc2",
+            "reference": "e527ebf47ff912a45e148b7d0b107b80ec0b3cc2",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "time": "2015-01-03 08:01:13",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.5-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Symfony\\Component\\Finder\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            }
+        ],
+        "description": "Symfony Finder Component",
+        "homepage": "http://symfony.com"
+    },
+    {
+        "name": "symfony/dom-crawler",
+        "version": "v2.5.11",
+        "version_normalized": "2.5.11.0",
+        "target-dir": "Symfony/Component/DomCrawler",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/DomCrawler.git",
+            "reference": "3860edcf7ff7e173cfe2151f0d425e610e77cc35"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/3860edcf7ff7e173cfe2151f0d425e610e77cc35",
+            "reference": "3860edcf7ff7e173cfe2151f0d425e610e77cc35",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "require-dev": {
+            "symfony/css-selector": "~2.3"
+        },
+        "suggest": {
+            "symfony/css-selector": ""
+        },
+        "time": "2015-01-03 08:01:13",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.5-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Symfony\\Component\\DomCrawler\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            }
+        ],
+        "description": "Symfony DomCrawler Component",
+        "homepage": "http://symfony.com"
+    },
+    {
+        "name": "symfony/css-selector",
+        "version": "v2.5.11",
+        "version_normalized": "2.5.11.0",
+        "target-dir": "Symfony/Component/CssSelector",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/CssSelector.git",
+            "reference": "d45b306421462295e76b94bcf76b963867450327"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/CssSelector/zipball/d45b306421462295e76b94bcf76b963867450327",
+            "reference": "d45b306421462295e76b94bcf76b963867450327",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "time": "2015-01-03 08:01:13",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.5-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Symfony\\Component\\CssSelector\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            },
+            {
+                "name": "Jean-François Simon",
+                "email": "jeanfrancois.simon@sensiolabs.com"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            }
+        ],
+        "description": "Symfony CssSelector Component",
+        "homepage": "http://symfony.com"
+    },
+    {
+        "name": "symfony/console",
+        "version": "v2.5.11",
+        "version_normalized": "2.5.11.0",
+        "target-dir": "Symfony/Component/Console",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/Console.git",
+            "reference": "a43e750b4c74f3bdfca77c79c343033d35a6cd6e"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/Console/zipball/a43e750b4c74f3bdfca77c79c343033d35a6cd6e",
+            "reference": "a43e750b4c74f3bdfca77c79c343033d35a6cd6e",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "require-dev": {
+            "psr/log": "~1.0",
+            "symfony/event-dispatcher": "~2.1"
+        },
+        "suggest": {
+            "psr/log": "For using the console logger",
+            "symfony/event-dispatcher": ""
+        },
+        "time": "2015-02-08 07:07:45",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.5-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Symfony\\Component\\Console\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            }
+        ],
+        "description": "Symfony Console Component",
+        "homepage": "http://symfony.com"
+    },
+    {
+        "name": "symfony/browser-kit",
+        "version": "v2.5.11",
+        "version_normalized": "2.5.11.0",
+        "target-dir": "Symfony/Component/BrowserKit",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/BrowserKit.git",
+            "reference": "b2b78b850a32251cbbd9915ab61453302e7ecd72"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/b2b78b850a32251cbbd9915ab61453302e7ecd72",
+            "reference": "b2b78b850a32251cbbd9915ab61453302e7ecd72",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3",
+            "symfony/dom-crawler": "~2.0,>=2.0.5"
+        },
+        "require-dev": {
+            "symfony/css-selector": "~2.0,>=2.0.5",
+            "symfony/process": "~2.0,>=2.0.5"
+        },
+        "suggest": {
+            "symfony/process": ""
+        },
+        "time": "2015-01-03 08:01:13",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.5-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Symfony\\Component\\BrowserKit\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            }
+        ],
+        "description": "Symfony BrowserKit Component",
+        "homepage": "http://symfony.com"
+    },
+    {
+        "name": "swiftmailer/swiftmailer",
+        "version": "v5.4.0",
+        "version_normalized": "5.4.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/swiftmailer/swiftmailer.git",
+            "reference": "31454f258f10329ae7c48763eb898a75c39e0a9f"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/31454f258f10329ae7c48763eb898a75c39e0a9f",
+            "reference": "31454f258f10329ae7c48763eb898a75c39e0a9f",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "require-dev": {
+            "mockery/mockery": "~0.9.1"
+        },
+        "time": "2015-03-14 06:06:39",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "5.4-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "files": [
+                "lib/swift_required.php"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Chris Corbyn"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            }
+        ],
+        "description": "Swiftmailer, free feature-rich PHP mailer",
+        "homepage": "http://swiftmailer.org",
+        "keywords": [
+            "mail",
+            "mailer"
+        ]
+    },
+    {
+        "name": "stack/builder",
+        "version": "v1.0.3",
+        "version_normalized": "1.0.3.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/stackphp/builder.git",
+            "reference": "c1f8a4693b55c563405024f708a76ef576c3b276"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/stackphp/builder/zipball/c1f8a4693b55c563405024f708a76ef576c3b276",
+            "reference": "c1f8a4693b55c563405024f708a76ef576c3b276",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.0",
+            "symfony/http-foundation": "~2.1",
+            "symfony/http-kernel": "~2.1"
+        },
+        "require-dev": {
+            "silex/silex": "~1.0"
+        },
+        "time": "2014-11-23 20:37:11",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.0-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Stack": "src"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Igor Wiedler",
+                "email": "igor@wiedler.ch"
+            }
+        ],
+        "description": "Builder for stack middlewares based on HttpKernelInterface.",
+        "keywords": [
+            "stack"
+        ]
+    },
+    {
+        "name": "predis/predis",
+        "version": "v0.8.7",
+        "version_normalized": "0.8.7.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/nrk/predis.git",
+            "reference": "4123fcd85d61354c6c9900db76c9597dbd129bf6"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/nrk/predis/zipball/4123fcd85d61354c6c9900db76c9597dbd129bf6",
+            "reference": "4123fcd85d61354c6c9900db76c9597dbd129bf6",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.2"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~4.0"
+        },
+        "suggest": {
+            "ext-curl": "Allows access to Webdis when paired with phpiredis",
+            "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol"
+        },
+        "time": "2014-08-01 09:43:10",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Predis": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Daniele Alessandri",
+                "email": "suppakilla@gmail.com",
+                "homepage": "http://clorophilla.net"
+            }
+        ],
+        "description": "Flexible and feature-complete PHP client library for Redis",
+        "homepage": "http://github.com/nrk/predis",
+        "keywords": [
+            "nosql",
+            "predis",
+            "redis"
+        ]
+    },
+    {
+        "name": "phpseclib/phpseclib",
+        "version": "0.3.10",
+        "version_normalized": "0.3.10.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/phpseclib/phpseclib.git",
+            "reference": "d15bba1edcc7c89e09cc74c5d961317a8b947bf4"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/d15bba1edcc7c89e09cc74c5d961317a8b947bf4",
+            "reference": "d15bba1edcc7c89e09cc74c5d961317a8b947bf4",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.0.0"
+        },
+        "require-dev": {
+            "phing/phing": "~2.7",
+            "phpunit/phpunit": "~4.0",
+            "sami/sami": "~2.0",
+            "squizlabs/php_codesniffer": "~1.5"
+        },
+        "suggest": {
+            "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
+            "ext-mcrypt": "Install the Mcrypt extension in order to speed up a wide variety of cryptographic operations.",
+            "pear-pear/PHP_Compat": "Install PHP_Compat to get phpseclib working on PHP < 4.3.3."
+        },
+        "time": "2015-01-28 21:50:33",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "0.3-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Crypt": "phpseclib/",
+                "File": "phpseclib/",
+                "Math": "phpseclib/",
+                "Net": "phpseclib/",
+                "System": "phpseclib/"
+            },
+            "files": [
+                "phpseclib/Crypt/Random.php"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            "phpseclib/"
+        ],
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Jim Wigginton",
+                "email": "terrafrost@php.net",
+                "role": "Lead Developer"
+            },
+            {
+                "name": "Patrick Monnerat",
+                "email": "pm@datasphere.ch",
+                "role": "Developer"
+            },
+            {
+                "name": "Andreas Fischer",
+                "email": "bantu@phpbb.com",
+                "role": "Developer"
+            },
+            {
+                "name": "Hans-Jürgen Petrich",
+                "email": "petrich@tronic-media.com",
+                "role": "Developer"
+            }
+        ],
+        "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
+        "homepage": "http://phpseclib.sourceforge.net",
+        "keywords": [
+            "BigInteger",
+            "aes",
+            "asn.1",
+            "asn1",
+            "blowfish",
+            "crypto",
+            "cryptography",
+            "encryption",
+            "rsa",
+            "security",
+            "sftp",
+            "signature",
+            "signing",
+            "ssh",
+            "twofish",
+            "x.509",
+            "x509"
+        ]
+    },
+    {
+        "name": "patchwork/utf8",
+        "version": "v1.2.2",
+        "version_normalized": "1.2.2.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/tchwork/utf8.git",
+            "reference": "7287a6fb2c46a66ac6bfbaf0e4975229b27efcba"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/tchwork/utf8/zipball/7287a6fb2c46a66ac6bfbaf0e4975229b27efcba",
+            "reference": "7287a6fb2c46a66ac6bfbaf0e4975229b27efcba",
+            "shasum": ""
+        },
+        "require": {
+            "lib-pcre": ">=7.3",
+            "php": ">=5.3.0"
+        },
+        "suggest": {
+            "ext-iconv": "Use iconv for best performance",
+            "ext-intl": "Use Intl for best performance",
+            "ext-mbstring": "Use Mbstring for best performance",
+            "ext-wfio": "Use WFIO for UTF-8 filesystem access on Windows"
+        },
+        "time": "2015-04-26 09:51:43",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.2-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Patchwork": "class/",
+                "Normalizer": "class/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "(Apache-2.0 or GPL-2.0)"
+        ],
+        "authors": [
+            {
+                "name": "Nicolas Grekas",
+                "email": "p@tchwork.com"
+            }
+        ],
+        "description": "Portable and performant UTF-8, Unicode and Grapheme Clusters for PHP",
+        "homepage": "https://github.com/tchwork/utf8",
+        "keywords": [
+            "grapheme",
+            "i18n",
+            "unicode",
+            "utf-8",
+            "utf8"
+        ]
+    },
+    {
+        "name": "nesbot/carbon",
+        "version": "1.17.0",
+        "version_normalized": "1.17.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/briannesbitt/Carbon.git",
+            "reference": "a1dd1ad9abfc8b3c4d8768068e6c71d293424e86"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/a1dd1ad9abfc8b3c4d8768068e6c71d293424e86",
+            "reference": "a1dd1ad9abfc8b3c4d8768068e6c71d293424e86",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~4.0"
+        },
+        "time": "2015-03-08 14:05:44",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Carbon": "src"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Brian Nesbitt",
+                "email": "brian@nesbot.com",
+                "homepage": "http://nesbot.com"
+            }
+        ],
+        "description": "A simple API extension for DateTime.",
+        "homepage": "http://carbon.nesbot.com",
+        "keywords": [
+            "date",
+            "datetime",
+            "time"
+        ]
+    },
+    {
+        "name": "monolog/monolog",
+        "version": "1.13.1",
+        "version_normalized": "1.13.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/Seldaek/monolog.git",
+            "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c31a2c4e8db5da8b46c74cf275d7f109c0f249ac",
+            "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.0",
+            "psr/log": "~1.0"
+        },
+        "provide": {
+            "psr/log-implementation": "1.0.0"
+        },
+        "require-dev": {
+            "aws/aws-sdk-php": "~2.4, >2.4.8",
+            "doctrine/couchdb": "~1.0@dev",
+            "graylog2/gelf-php": "~1.0",
+            "phpunit/phpunit": "~4.0",
+            "raven/raven": "~0.5",
+            "ruflin/elastica": "0.90.*",
+            "swiftmailer/swiftmailer": "~5.3",
+            "videlalvaro/php-amqplib": "~2.4"
+        },
+        "suggest": {
+            "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
+            "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
+            "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+            "ext-mongo": "Allow sending log messages to a MongoDB server",
+            "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
+            "raven/raven": "Allow sending log messages to a Sentry server",
+            "rollbar/rollbar": "Allow sending log messages to Rollbar",
+            "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
+            "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib"
+        },
+        "time": "2015-03-09 09:58:04",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.13.x-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "Monolog\\": "src/Monolog"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Jordi Boggiano",
+                "email": "j.boggiano@seld.be",
+                "homepage": "http://seld.be"
+            }
+        ],
+        "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
+        "homepage": "http://github.com/Seldaek/monolog",
+        "keywords": [
+            "log",
+            "logging",
+            "psr-3"
+        ]
+    },
+    {
+        "name": "nikic/php-parser",
+        "version": "v0.9.5",
+        "version_normalized": "0.9.5.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/nikic/PHP-Parser.git",
+            "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ef70767475434bdb3615b43c327e2cae17ef12eb",
+            "reference": "ef70767475434bdb3615b43c327e2cae17ef12eb",
+            "shasum": ""
+        },
+        "require": {
+            "ext-tokenizer": "*",
+            "php": ">=5.2"
+        },
+        "time": "2014-07-23 18:24:17",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "0.9-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "PHPParser": "lib/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "BSD-3-Clause"
+        ],
+        "authors": [
+            {
+                "name": "Nikita Popov"
+            }
+        ],
+        "description": "A PHP parser written in PHP",
+        "keywords": [
+            "parser",
+            "php"
+        ]
+    },
+    {
+        "name": "jeremeamia/SuperClosure",
+        "version": "1.0.2",
+        "version_normalized": "1.0.2.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/jeremeamia/super_closure.git",
+            "reference": "4d89ca74994feab128ea46d5b3add92e6cb84554"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/jeremeamia/super_closure/zipball/4d89ca74994feab128ea46d5b3add92e6cb84554",
+            "reference": "4d89ca74994feab128ea46d5b3add92e6cb84554",
+            "shasum": ""
+        },
+        "require": {
+            "nikic/php-parser": "~0.9",
+            "php": ">=5.3.3"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~3.7"
+        },
+        "time": "2015-01-10 01:09:28",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Jeremeamia\\SuperClosure": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Jeremy Lindblom"
+            }
+        ],
+        "description": "Doing interesting things with closures like serialization.",
+        "homepage": "https://github.com/jeremeamia/super_closure",
+        "keywords": [
+            "closure",
+            "function",
+            "parser",
+            "serializable",
+            "serialize",
+            "tokenizer"
+        ]
+    },
+    {
+        "name": "filp/whoops",
+        "version": "1.1.5",
+        "version_normalized": "1.1.5.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/filp/whoops.git",
+            "reference": "c982fe62c44798c433229cb0425c61b487cc1883"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/filp/whoops/zipball/c982fe62c44798c433229cb0425c61b487cc1883",
+            "reference": "c982fe62c44798c433229cb0425c61b487cc1883",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.0"
+        },
+        "require-dev": {
+            "mockery/mockery": "0.9.*"
+        },
+        "time": "2015-03-30 15:26:59",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.2-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Whoops": "src/"
+            },
+            "classmap": [
+                "src/deprecated"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Filipe Dobreira",
+                "homepage": "https://github.com/filp",
+                "role": "Developer"
+            }
+        ],
+        "description": "php error handling for cool kids",
+        "homepage": "https://github.com/filp/whoops",
+        "keywords": [
+            "error",
+            "exception",
+            "handling",
+            "library",
+            "silex-provider",
+            "whoops",
+            "zf2"
+        ]
+    },
+    {
+        "name": "ircmaxell/password-compat",
+        "version": "v1.0.4",
+        "version_normalized": "1.0.4.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/ircmaxell/password_compat.git",
+            "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/5c5cde8822a69545767f7c7f3058cb15ff84614c",
+            "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c",
+            "shasum": ""
+        },
+        "require-dev": {
+            "phpunit/phpunit": "4.*"
+        },
+        "time": "2014-11-20 16:49:30",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "files": [
+                "lib/password.php"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Anthony Ferrara",
+                "email": "ircmaxell@php.net",
+                "homepage": "http://blog.ircmaxell.com"
+            }
+        ],
+        "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash",
+        "homepage": "https://github.com/ircmaxell/password_compat",
+        "keywords": [
+            "hashing",
+            "password"
+        ]
+    },
+    {
+        "name": "d11wtq/boris",
+        "version": "v1.0.10",
+        "version_normalized": "1.0.10.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/borisrepl/boris.git",
+            "reference": "31055b15e2d3fe47f31f6aa8e277f8f3fc7eb483"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/borisrepl/boris/zipball/31055b15e2d3fe47f31f6aa8e277f8f3fc7eb483",
+            "reference": "31055b15e2d3fe47f31f6aa8e277f8f3fc7eb483",
+            "shasum": ""
+        },
+        "require": {
+            "ext-pcntl": "*",
+            "ext-posix": "*",
+            "ext-readline": "*",
+            "php": ">=5.3.0"
+        },
+        "time": "2015-03-01 08:05:19",
+        "bin": [
+            "bin/boris"
+        ],
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Boris": "lib"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "description": "A tiny, but robust REPL (Read-Evaluate-Print-Loop) for PHP."
+    },
+    {
+        "name": "symfony/filesystem",
+        "version": "v2.6.6",
+        "version_normalized": "2.6.6.0",
+        "target-dir": "Symfony/Component/Filesystem",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/Filesystem.git",
+            "reference": "4983964b3693e4f13449cb3800c64a9112c301b4"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/Filesystem/zipball/4983964b3693e4f13449cb3800c64a9112c301b4",
+            "reference": "4983964b3693e4f13449cb3800c64a9112c301b4",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "require-dev": {
+            "symfony/phpunit-bridge": "~2.7"
+        },
+        "time": "2015-03-22 16:55:57",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.6-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Symfony\\Component\\Filesystem\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            }
+        ],
+        "description": "Symfony Filesystem Component",
+        "homepage": "http://symfony.com"
+    },
+    {
+        "name": "classpreloader/classpreloader",
+        "version": "1.0.2",
+        "version_normalized": "1.0.2.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/ClassPreloader/ClassPreloader.git",
+            "reference": "2c9f3bcbab329570c57339895bd11b5dd3b00877"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/ClassPreloader/ClassPreloader/zipball/2c9f3bcbab329570c57339895bd11b5dd3b00877",
+            "reference": "2c9f3bcbab329570c57339895bd11b5dd3b00877",
+            "shasum": ""
+        },
+        "require": {
+            "nikic/php-parser": "~0.9",
+            "php": ">=5.3.3",
+            "symfony/console": "~2.1",
+            "symfony/filesystem": "~2.1",
+            "symfony/finder": "~2.1"
+        },
+        "time": "2014-03-12 00:05:31",
+        "bin": [
+            "classpreloader.php"
+        ],
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.0-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "ClassPreloader": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case",
+        "keywords": [
+            "autoload",
+            "class",
+            "preload"
+        ]
+    },
+    {
+        "name": "laravel/framework",
+        "version": "v4.2.17",
+        "version_normalized": "4.2.17.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/laravel/framework.git",
+            "reference": "3359de6d6cd322e8a1b251c2f8d9dd42a3e4e232"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/laravel/framework/zipball/3359de6d6cd322e8a1b251c2f8d9dd42a3e4e232",
+            "reference": "3359de6d6cd322e8a1b251c2f8d9dd42a3e4e232",
+            "shasum": ""
+        },
+        "require": {
+            "classpreloader/classpreloader": "~1.0.2",
+            "d11wtq/boris": "~1.0",
+            "filp/whoops": "1.1.*",
+            "ircmaxell/password-compat": "~1.0",
+            "jeremeamia/superclosure": "~1.0.1",
+            "monolog/monolog": "~1.6",
+            "nesbot/carbon": "~1.0",
+            "patchwork/utf8": "~1.1",
+            "php": ">=5.4.0",
+            "phpseclib/phpseclib": "0.3.*",
+            "predis/predis": "0.8.*",
+            "stack/builder": "~1.0",
+            "swiftmailer/swiftmailer": "~5.1",
+            "symfony/browser-kit": "2.5.*",
+            "symfony/console": "2.5.*",
+            "symfony/css-selector": "2.5.*",
+            "symfony/debug": "2.5.*",
+            "symfony/dom-crawler": "2.5.*",
+            "symfony/finder": "2.5.*",
+            "symfony/http-foundation": "2.5.*",
+            "symfony/http-kernel": "2.5.*",
+            "symfony/process": "2.5.*",
+            "symfony/routing": "2.5.*",
+            "symfony/security-core": "2.5.*",
+            "symfony/translation": "2.5.*"
+        },
+        "replace": {
+            "illuminate/auth": "self.version",
+            "illuminate/cache": "self.version",
+            "illuminate/config": "self.version",
+            "illuminate/console": "self.version",
+            "illuminate/container": "self.version",
+            "illuminate/cookie": "self.version",
+            "illuminate/database": "self.version",
+            "illuminate/encryption": "self.version",
+            "illuminate/events": "self.version",
+            "illuminate/exception": "self.version",
+            "illuminate/filesystem": "self.version",
+            "illuminate/foundation": "self.version",
+            "illuminate/hashing": "self.version",
+            "illuminate/html": "self.version",
+            "illuminate/http": "self.version",
+            "illuminate/log": "self.version",
+            "illuminate/mail": "self.version",
+            "illuminate/pagination": "self.version",
+            "illuminate/queue": "self.version",
+            "illuminate/redis": "self.version",
+            "illuminate/remote": "self.version",
+            "illuminate/routing": "self.version",
+            "illuminate/session": "self.version",
+            "illuminate/support": "self.version",
+            "illuminate/translation": "self.version",
+            "illuminate/validation": "self.version",
+            "illuminate/view": "self.version",
+            "illuminate/workbench": "self.version"
+        },
+        "require-dev": {
+            "aws/aws-sdk-php": "~2.6",
+            "iron-io/iron_mq": "~1.5",
+            "mockery/mockery": "~0.9",
+            "pda/pheanstalk": "~2.1",
+            "phpunit/phpunit": "~4.0"
+        },
+        "suggest": {
+            "doctrine/dbal": "Allow renaming columns and dropping SQLite columns."
+        },
+        "time": "2015-02-11 20:37:15",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "4.2-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "classmap": [
+                "src/Illuminate/Queue/IlluminateQueueClosure.php"
+            ],
+            "files": [
+                "src/Illuminate/Support/helpers.php"
+            ],
+            "psr-0": {
+                "Illuminate": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Taylor Otwell",
+                "email": "taylorotwell@gmail.com"
+            }
+        ],
+        "description": "The Laravel Framework.",
+        "keywords": [
+            "framework",
+            "laravel"
+        ]
+    }
+]

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/.gitignore
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/.gitignore b/vendor/d11wtq/boris/.gitignore
new file mode 100644
index 0000000..9543cdf
--- /dev/null
+++ b/vendor/d11wtq/boris/.gitignore
@@ -0,0 +1,4 @@
+/vendor/
+*.swp
+boris.phar
+.token

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/CONTRIBUTING.md
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/CONTRIBUTING.md b/vendor/d11wtq/boris/CONTRIBUTING.md
new file mode 100644
index 0000000..5567975
--- /dev/null
+++ b/vendor/d11wtq/boris/CONTRIBUTING.md
@@ -0,0 +1,14 @@
+# Contribution Guidelines
+
+## Rules
+
+There are a few basic ground-rules for contributors:
+
+1. **No `--force` pushes** or modifying the Git history in any way.
+2. **External API changes and significant modifications** should be subject to a **pull request** to solicit feedback from other contributors.
+3. Use a non-`master` branch for ongoing work.
+4. Adhere to existing code style as much as possible.
+
+## Releases
+
+Declaring formal releases remains the prerogative of the project maintainer.

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/LICENSE
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/LICENSE b/vendor/d11wtq/boris/LICENSE
new file mode 100644
index 0000000..ebd8fdd
--- /dev/null
+++ b/vendor/d11wtq/boris/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2011 Chris Corbyn
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/README.md
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/README.md b/vendor/d11wtq/boris/README.md
new file mode 100644
index 0000000..9d60b4d
--- /dev/null
+++ b/vendor/d11wtq/boris/README.md
@@ -0,0 +1,63 @@
+# Boris
+
+A tiny, but robust REPL for PHP.
+
+> **Announcement:** I'm looking to add one or two additional collaborators with
+> commit access. If you are actively involved in open source and have a GitHub
+> profile for review, ping me on Twitter (@d11wtq) to express your interest.
+> Experienced developers with active GitHub projects only.
+
+![Demo](http://dl.dropbox.com/u/508607/BorisDemo-v4.gif "Quick Demo")
+
+Python has one. Ruby has one. Clojure has one. Now PHP has one, too. Boris is
+PHP's missing REPL (read-eval-print loop), allowing developers to experiment
+with PHP code in the terminal in an interactive manner.  If you make a mistake,
+it doesn't matter, Boris will report the error and stand to attention for
+further input.
+
+Everything you enter into Boris is evaluated and the result inspected so you
+can understand what is happening.  State is maintained between inputs, allowing
+you to gradually build up a solution to a problem.
+
+
+## Why?
+
+I'm in the process of transitioning away from PHP to Ruby.  I have come to find
+PHP's lack of a real REPL to be frustrating and was not able to find an existing
+implementation that was complete.  Boris weighs in at a few hundred lines of
+fairly straightforward code.
+
+
+## Usage
+
+Check out our wonderful [wiki] for usage instructions.
+
+
+## Contributing
+
+We're committed to a loosely-coupled architecture for Boris and would love to get your contributions.
+
+Before jumping in, check out our **[Contributing] [contributing]** page on the wiki!
+
+
+## Core Team
+
+**Chris Corbyn**
+
+- <https://twitter.com/d11wtq>
+- <https://github.com/d11wtq>
+
+**Tejas Manohar**
+
+- <https://twitter.com/tejasmanohar>
+- <https://github.com/tejasmanohar>
+
+
+## Copyright & Licensing
+
+See the [LICENSE] file for details.
+
+[LICENSE]: https://github.com/d11wtq/boris/blob/master/LICENSE)
+[wiki]: https://github.com/d11wtq/boris/wiki
+[contributing]: https://github.com/d11wtq/boris/blob/master/CONTRIBUTING.md
+[Chris Corbyn]: https://github.com/d11wtq

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/bin/boris
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/bin/boris b/vendor/d11wtq/boris/bin/boris
new file mode 100755
index 0000000..1701986
--- /dev/null
+++ b/vendor/d11wtq/boris/bin/boris
@@ -0,0 +1,18 @@
+#!/usr/bin/env php
+<?php
+
+require_once __DIR__ . '/../lib/autoload.php';
+
+if (!function_exists('pcntl_signal')) {
+    die("PCNTL support seems to be missing or disabled. See https://github.com/d11wtq/boris/issues/29 for details\n");
+}
+
+$boris = new \Boris\Boris();
+
+$config = new \Boris\Config();
+$config->apply($boris);
+
+$options = new \Boris\CLIOptionsHandler();
+$options->handle($boris);
+
+$boris->start();

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/box.json
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/box.json b/vendor/d11wtq/boris/box.json
new file mode 100644
index 0000000..9ebf165
--- /dev/null
+++ b/vendor/d11wtq/boris/box.json
@@ -0,0 +1,14 @@
+{
+    "files": ["LICENSE"],
+    "finder": [{
+        "name": "*.php",
+        "exclude": [
+            "tests"
+        ],
+        "in": "lib"
+    }],
+    "git-version": "git_tag",
+    "main": "bin/boris",
+    "output": "boris.phar",
+    "stub": true
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/composer.json
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/composer.json b/vendor/d11wtq/boris/composer.json
new file mode 100644
index 0000000..5009094
--- /dev/null
+++ b/vendor/d11wtq/boris/composer.json
@@ -0,0 +1,17 @@
+{
+    "name": "d11wtq/boris",
+    "description": "A tiny, but robust REPL (Read-Evaluate-Print-Loop) for PHP.",
+    "license": "MIT",
+    "require": {
+        "php": ">=5.3.0",
+        "ext-readline": "*",
+        "ext-pcntl": "*",
+        "ext-posix": "*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Boris": "lib"
+        }
+    },
+    "bin": ["bin/boris"]
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/lib/Boris/Boris.php
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/lib/Boris/Boris.php b/vendor/d11wtq/boris/lib/Boris/Boris.php
new file mode 100644
index 0000000..8b7abe5
--- /dev/null
+++ b/vendor/d11wtq/boris/lib/Boris/Boris.php
@@ -0,0 +1,178 @@
+<?php
+
+namespace Boris;
+
+/**
+ * Boris is a tiny REPL for PHP.
+ */
+class Boris
+{
+    const VERSION = "1.0.8";
+    
+    private $_prompt;
+    private $_historyFile;
+    private $_exports = array();
+    private $_startHooks = array();
+    private $_failureHooks = array();
+    private $_inspector;
+    
+    /**
+     * Create a new REPL, which consists of an evaluation worker and a readline client.
+     *
+     * @param string $prompt, optional
+     * @param string $historyFile, optional
+     */
+    public function __construct($prompt = 'boris> ', $historyFile = null)
+    {
+        $this->setPrompt($prompt);
+        $this->_historyFile = $historyFile ? $historyFile : sprintf('%s/.boris_history', getenv('HOME'));
+        $this->_inspector   = new ColoredInspector();
+    }
+    
+    /**
+     * Add a new hook to run in the context of the REPL when it starts.
+     *
+     * @param mixed $hook
+     *
+     * The hook is either a string of PHP code to eval(), or a Closure accepting
+     * the EvalWorker object as its first argument and the array of defined
+     * local variables in the second argument.
+     *
+     * If the hook is a callback and needs to set any local variables in the
+     * REPL's scope, it should invoke $worker->setLocal($var_name, $value) to
+     * do so.
+     *
+     * Hooks are guaranteed to run in the order they were added and the state
+     * set by each hook is available to the next hook (either through global
+     * resources, such as classes and interfaces, or through the 2nd parameter
+     * of the callback, if any local variables were set.
+     *
+     * @example Contrived example where one hook sets the date and another
+     *          prints it in the REPL.
+     *
+     *   $boris->onStart(function($worker, $vars){
+     *     $worker->setLocal('date', date('Y-m-d'));
+     *   });
+     *
+     *   $boris->onStart('echo "The date is $date\n";');
+     */
+    public function onStart($hook)
+    {
+        $this->_startHooks[] = $hook;
+    }
+    
+    /**
+     * Add a new hook to run in the context of the REPL when a fatal error occurs.
+     *
+     * @param mixed $hook
+     *
+     * The hook is either a string of PHP code to eval(), or a Closure accepting
+     * the EvalWorker object as its first argument and the array of defined
+     * local variables in the second argument.
+     *
+     * If the hook is a callback and needs to set any local variables in the
+     * REPL's scope, it should invoke $worker->setLocal($var_name, $value) to
+     * do so.
+     *
+     * Hooks are guaranteed to run in the order they were added and the state
+     * set by each hook is available to the next hook (either through global
+     * resources, such as classes and interfaces, or through the 2nd parameter
+     * of the callback, if any local variables were set.
+     *
+     * @example An example if your project requires some database connection cleanup:
+     *
+     *   $boris->onFailure(function($worker, $vars){
+     *     DB::reset();
+     *   });
+     */
+    public function onFailure($hook)
+    {
+        $this->_failureHooks[] = $hook;
+    }
+    
+    /**
+     * Set a local variable, or many local variables.
+     *
+     * @example Setting a single variable
+     *   $boris->setLocal('user', $bob);
+     *
+     * @example Setting many variables at once
+     *   $boris->setLocal(array('user' => $bob, 'appContext' => $appContext));
+     *
+     * This method can safely be invoked repeatedly.
+     *
+     * @param array|string $local
+     * @param mixed $value, optional
+     */
+    public function setLocal($local, $value = null)
+    {
+        if (!is_array($local)) {
+            $local = array(
+                $local => $value
+            );
+        }
+        
+        $this->_exports = array_merge($this->_exports, $local);
+    }
+    
+    /**
+     * Sets the Boris prompt text
+     *
+     * @param string $prompt
+     */
+    public function setPrompt($prompt)
+    {
+        $this->_prompt = $prompt;
+    }
+    
+    /**
+     * Set an Inspector object for Boris to output return values with.
+     *
+     * @param object $inspector any object the responds to inspect($v)
+     */
+    public function setInspector($inspector)
+    {
+        $this->_inspector = $inspector;
+    }
+    
+    /**
+     * Start the REPL (display the readline prompt).
+     *
+     * This method never returns.
+     */
+    public function start()
+    {
+        declare (ticks = 1);
+        pcntl_signal(SIGINT, SIG_IGN, true);
+        
+        if (!$pipes = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, STREAM_IPPROTO_IP)) {
+            throw new \RuntimeException('Failed to create socket pair');
+        }
+        
+        $pid = pcntl_fork();
+        
+        if ($pid > 0) {
+            if (function_exists('setproctitle')) {
+                setproctitle('boris (master)');
+            }
+            
+            fclose($pipes[0]);
+            $client = new ReadlineClient($pipes[1]);
+            $client->start($this->_prompt, $this->_historyFile);
+        } elseif ($pid < 0) {
+            throw new \RuntimeException('Failed to fork child process');
+        } else {
+            if (function_exists('setproctitle')) {
+                setproctitle('boris (worker)');
+            }
+            
+            fclose($pipes[1]);
+            $worker = new EvalWorker($pipes[0]);
+            $worker->setLocal($this->_exports);
+            $worker->setStartHooks($this->_startHooks);
+            $worker->setFailureHooks($this->_failureHooks);
+            $worker->setInspector($this->_inspector);
+            $worker->start();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/lib/Boris/CLIOptionsHandler.php
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/lib/Boris/CLIOptionsHandler.php b/vendor/d11wtq/boris/lib/Boris/CLIOptionsHandler.php
new file mode 100644
index 0000000..ff785f0
--- /dev/null
+++ b/vendor/d11wtq/boris/lib/Boris/CLIOptionsHandler.php
@@ -0,0 +1,92 @@
+<?php
+
+namespace Boris;
+
+/**
+ * Processes available command line flags.
+ */
+class CLIOptionsHandler
+{
+    /**
+     * Accept the REPL object and perform any setup necessary from the CLI flags.
+     *
+     * @param Boris $boris
+     */
+    public function handle($boris)
+    {
+        $args = getopt('hvr:', array(
+            'help',
+            'version',
+            'require:'
+        ));
+        
+        foreach ($args as $option => $value) {
+            switch ($option) {
+                /*
+                 * Sets files to load at startup, may be used multiple times,
+                 * i.e: boris -r test.php,foo/bar.php -r ba/foo.php --require hey.php
+                 */
+                case 'r':
+                case 'require':
+                    $this->_handleRequire($boris, $value);
+                    break;
+                
+                /*
+                 * Show Usage info
+                 */
+                case 'h':
+                case 'help':
+                    $this->_handleUsageInfo();
+                    break;
+                
+                /*
+                 * Show version
+                 */
+                case 'v':
+                case 'version':
+                    $this->_handleVersion();
+                    break;
+            }
+        }
+    }
+    
+    // -- Private Methods
+    
+    private function _handleRequire($boris, $paths)
+    {
+        $require = array_reduce((array) $paths, function($acc, $v)
+        {
+            return array_merge($acc, explode(',', $v));
+        }, array());
+        
+        $boris->onStart(function($worker, $scope) use ($require)
+        {
+            foreach ($require as $path) {
+                require $path;
+            }
+            
+            $worker->setLocal(get_defined_vars());
+        });
+    }
+    
+    private function _handleUsageInfo()
+    {
+        echo <<<USAGE
+Usage: boris [options]
+boris is a tiny REPL for PHP
+
+Options:
+  -h, --help     show this help message and exit
+  -r, --require  a comma-separated list of files to require on startup
+  -v, --version  show Boris version
+
+USAGE;
+        exit(0);
+    }
+    
+    private function _handleVersion()
+    {
+        printf("Boris %s\n", Boris::VERSION);
+        exit(0);
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/d11wtq/boris/lib/Boris/ColoredInspector.php
----------------------------------------------------------------------
diff --git a/vendor/d11wtq/boris/lib/Boris/ColoredInspector.php b/vendor/d11wtq/boris/lib/Boris/ColoredInspector.php
new file mode 100644
index 0000000..aea868c
--- /dev/null
+++ b/vendor/d11wtq/boris/lib/Boris/ColoredInspector.php
@@ -0,0 +1,241 @@
+<?php
+
+/**
+ * @author Rob Morris <ro...@irongaze.com>
+ * @author Chris Corbyn <ch...@w3style.co.uk>
+ *
+ * Copyright © 2013-2014 Rob Morris.
+ */
+
+namespace Boris;
+
+/**
+ * Identifies data types in data structures and syntax highlights them.
+ */
+class ColoredInspector implements Inspector
+{
+    static $TERM_COLORS = array('black' => "\033[0;30m", 'white' => "\033[1;37m", 'none' => "\033[1;30m", 'dark_grey' => "\033[1;30m", 'light_grey' => "\033[0;37m", 'dark_red' => "\033[0;31m", 'light_red' => "\033[1;31m", 'dark_green' => "\033[0;32m", 'light_green' => "\033[1;32m", 'dark_yellow' => "\033[0;33m", 'light_yellow' => "\033[1;33m", 'dark_blue' => "\033[0;34m", 'light_blue' => "\033[1;34m", 'dark_purple' => "\033[0;35m", 'light_purple' => "\033[1;35m", 'dark_cyan' => "\033[0;36m", 'light_cyan' => "\033[1;36m");
+    
+    private $_fallback;
+    private $_colorMap = array();
+    
+    /**
+     * Initialize a new ColoredInspector, using $colorMap.
+     *
+     * The colors should be an associative array with the keys:
+     *
+     *   - 'integer'
+     *   - 'float'
+     *   - 'keyword'
+     *   - 'string'
+     *   - 'boolean'
+     *   - 'default'
+     *
+     * And the values, one of the following colors:
+     *
+     *   - 'none'
+     *   - 'black'
+     *   - 'white'
+     *   - 'dark_grey'
+     *   - 'light_grey'
+     *   - 'dark_red'
+     *   - 'light_red'
+     *   - 'dark_green'
+     *   - 'light_green'
+     *   - 'dark_yellow'
+     *   - 'light_yellow'
+     *   - 'dark_blue'
+     *   - 'light_blue'
+     *   - 'dark_purple'
+     *   - 'light_purple'
+     *   - 'dark_cyan'
+     *   - 'light_cyan'
+     *
+     * An empty $colorMap array effectively means 'none' for all types.
+     *
+     * @param array $colorMap
+     */
+    public function __construct($colorMap = null)
+    {
+        $this->_fallback = new DumpInspector();
+        
+        if (isset($colorMap)) {
+            $this->_colorMap = $colorMap;
+        } else {
+            $this->_colorMap = $this->_defaultColorMap();
+        }
+    }
+    
+    public function inspect($variable)
+    {
+        return preg_replace('/^/m', $this->_colorize('comment', '// '), $this->_dump($variable));
+    }
+    
+    /**
+     * Returns an associative array of an object's properties.
+     *
+     * This method is public so that subclasses may override it.
+     *
+     * @param object $value
+     * @return array
+     * */
+    public function objectVars($value)
+    {
+        return get_object_vars($value);
+    }
+    
+    // -- Private Methods
+    
+    public function _dump($value)
+    {
+        $tests = array(
+            'is_null' => '_dumpNull',
+            'is_string' => '_dumpString',
+            'is_bool' => '_dumpBoolean',
+            'is_integer' => '_dumpInteger',
+            'is_float' => '_dumpFloat',
+            'is_array' => '_dumpArray',
+            'is_object' => '_dumpObject'
+        );
+        
+        foreach ($tests as $predicate => $outputMethod) {
+            if (call_user_func($predicate, $value))
+                return call_user_func(array(
+                    $this,
+                    $outputMethod
+                ), $value);
+        }
+        
+        return $this->_fallback->inspect($value);
+    }
+    
+    private function _dumpNull($value)
+    {
+        return $this->_colorize('keyword', 'NULL');
+    }
+    
+    private function _dumpString($value)
+    {
+        return $this->_colorize('string', var_export($value, true));
+    }
+    
+    private function _dumpBoolean($value)
+    {
+        return $this->_colorize('bool', var_export($value, true));
+    }
+    
+    private function _dumpInteger($value)
+    {
+        return $this->_colorize('integer', var_export($value, true));
+    }
+    
+    private function _dumpFloat($value)
+    {
+        return $this->_colorize('float', var_export($value, true));
+    }
+    
+    private function _dumpArray($value)
+    {
+        return $this->_dumpStructure('array', $value);
+    }
+    
+    private function _dumpObject($value)
+    {
+        return $this->_dumpStructure(sprintf('object(%s)', get_class($value)), $this->objectVars($value));
+    }
+    
+    private function _dumpStructure($type, $value)
+    {
+        return $this->_astToString($this->_buildAst($type, $value));
+    }
+    
+    public function _buildAst($type, $value, $seen = array())
+    {
+        // FIXME: Improve this AST so it doesn't require access to dump() or colorize()
+        if ($this->_isSeen($value, $seen)) {
+            return $this->_colorize('default', '*** RECURSION ***');
+        } else {
+            $nextSeen = array_merge($seen, array(
+                $value
+            ));
+        }
+        
+        if (is_object($value)) {
+            $vars = $this->objectVars($value);
+        } else {
+            $vars = $value;
+        }
+        
+        $self = $this;
+        
+        return array(
+            'name' => $this->_colorize('keyword', $type),
+            'children' => empty($vars) ? array() : array_combine(array_map(array(
+                $this,
+                '_dump'
+            ), array_keys($vars)), array_map(function($v) use ($self, $nextSeen)
+            {
+                if (is_object($v)) {
+                    return $self->_buildAst(sprintf('object(%s)', get_class($v)), $v, $nextSeen);
+                } elseif (is_array($v)) {
+                    return $self->_buildAst('array', $v, $nextSeen);
+                } else {
+                    return $self->_dump($v);
+                }
+            }, array_values($vars)))
+        );
+    }
+    
+    public function _astToString($node, $indent = 0)
+    {
+        $children = $node['children'];
+        $self     = $this;
+        
+        return implode("\n", array(
+            sprintf('%s(', $node['name']),
+            implode(",\n", array_map(function($k) use ($self, $children, $indent)
+            {
+                if (is_array($children[$k])) {
+                    return sprintf('%s%s => %s', str_repeat(' ', ($indent + 1) * 2), $k, $self->_astToString($children[$k], $indent + 1));
+                } else {
+                    return sprintf('%s%s => %s', str_repeat(' ', ($indent + 1) * 2), $k, $children[$k]);
+                }
+            }, array_keys($children))),
+            sprintf('%s)', str_repeat(' ', $indent * 2))
+        ));
+    }
+    
+    private function _defaultColorMap()
+    {
+        return array(
+            'integer' => 'light_green',
+            'float' => 'light_yellow',
+            'string' => 'light_red',
+            'bool' => 'light_purple',
+            'keyword' => 'light_cyan',
+            'comment' => 'dark_grey',
+            'default' => 'none'
+        );
+    }
+    
+    private function _colorize($type, $value)
+    {
+        if (!empty($this->_colorMap[$type])) {
+            $colorName = $this->_colorMap[$type];
+        } else {
+            $colorName = $this->_colorMap['default'];
+        }
+        
+        return sprintf("%s%s\033[0m", static::$TERM_COLORS[$colorName], $value);
+    }
+    
+    private function _isSeen($value, $seen)
+    {
+        foreach ($seen as $v) {
+            if ($v === $value)
+                return true;
+        }
+        
+        return false;
+    }
+}


[23/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/Console/RemindersTableCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Console/RemindersTableCommand.php b/vendor/laravel/framework/src/Illuminate/Auth/Console/RemindersTableCommand.php
new file mode 100644
index 0000000..c03801c
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/Console/RemindersTableCommand.php
@@ -0,0 +1,94 @@
+<?php namespace Illuminate\Auth\Console;
+
+use Illuminate\Console\Command;
+use Illuminate\Filesystem\Filesystem;
+
+class RemindersTableCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'auth:reminders-table';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Create a migration for the password reminders table';
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * Create a new reminder table command instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @return void
+	 */
+	public function __construct(Filesystem $files)
+	{
+		parent::__construct();
+
+		$this->files = $files;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$fullPath = $this->createBaseMigration();
+
+		$this->files->put($fullPath, $this->getMigrationStub());
+
+		$this->info('Migration created successfully!');
+
+		$this->call('dump-autoload');
+	}
+
+	/**
+	 * Create a base migration file for the reminders.
+	 *
+	 * @return string
+	 */
+	protected function createBaseMigration()
+	{
+		$name = 'create_password_reminders_table';
+
+		$path = $this->laravel['path'].'/database/migrations';
+
+		return $this->laravel['migration.creator']->create($name, $path);
+	}
+
+	/**
+	 * Get the contents of the reminder migration stub.
+	 *
+	 * @return string
+	 */
+	protected function getMigrationStub()
+	{
+		$stub = $this->files->get(__DIR__.'/stubs/reminders.stub');
+
+		return str_replace('password_reminders', $this->getTable(), $stub);
+	}
+
+	/**
+	 * Get the password reminder table name.
+	 *
+	 * @return string
+	 */
+	protected function getTable()
+	{
+		return $this->laravel['config']->get('auth.reminder.table');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/controller.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/controller.stub b/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/controller.stub
new file mode 100644
index 0000000..ac59e48
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/controller.stub
@@ -0,0 +1,75 @@
+<?php
+
+class RemindersController extends Controller {
+
+	/**
+	 * Display the password reminder view.
+	 *
+	 * @return Response
+	 */
+	public function getRemind()
+	{
+		return View::make('password.remind');
+	}
+
+	/**
+	 * Handle a POST request to remind a user of their password.
+	 *
+	 * @return Response
+	 */
+	public function postRemind()
+	{
+		switch ($response = Password::remind(Input::only('email')))
+		{
+			case Password::INVALID_USER:
+				return Redirect::back()->with('error', Lang::get($response));
+
+			case Password::REMINDER_SENT:
+				return Redirect::back()->with('status', Lang::get($response));
+		}
+	}
+
+	/**
+	 * Display the password reset view for the given token.
+	 *
+	 * @param  string  $token
+	 * @return Response
+	 */
+	public function getReset($token = null)
+	{
+		if (is_null($token)) App::abort(404);
+
+		return View::make('password.reset')->with('token', $token);
+	}
+
+	/**
+	 * Handle a POST request to reset a user's password.
+	 *
+	 * @return Response
+	 */
+	public function postReset()
+	{
+		$credentials = Input::only(
+			'email', 'password', 'password_confirmation', 'token'
+		);
+
+		$response = Password::reset($credentials, function($user, $password)
+		{
+			$user->password = Hash::make($password);
+
+			$user->save();
+		});
+
+		switch ($response)
+		{
+			case Password::INVALID_PASSWORD:
+			case Password::INVALID_TOKEN:
+			case Password::INVALID_USER:
+				return Redirect::back()->with('error', Lang::get($response));
+
+			case Password::PASSWORD_RESET:
+				return Redirect::to('/');
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/reminders.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/reminders.stub b/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/reminders.stub
new file mode 100755
index 0000000..dfbcf83
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/reminders.stub
@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreatePasswordRemindersTable extends Migration {
+
+	/**
+	 * Run the migrations.
+	 *
+	 * @return void
+	 */
+	public function up()
+	{
+		Schema::create('password_reminders', function(Blueprint $table)
+		{
+			$table->string('email')->index();
+			$table->string('token')->index();
+			$table->timestamp('created_at');
+		});
+	}
+
+	/**
+	 * Reverse the migrations.
+	 *
+	 * @return void
+	 */
+	public function down()
+	{
+		Schema::drop('password_reminders');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/DatabaseUserProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/DatabaseUserProvider.php b/vendor/laravel/framework/src/Illuminate/Auth/DatabaseUserProvider.php
new file mode 100755
index 0000000..0572924
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/DatabaseUserProvider.php
@@ -0,0 +1,140 @@
+<?php namespace Illuminate\Auth;
+
+use Illuminate\Database\Connection;
+use Illuminate\Hashing\HasherInterface;
+
+class DatabaseUserProvider implements UserProviderInterface {
+
+	/**
+	 * The active database connection.
+	 *
+	 * @var \Illuminate\Database\Connection
+	 */
+	protected $conn;
+
+	/**
+	 * The hasher implementation.
+	 *
+	 * @var \Illuminate\Hashing\HasherInterface
+	 */
+	protected $hasher;
+
+	/**
+	 * The table containing the users.
+	 *
+	 * @var string
+	 */
+	protected $table;
+
+	/**
+	 * Create a new database user provider.
+	 *
+	 * @param  \Illuminate\Database\Connection  $conn
+	 * @param  \Illuminate\Hashing\HasherInterface  $hasher
+	 * @param  string  $table
+	 * @return void
+	 */
+	public function __construct(Connection $conn, HasherInterface $hasher, $table)
+	{
+		$this->conn = $conn;
+		$this->table = $table;
+		$this->hasher = $hasher;
+	}
+
+	/**
+	 * Retrieve a user by their unique identifier.
+	 *
+	 * @param  mixed  $identifier
+	 * @return \Illuminate\Auth\UserInterface|null
+	 */
+	public function retrieveById($identifier)
+	{
+		$user = $this->conn->table($this->table)->find($identifier);
+
+		if ( ! is_null($user))
+		{
+			return new GenericUser((array) $user);
+		}
+	}
+
+	/**
+	 * Retrieve a user by by their unique identifier and "remember me" token.
+	 *
+	 * @param  mixed   $identifier
+	 * @param  string  $token
+	 * @return \Illuminate\Auth\UserInterface|null
+	 */
+	public function retrieveByToken($identifier, $token)
+	{
+		$user = $this->conn->table($this->table)
+                                ->where('id', $identifier)
+                                ->where('remember_token', $token)
+                                ->first();
+
+		if ( ! is_null($user))
+		{
+			return new GenericUser((array) $user);
+		}
+	}
+
+	/**
+	 * Update the "remember me" token for the given user in storage.
+	 *
+	 * @param  \Illuminate\Auth\UserInterface  $user
+	 * @param  string  $token
+	 * @return void
+	 */
+	public function updateRememberToken(UserInterface $user, $token)
+	{
+		$this->conn->table($this->table)
+                            ->where('id', $user->getAuthIdentifier())
+                            ->update(array('remember_token' => $token));
+	}
+
+	/**
+	 * Retrieve a user by the given credentials.
+	 *
+	 * @param  array  $credentials
+	 * @return \Illuminate\Auth\UserInterface|null
+	 */
+	public function retrieveByCredentials(array $credentials)
+	{
+		// First we will add each credential element to the query as a where clause.
+		// Then we can execute the query and, if we found a user, return it in a
+		// generic "user" object that will be utilized by the Guard instances.
+		$query = $this->conn->table($this->table);
+
+		foreach ($credentials as $key => $value)
+		{
+			if ( ! str_contains($key, 'password'))
+			{
+				$query->where($key, $value);
+			}
+		}
+
+		// Now we are ready to execute the query to see if we have an user matching
+		// the given credentials. If not, we will just return nulls and indicate
+		// that there are no matching users for these given credential arrays.
+		$user = $query->first();
+
+		if ( ! is_null($user))
+		{
+			return new GenericUser((array) $user);
+		}
+	}
+
+	/**
+	 * Validate a user against the given credentials.
+	 *
+	 * @param  \Illuminate\Auth\UserInterface  $user
+	 * @param  array  $credentials
+	 * @return bool
+	 */
+	public function validateCredentials(UserInterface $user, array $credentials)
+	{
+		$plain = $credentials['password'];
+
+		return $this->hasher->check($plain, $user->getAuthPassword());
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php b/vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php
new file mode 100755
index 0000000..7f0fcc5
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php
@@ -0,0 +1,123 @@
+<?php namespace Illuminate\Auth;
+
+use Illuminate\Hashing\HasherInterface;
+
+class EloquentUserProvider implements UserProviderInterface {
+
+	/**
+	 * The hasher implementation.
+	 *
+	 * @var \Illuminate\Hashing\HasherInterface
+	 */
+	protected $hasher;
+
+	/**
+	 * The Eloquent user model.
+	 *
+	 * @var string
+	 */
+	protected $model;
+
+	/**
+	 * Create a new database user provider.
+	 *
+	 * @param  \Illuminate\Hashing\HasherInterface  $hasher
+	 * @param  string  $model
+	 * @return void
+	 */
+	public function __construct(HasherInterface $hasher, $model)
+	{
+		$this->model = $model;
+		$this->hasher = $hasher;
+	}
+
+	/**
+	 * Retrieve a user by their unique identifier.
+	 *
+	 * @param  mixed  $identifier
+	 * @return \Illuminate\Auth\UserInterface|null
+	 */
+	public function retrieveById($identifier)
+	{
+		return $this->createModel()->newQuery()->find($identifier);
+	}
+
+	/**
+	 * Retrieve a user by their unique identifier and "remember me" token.
+	 *
+	 * @param  mixed  $identifier
+	 * @param  string  $token
+	 * @return \Illuminate\Auth\UserInterface|null
+	 */
+	public function retrieveByToken($identifier, $token)
+	{
+		$model = $this->createModel();
+
+		return $model->newQuery()
+                        ->where($model->getKeyName(), $identifier)
+                        ->where($model->getRememberTokenName(), $token)
+                        ->first();
+	}
+
+	/**
+	 * Update the "remember me" token for the given user in storage.
+	 *
+	 * @param  \Illuminate\Auth\UserInterface  $user
+	 * @param  string  $token
+	 * @return void
+	 */
+	public function updateRememberToken(UserInterface $user, $token)
+	{
+		$user->setRememberToken($token);
+
+		$user->save();
+	}
+
+	/**
+	 * Retrieve a user by the given credentials.
+	 *
+	 * @param  array  $credentials
+	 * @return \Illuminate\Auth\UserInterface|null
+	 */
+	public function retrieveByCredentials(array $credentials)
+	{
+		// First we will add each credential element to the query as a where clause.
+		// Then we can execute the query and, if we found a user, return it in a
+		// Eloquent User "model" that will be utilized by the Guard instances.
+		$query = $this->createModel()->newQuery();
+
+		foreach ($credentials as $key => $value)
+		{
+			if ( ! str_contains($key, 'password')) $query->where($key, $value);
+		}
+
+		return $query->first();
+	}
+
+	/**
+	 * Validate a user against the given credentials.
+	 *
+	 * @param  \Illuminate\Auth\UserInterface  $user
+	 * @param  array  $credentials
+	 * @return bool
+	 */
+	public function validateCredentials(UserInterface $user, array $credentials)
+	{
+		$plain = $credentials['password'];
+
+		return $this->hasher->check($plain, $user->getAuthPassword());
+	}
+
+	/**
+	 * Create a new instance of the model.
+	 *
+	 * @return \Illuminate\Database\Eloquent\Model
+	 */
+	public function createModel()
+	{
+		$class = '\\'.ltrim($this->model, '\\');
+
+		return new $class;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/GenericUser.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/GenericUser.php b/vendor/laravel/framework/src/Illuminate/Auth/GenericUser.php
new file mode 100755
index 0000000..7f1972d
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/GenericUser.php
@@ -0,0 +1,119 @@
+<?php namespace Illuminate\Auth;
+
+class GenericUser implements UserInterface {
+
+	/**
+	 * All of the user's attributes.
+	 *
+	 * @var array
+	 */
+	protected $attributes;
+
+	/**
+	 * Create a new generic User object.
+	 *
+	 * @param  array  $attributes
+	 * @return void
+	 */
+	public function __construct(array $attributes)
+	{
+		$this->attributes = $attributes;
+	}
+
+	/**
+	 * Get the unique identifier for the user.
+	 *
+	 * @return mixed
+	 */
+	public function getAuthIdentifier()
+	{
+		return $this->attributes['id'];
+	}
+
+	/**
+	 * Get the password for the user.
+	 *
+	 * @return string
+	 */
+	public function getAuthPassword()
+	{
+		return $this->attributes['password'];
+	}
+
+	/**
+	 * Get the token value for the "remember me" session.
+	 *
+	 * @return string
+	 */
+	public function getRememberToken()
+	{
+		return $this->attributes[$this->getRememberTokenName()];
+	}
+
+	/**
+	 * Set the token value for the "remember me" session.
+	 *
+	 * @param  string  $value
+	 * @return void
+	 */
+	public function setRememberToken($value)
+	{
+		$this->attributes[$this->getRememberTokenName()] = $value;
+	}
+
+	/**
+	 * Get the column name for the "remember me" token.
+	 *
+	 * @return string
+	 */
+	public function getRememberTokenName()
+	{
+		return 'remember_token';
+	}
+
+	/**
+	 * Dynamically access the user's attributes.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function __get($key)
+	{
+		return $this->attributes[$key];
+	}
+
+	/**
+	 * Dynamically set an attribute on the user.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function __set($key, $value)
+	{
+		$this->attributes[$key] = $value;
+	}
+
+	/**
+	 * Dynamically check if a value is set on the user.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function __isset($key)
+	{
+		return isset($this->attributes[$key]);
+	}
+
+	/**
+	 * Dynamically unset a value on the user.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function __unset($key)
+	{
+		unset($this->attributes[$key]);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/Guard.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Guard.php b/vendor/laravel/framework/src/Illuminate/Auth/Guard.php
new file mode 100755
index 0000000..10f3069
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/Guard.php
@@ -0,0 +1,752 @@
+<?php namespace Illuminate\Auth;
+
+use Illuminate\Cookie\CookieJar;
+use Illuminate\Events\Dispatcher;
+use Symfony\Component\HttpFoundation\Request;
+use Illuminate\Session\Store as SessionStore;
+use Symfony\Component\HttpFoundation\Response;
+
+class Guard {
+
+	/**
+	 * The currently authenticated user.
+	 *
+	 * @var \Illuminate\Auth\UserInterface
+	 */
+	protected $user;
+
+	/**
+	 * The user we last attempted to retrieve.
+	 *
+	 * @var \Illuminate\Auth\UserInterface
+	 */
+	protected $lastAttempted;
+
+	/**
+	 * Indicates if the user was authenticated via a recaller cookie.
+	 *
+	 * @var bool
+	 */
+	protected $viaRemember = false;
+
+	/**
+	 * The user provider implementation.
+	 *
+	 * @var \Illuminate\Auth\UserProviderInterface
+	 */
+	protected $provider;
+
+	/**
+	 * The session store used by the guard.
+	 *
+	 * @var \Illuminate\Session\Store
+	 */
+	protected $session;
+
+	/**
+	 * The Illuminate cookie creator service.
+	 *
+	 * @var \Illuminate\Cookie\CookieJar
+	 */
+	protected $cookie;
+
+	/**
+	 * The request instance.
+	 *
+	 * @var \Symfony\Component\HttpFoundation\Request
+	 */
+	protected $request;
+
+	/**
+	 * The event dispatcher instance.
+	 *
+	 * @var \Illuminate\Events\Dispatcher
+	 */
+	protected $events;
+
+	/**
+	 * Indicates if the logout method has been called.
+	 *
+	 * @var bool
+	 */
+	protected $loggedOut = false;
+
+	/**
+	 * Indicates if a token user retrieval has been attempted.
+	 *
+	 * @var bool
+	 */
+	protected $tokenRetrievalAttempted = false;
+
+	/**
+	 * Create a new authentication guard.
+	 *
+	 * @param  \Illuminate\Auth\UserProviderInterface  $provider
+	 * @param  \Illuminate\Session\Store  $session
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @return void
+	 */
+	public function __construct(UserProviderInterface $provider,
+								SessionStore $session,
+								Request $request = null)
+	{
+		$this->session = $session;
+		$this->request = $request;
+		$this->provider = $provider;
+	}
+
+	/**
+	 * Determine if the current user is authenticated.
+	 *
+	 * @return bool
+	 */
+	public function check()
+	{
+		return ! is_null($this->user());
+	}
+
+	/**
+	 * Determine if the current user is a guest.
+	 *
+	 * @return bool
+	 */
+	public function guest()
+	{
+		return ! $this->check();
+	}
+
+	/**
+	 * Get the currently authenticated user.
+	 *
+	 * @return \Illuminate\Auth\UserInterface|null
+	 */
+	public function user()
+	{
+		if ($this->loggedOut) return;
+
+		// If we have already retrieved the user for the current request we can just
+		// return it back immediately. We do not want to pull the user data every
+		// request into the method because that would tremendously slow an app.
+		if ( ! is_null($this->user))
+		{
+			return $this->user;
+		}
+
+		$id = $this->session->get($this->getName());
+
+		// First we will try to load the user using the identifier in the session if
+		// one exists. Otherwise we will check for a "remember me" cookie in this
+		// request, and if one exists, attempt to retrieve the user using that.
+		$user = null;
+
+		if ( ! is_null($id))
+		{
+			$user = $this->provider->retrieveByID($id);
+		}
+
+		// If the user is null, but we decrypt a "recaller" cookie we can attempt to
+		// pull the user data on that cookie which serves as a remember cookie on
+		// the application. Once we have a user we can return it to the caller.
+		$recaller = $this->getRecaller();
+
+		if (is_null($user) && ! is_null($recaller))
+		{
+			$user = $this->getUserByRecaller($recaller);
+		}
+
+		return $this->user = $user;
+	}
+
+	/**
+	 * Get the ID for the currently authenticated user.
+	 *
+	 * @return int|null
+	 */
+	public function id()
+	{
+		if ($this->loggedOut) return;
+
+		$id = $this->session->get($this->getName(), $this->getRecallerId());
+
+		if (is_null($id) && $this->user())
+		{
+			$id = $this->user()->getAuthIdentifier();
+		}
+
+		return $id;
+	}
+
+	/**
+	 * Pull a user from the repository by its recaller ID.
+	 *
+	 * @param  string  $recaller
+	 * @return mixed
+	 */
+	protected function getUserByRecaller($recaller)
+	{
+		if ($this->validRecaller($recaller) && ! $this->tokenRetrievalAttempted)
+		{
+			$this->tokenRetrievalAttempted = true;
+
+			list($id, $token) = explode('|', $recaller, 2);
+
+			$this->viaRemember = ! is_null($user = $this->provider->retrieveByToken($id, $token));
+
+			return $user;
+		}
+	}
+
+	/**
+	 * Get the decrypted recaller cookie for the request.
+	 *
+	 * @return string|null
+	 */
+	protected function getRecaller()
+	{
+		return $this->request->cookies->get($this->getRecallerName());
+	}
+
+	/**
+	 * Get the user ID from the recaller cookie.
+	 *
+	 * @return string
+	 */
+	protected function getRecallerId()
+	{
+		if ($this->validRecaller($recaller = $this->getRecaller()))
+		{
+			return head(explode('|', $recaller));
+		}
+	}
+
+	/**
+	 * Determine if the recaller cookie is in a valid format.
+	 *
+	 * @param  string  $recaller
+	 * @return bool
+	 */
+	protected function validRecaller($recaller)
+	{
+		if ( ! is_string($recaller) || ! str_contains($recaller, '|')) return false;
+
+		$segments = explode('|', $recaller);
+
+		return count($segments) == 2 && trim($segments[0]) !== '' && trim($segments[1]) !== '';
+	}
+
+	/**
+	 * Log a user into the application without sessions or cookies.
+	 *
+	 * @param  array  $credentials
+	 * @return bool
+	 */
+	public function once(array $credentials = array())
+	{
+		if ($this->validate($credentials))
+		{
+			$this->setUser($this->lastAttempted);
+
+			return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Validate a user's credentials.
+	 *
+	 * @param  array  $credentials
+	 * @return bool
+	 */
+	public function validate(array $credentials = array())
+	{
+		return $this->attempt($credentials, false, false);
+	}
+
+	/**
+	 * Attempt to authenticate using HTTP Basic Auth.
+	 *
+	 * @param  string  $field
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @return \Symfony\Component\HttpFoundation\Response|null
+	 */
+	public function basic($field = 'email', Request $request = null)
+	{
+		if ($this->check()) return;
+
+		$request = $request ?: $this->getRequest();
+
+		// If a username is set on the HTTP basic request, we will return out without
+		// interrupting the request lifecycle. Otherwise, we'll need to generate a
+		// request indicating that the given credentials were invalid for login.
+		if ($this->attemptBasic($request, $field)) return;
+
+		return $this->getBasicResponse();
+	}
+
+	/**
+	 * Perform a stateless HTTP Basic login attempt.
+	 *
+	 * @param  string  $field
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @return \Symfony\Component\HttpFoundation\Response|null
+	 */
+	public function onceBasic($field = 'email', Request $request = null)
+	{
+		$request = $request ?: $this->getRequest();
+
+		if ( ! $this->once($this->getBasicCredentials($request, $field)))
+		{
+			return $this->getBasicResponse();
+		}
+	}
+
+	/**
+	 * Attempt to authenticate using basic authentication.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @param  string  $field
+	 * @return bool
+	 */
+	protected function attemptBasic(Request $request, $field)
+	{
+		if ( ! $request->getUser()) return false;
+
+		return $this->attempt($this->getBasicCredentials($request, $field));
+	}
+
+	/**
+	 * Get the credential array for a HTTP Basic request.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @param  string  $field
+	 * @return array
+	 */
+	protected function getBasicCredentials(Request $request, $field)
+	{
+		return array($field => $request->getUser(), 'password' => $request->getPassword());
+	}
+
+	/**
+	 * Get the response for basic authentication.
+	 *
+	 * @return \Symfony\Component\HttpFoundation\Response
+	 */
+	protected function getBasicResponse()
+	{
+		$headers = array('WWW-Authenticate' => 'Basic');
+
+		return new Response('Invalid credentials.', 401, $headers);
+	}
+
+	/**
+	 * Attempt to authenticate a user using the given credentials.
+	 *
+	 * @param  array  $credentials
+	 * @param  bool   $remember
+	 * @param  bool   $login
+	 * @return bool
+	 */
+	public function attempt(array $credentials = array(), $remember = false, $login = true)
+	{
+		$this->fireAttemptEvent($credentials, $remember, $login);
+
+		$this->lastAttempted = $user = $this->provider->retrieveByCredentials($credentials);
+
+		// If an implementation of UserInterface was returned, we'll ask the provider
+		// to validate the user against the given credentials, and if they are in
+		// fact valid we'll log the users into the application and return true.
+		if ($this->hasValidCredentials($user, $credentials))
+		{
+			if ($login) $this->login($user, $remember);
+
+			return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Determine if the user matches the credentials.
+	 *
+	 * @param  mixed  $user
+	 * @param  array  $credentials
+	 * @return bool
+	 */
+	protected function hasValidCredentials($user, $credentials)
+	{
+		return ! is_null($user) && $this->provider->validateCredentials($user, $credentials);
+	}
+
+	/**
+	 * Fire the attempt event with the arguments.
+	 *
+	 * @param  array  $credentials
+	 * @param  bool   $remember
+	 * @param  bool   $login
+	 * @return void
+	 */
+	protected function fireAttemptEvent(array $credentials, $remember, $login)
+	{
+		if ($this->events)
+		{
+			$payload = array($credentials, $remember, $login);
+
+			$this->events->fire('auth.attempt', $payload);
+		}
+	}
+
+	/**
+	 * Register an authentication attempt event listener.
+	 *
+	 * @param  mixed  $callback
+	 * @return void
+	 */
+	public function attempting($callback)
+	{
+		if ($this->events)
+		{
+			$this->events->listen('auth.attempt', $callback);
+		}
+	}
+
+	/**
+	 * Log a user into the application.
+	 *
+	 * @param  \Illuminate\Auth\UserInterface  $user
+	 * @param  bool  $remember
+	 * @return void
+	 */
+	public function login(UserInterface $user, $remember = false)
+	{
+		$this->updateSession($user->getAuthIdentifier());
+
+		// If the user should be permanently "remembered" by the application we will
+		// queue a permanent cookie that contains the encrypted copy of the user
+		// identifier. We will then decrypt this later to retrieve the users.
+		if ($remember)
+		{
+			$this->createRememberTokenIfDoesntExist($user);
+
+			$this->queueRecallerCookie($user);
+		}
+
+		// If we have an event dispatcher instance set we will fire an event so that
+		// any listeners will hook into the authentication events and run actions
+		// based on the login and logout events fired from the guard instances.
+		if (isset($this->events))
+		{
+			$this->events->fire('auth.login', array($user, $remember));
+		}
+
+		$this->setUser($user);
+	}
+
+	/**
+	 * Update the session with the given ID.
+	 *
+	 * @param  string  $id
+	 * @return void
+	 */
+	protected function updateSession($id)
+	{
+		$this->session->put($this->getName(), $id);
+
+		$this->session->migrate(true);
+	}
+
+	/**
+	 * Log the given user ID into the application.
+	 *
+	 * @param  mixed  $id
+	 * @param  bool   $remember
+	 * @return \Illuminate\Auth\UserInterface
+	 */
+	public function loginUsingId($id, $remember = false)
+	{
+		$this->session->put($this->getName(), $id);
+
+		$this->login($user = $this->provider->retrieveById($id), $remember);
+
+		return $user;
+	}
+
+	/**
+	 * Log the given user ID into the application without sessions or cookies.
+	 *
+	 * @param  mixed  $id
+	 * @return bool
+	 */
+	public function onceUsingId($id)
+	{
+		$this->setUser($this->provider->retrieveById($id));
+
+		return $this->user instanceof UserInterface;
+	}
+
+	/**
+	 * Queue the recaller cookie into the cookie jar.
+	 *
+	 * @param  \Illuminate\Auth\UserInterface  $user
+	 * @return void
+	 */
+	protected function queueRecallerCookie(UserInterface $user)
+	{
+		$value = $user->getAuthIdentifier().'|'.$user->getRememberToken();
+
+		$this->getCookieJar()->queue($this->createRecaller($value));
+	}
+
+	/**
+	 * Create a remember me cookie for a given ID.
+	 *
+	 * @param  string  $value
+	 * @return \Symfony\Component\HttpFoundation\Cookie
+	 */
+	protected function createRecaller($value)
+	{
+		return $this->getCookieJar()->forever($this->getRecallerName(), $value);
+	}
+
+	/**
+	 * Log the user out of the application.
+	 *
+	 * @return void
+	 */
+	public function logout()
+	{
+		$user = $this->user();
+
+		// If we have an event dispatcher instance, we can fire off the logout event
+		// so any further processing can be done. This allows the developer to be
+		// listening for anytime a user signs out of this application manually.
+		$this->clearUserDataFromStorage();
+
+		if ( ! is_null($this->user))
+		{
+			$this->refreshRememberToken($user);
+		}
+
+		if (isset($this->events))
+		{
+			$this->events->fire('auth.logout', array($user));
+		}
+
+		// Once we have fired the logout event we will clear the users out of memory
+		// so they are no longer available as the user is no longer considered as
+		// being signed into this application and should not be available here.
+		$this->user = null;
+
+		$this->loggedOut = true;
+	}
+
+	/**
+	 * Remove the user data from the session and cookies.
+	 *
+	 * @return void
+	 */
+	protected function clearUserDataFromStorage()
+	{
+		$this->session->forget($this->getName());
+
+		$recaller = $this->getRecallerName();
+
+		$this->getCookieJar()->queue($this->getCookieJar()->forget($recaller));
+	}
+
+	/**
+	 * Refresh the remember token for the user.
+	 *
+	 * @param  \Illuminate\Auth\UserInterface  $user
+	 * @return void
+	 */
+	protected function refreshRememberToken(UserInterface $user)
+	{
+		$user->setRememberToken($token = str_random(60));
+
+		$this->provider->updateRememberToken($user, $token);
+	}
+
+	/**
+	 * Create a new remember token for the user if one doesn't already exist.
+	 *
+	 * @param  \Illuminate\Auth\UserInterface  $user
+	 * @return void
+	 */
+	protected function createRememberTokenIfDoesntExist(UserInterface $user)
+	{
+		$rememberToken = $user->getRememberToken();
+
+		if (empty($rememberToken))
+		{
+			$this->refreshRememberToken($user);
+		}
+	}
+
+	/**
+	 * Get the cookie creator instance used by the guard.
+	 *
+	 * @return \Illuminate\Cookie\CookieJar
+	 *
+	 * @throws \RuntimeException
+	 */
+	public function getCookieJar()
+	{
+		if ( ! isset($this->cookie))
+		{
+			throw new \RuntimeException("Cookie jar has not been set.");
+		}
+
+		return $this->cookie;
+	}
+
+	/**
+	 * Set the cookie creator instance used by the guard.
+	 *
+	 * @param  \Illuminate\Cookie\CookieJar  $cookie
+	 * @return void
+	 */
+	public function setCookieJar(CookieJar $cookie)
+	{
+		$this->cookie = $cookie;
+	}
+
+	/**
+	 * Get the event dispatcher instance.
+	 *
+	 * @return \Illuminate\Events\Dispatcher
+	 */
+	public function getDispatcher()
+	{
+		return $this->events;
+	}
+
+	/**
+	 * Set the event dispatcher instance.
+	 *
+	 * @param  \Illuminate\Events\Dispatcher
+	 * @return void
+	 */
+	public function setDispatcher(Dispatcher $events)
+	{
+		$this->events = $events;
+	}
+
+	/**
+	 * Get the session store used by the guard.
+	 *
+	 * @return \Illuminate\Session\Store
+	 */
+	public function getSession()
+	{
+		return $this->session;
+	}
+
+	/**
+	 * Get the user provider used by the guard.
+	 *
+	 * @return \Illuminate\Auth\UserProviderInterface
+	 */
+	public function getProvider()
+	{
+		return $this->provider;
+	}
+
+	/**
+	 * Set the user provider used by the guard.
+	 *
+	 * @param  \Illuminate\Auth\UserProviderInterface  $provider
+	 * @return void
+	 */
+	public function setProvider(UserProviderInterface $provider)
+	{
+		$this->provider = $provider;
+	}
+
+	/**
+	 * Return the currently cached user of the application.
+	 *
+	 * @return \Illuminate\Auth\UserInterface|null
+	 */
+	public function getUser()
+	{
+		return $this->user;
+	}
+
+	/**
+	 * Set the current user of the application.
+	 *
+	 * @param  \Illuminate\Auth\UserInterface  $user
+	 * @return void
+	 */
+	public function setUser(UserInterface $user)
+	{
+		$this->user = $user;
+
+		$this->loggedOut = false;
+	}
+
+	/**
+	 * Get the current request instance.
+	 *
+	 * @return \Symfony\Component\HttpFoundation\Request
+	 */
+	public function getRequest()
+	{
+		return $this->request ?: Request::createFromGlobals();
+	}
+
+	/**
+	 * Set the current request instance.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request
+	 * @return $this
+	 */
+	public function setRequest(Request $request)
+	{
+		$this->request = $request;
+
+		return $this;
+	}
+
+	/**
+	 * Get the last user we attempted to authenticate.
+	 *
+	 * @return \Illuminate\Auth\UserInterface
+	 */
+	public function getLastAttempted()
+	{
+		return $this->lastAttempted;
+	}
+
+	/**
+	 * Get a unique identifier for the auth session value.
+	 *
+	 * @return string
+	 */
+	public function getName()
+	{
+		return 'login_'.md5(get_class($this));
+	}
+
+	/**
+	 * Get the name of the cookie used to store the "recaller".
+	 *
+	 * @return string
+	 */
+	public function getRecallerName()
+	{
+		return 'remember_'.md5(get_class($this));
+	}
+
+	/**
+	 * Determine if the user was authenticated via "remember me" cookie.
+	 *
+	 * @return bool
+	 */
+	public function viaRemember()
+	{
+		return $this->viaRemember;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/Reminders/DatabaseReminderRepository.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Reminders/DatabaseReminderRepository.php b/vendor/laravel/framework/src/Illuminate/Auth/Reminders/DatabaseReminderRepository.php
new file mode 100755
index 0000000..dd1f5f1
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/Reminders/DatabaseReminderRepository.php
@@ -0,0 +1,195 @@
+<?php namespace Illuminate\Auth\Reminders;
+
+use Carbon\Carbon;
+use Illuminate\Database\Connection;
+
+class DatabaseReminderRepository implements ReminderRepositoryInterface {
+
+	/**
+	 * The database connection instance.
+	 *
+	 * @var \Illuminate\Database\Connection
+	 */
+	protected $connection;
+
+	/**
+	 * The reminder database table.
+	 *
+	 * @var string
+	 */
+	protected $table;
+
+	/**
+	 * The hashing key.
+	 *
+	 * @var string
+	 */
+	protected $hashKey;
+
+	/**
+	 * The number of seconds a reminder should last.
+	 *
+	 * @var int
+	 */
+	protected $expires;
+
+	/**
+	 * Create a new reminder repository instance.
+	 *
+	 * @param  \Illuminate\Database\Connection  $connection
+	 * @param  string  $table
+	 * @param  string  $hashKey
+	 * @param  int  $expires
+	 * @return void
+	 */
+	public function __construct(Connection $connection, $table, $hashKey, $expires = 60)
+	{
+		$this->table = $table;
+		$this->hashKey = $hashKey;
+		$this->expires = $expires * 60;
+		$this->connection = $connection;
+	}
+
+	/**
+	 * Create a new reminder record and token.
+	 *
+	 * @param  \Illuminate\Auth\Reminders\RemindableInterface  $user
+	 * @return string
+	 */
+	public function create(RemindableInterface $user)
+	{
+		$email = $user->getReminderEmail();
+
+		$this->deleteExisting($user);
+
+		// We will create a new, random token for the user so that we can e-mail them
+		// a safe link to the password reset form. Then we will insert a record in
+		// the database so that we can verify the token within the actual reset.
+		$token = $this->createNewToken($user);
+
+		$this->getTable()->insert($this->getPayload($email, $token));
+
+		return $token;
+	}
+
+	/**
+	 * Delete all existing reset tokens from the database.
+	 *
+	 * @param  \Illuminate\Auth\Reminders\RemindableInterface  $user
+	 * @return int
+	 */
+	protected function deleteExisting(RemindableInterface $user)
+	{
+		return $this->getTable()->where('email', $user->getReminderEmail())->delete();
+	}
+
+	/**
+	 * Build the record payload for the table.
+	 *
+	 * @param  string  $email
+	 * @param  string  $token
+	 * @return array
+	 */
+	protected function getPayload($email, $token)
+	{
+		return array('email' => $email, 'token' => $token, 'created_at' => new Carbon);
+	}
+
+	/**
+	 * Determine if a reminder record exists and is valid.
+	 *
+	 * @param  \Illuminate\Auth\Reminders\RemindableInterface  $user
+	 * @param  string  $token
+	 * @return bool
+	 */
+	public function exists(RemindableInterface $user, $token)
+	{
+		$email = $user->getReminderEmail();
+
+		$reminder = (array) $this->getTable()->where('email', $email)->where('token', $token)->first();
+
+		return $reminder && ! $this->reminderExpired($reminder);
+	}
+
+	/**
+	 * Determine if the reminder has expired.
+	 *
+	 * @param  array  $reminder
+	 * @return bool
+	 */
+	protected function reminderExpired($reminder)
+	{
+		$createdPlusHour = strtotime($reminder['created_at']) + $this->expires;
+
+		return $createdPlusHour < $this->getCurrentTime();
+	}
+
+	/**
+	 * Get the current UNIX timestamp.
+	 *
+	 * @return int
+	 */
+	protected function getCurrentTime()
+	{
+		return time();
+	}
+
+	/**
+	 * Delete a reminder record by token.
+	 *
+	 * @param  string  $token
+	 * @return void
+	 */
+	public function delete($token)
+	{
+		$this->getTable()->where('token', $token)->delete();
+	}
+
+	/**
+	 * Delete expired reminders.
+	 *
+	 * @return void
+	 */
+	public function deleteExpired()
+	{
+		$expired = Carbon::now()->subSeconds($this->expires);
+
+		$this->getTable()->where('created_at', '<', $expired)->delete();
+	}
+
+	/**
+	 * Create a new token for the user.
+	 *
+	 * @param  \Illuminate\Auth\Reminders\RemindableInterface  $user
+	 * @return string
+	 */
+	public function createNewToken(RemindableInterface $user)
+	{
+		$email = $user->getReminderEmail();
+
+		$value = str_shuffle(sha1($email.spl_object_hash($this).microtime(true)));
+
+		return hash_hmac('sha1', $value, $this->hashKey);
+	}
+
+	/**
+	 * Begin a new database query against the table.
+	 *
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	protected function getTable()
+	{
+		return $this->connection->table($this->table);
+	}
+
+	/**
+	 * Get the database connection instance.
+	 *
+	 * @return \Illuminate\Database\Connection
+	 */
+	public function getConnection()
+	{
+		return $this->connection;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/Reminders/PasswordBroker.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Reminders/PasswordBroker.php b/vendor/laravel/framework/src/Illuminate/Auth/Reminders/PasswordBroker.php
new file mode 100755
index 0000000..c285c87
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/Reminders/PasswordBroker.php
@@ -0,0 +1,282 @@
+<?php namespace Illuminate\Auth\Reminders;
+
+use Closure;
+use Illuminate\Mail\Mailer;
+use Illuminate\Auth\UserProviderInterface;
+
+class PasswordBroker {
+
+	/**
+	 * Constant representing a successfully sent reminder.
+	 *
+	 * @var int
+	 */
+	const REMINDER_SENT = 'reminders.sent';
+
+	/**
+	 * Constant representing a successfully reset password.
+	 *
+	 * @var int
+	 */
+	const PASSWORD_RESET = 'reminders.reset';
+
+	/**
+	 * Constant representing the user not found response.
+	 *
+	 * @var int
+	 */
+	const INVALID_USER = 'reminders.user';
+
+	/**
+	 * Constant representing an invalid password.
+	 *
+	 * @var int
+	 */
+	const INVALID_PASSWORD = 'reminders.password';
+
+	/**
+	 * Constant representing an invalid token.
+	 *
+	 * @var int
+	 */
+	const INVALID_TOKEN = 'reminders.token';
+
+	/**
+	 * The password reminder repository.
+	 *
+	 * @var \Illuminate\Auth\Reminders\ReminderRepositoryInterface  $reminders
+	 */
+	protected $reminders;
+
+	/**
+	 * The user provider implementation.
+	 *
+	 * @var \Illuminate\Auth\UserProviderInterface
+	 */
+	protected $users;
+
+	/**
+	 * The mailer instance.
+	 *
+	 * @var \Illuminate\Mail\Mailer
+	 */
+	protected $mailer;
+
+	/**
+	 * The view of the password reminder e-mail.
+	 *
+	 * @var string
+	 */
+	protected $reminderView;
+
+	/**
+	 * The custom password validator callback.
+	 *
+	 * @var \Closure
+	 */
+	protected $passwordValidator;
+
+	/**
+	 * Create a new password broker instance.
+	 *
+	 * @param  \Illuminate\Auth\Reminders\ReminderRepositoryInterface  $reminders
+	 * @param  \Illuminate\Auth\UserProviderInterface  $users
+	 * @param  \Illuminate\Mail\Mailer  $mailer
+	 * @param  string  $reminderView
+	 * @return void
+	 */
+	public function __construct(ReminderRepositoryInterface $reminders,
+                                UserProviderInterface $users,
+                                Mailer $mailer,
+                                $reminderView)
+	{
+		$this->users = $users;
+		$this->mailer = $mailer;
+		$this->reminders = $reminders;
+		$this->reminderView = $reminderView;
+	}
+
+	/**
+	 * Send a password reminder to a user.
+	 *
+	 * @param  array     $credentials
+	 * @param  \Closure  $callback
+	 * @return string
+	 */
+	public function remind(array $credentials, Closure $callback = null)
+	{
+		// First we will check to see if we found a user at the given credentials and
+		// if we did not we will redirect back to this current URI with a piece of
+		// "flash" data in the session to indicate to the developers the errors.
+		$user = $this->getUser($credentials);
+
+		if (is_null($user))
+		{
+			return self::INVALID_USER;
+		}
+
+		// Once we have the reminder token, we are ready to send a message out to the
+		// user with a link to reset their password. We will then redirect back to
+		// the current URI having nothing set in the session to indicate errors.
+		$token = $this->reminders->create($user);
+
+		$this->sendReminder($user, $token, $callback);
+
+		return self::REMINDER_SENT;
+	}
+
+	/**
+	 * Send the password reminder e-mail.
+	 *
+	 * @param  \Illuminate\Auth\Reminders\RemindableInterface  $user
+	 * @param  string    $token
+	 * @param  \Closure  $callback
+	 * @return int
+	 */
+	public function sendReminder(RemindableInterface $user, $token, Closure $callback = null)
+	{
+		// We will use the reminder view that was given to the broker to display the
+		// password reminder e-mail. We'll pass a "token" variable into the views
+		// so that it may be displayed for an user to click for password reset.
+		$view = $this->reminderView;
+
+		return $this->mailer->send($view, compact('token', 'user'), function($m) use ($user, $token, $callback)
+		{
+			$m->to($user->getReminderEmail());
+
+			if ( ! is_null($callback)) call_user_func($callback, $m, $user, $token);
+		});
+	}
+
+	/**
+	 * Reset the password for the given token.
+	 *
+	 * @param  array     $credentials
+	 * @param  \Closure  $callback
+	 * @return mixed
+	 */
+	public function reset(array $credentials, Closure $callback)
+	{
+		// If the responses from the validate method is not a user instance, we will
+		// assume that it is a redirect and simply return it from this method and
+		// the user is properly redirected having an error message on the post.
+		$user = $this->validateReset($credentials);
+
+		if ( ! $user instanceof RemindableInterface)
+		{
+			return $user;
+		}
+
+		$pass = $credentials['password'];
+
+		// Once we have called this callback, we will remove this token row from the
+		// table and return the response from this callback so the user gets sent
+		// to the destination given by the developers from the callback return.
+		call_user_func($callback, $user, $pass);
+
+		$this->reminders->delete($credentials['token']);
+
+		return self::PASSWORD_RESET;
+	}
+
+	/**
+	 * Validate a password reset for the given credentials.
+	 *
+	 * @param  array  $credentials
+	 * @return \Illuminate\Auth\Reminders\RemindableInterface
+	 */
+	protected function validateReset(array $credentials)
+	{
+		if (is_null($user = $this->getUser($credentials)))
+		{
+			return self::INVALID_USER;
+		}
+
+		if ( ! $this->validNewPasswords($credentials))
+		{
+			return self::INVALID_PASSWORD;
+		}
+
+		if ( ! $this->reminders->exists($user, $credentials['token']))
+		{
+			return self::INVALID_TOKEN;
+		}
+
+		return $user;
+	}
+
+	/**
+	 * Set a custom password validator.
+	 *
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function validator(Closure $callback)
+	{
+		$this->passwordValidator = $callback;
+	}
+
+	/**
+	 * Determine if the passwords match for the request.
+	 *
+	 * @param  array  $credentials
+	 * @return bool
+	 */
+	protected function validNewPasswords(array $credentials)
+	{
+		list($password, $confirm) = array($credentials['password'], $credentials['password_confirmation']);
+
+		if (isset($this->passwordValidator))
+		{
+			return call_user_func($this->passwordValidator, $credentials) && $password === $confirm;
+		}
+
+		return $this->validatePasswordWithDefaults($credentials);
+	}
+
+	/**
+	 * Determine if the passwords are valid for the request.
+	 *
+	 * @param  array  $credentials
+	 * @return bool
+	 */
+	protected function validatePasswordWithDefaults(array $credentials)
+	{
+		list($password, $confirm) = [$credentials['password'], $credentials['password_confirmation']];
+
+		return $password === $confirm && mb_strlen($password) >= 6;
+	}
+
+	/**
+	 * Get the user for the given credentials.
+	 *
+	 * @param  array  $credentials
+	 * @return \Illuminate\Auth\Reminders\RemindableInterface
+	 *
+	 * @throws \UnexpectedValueException
+	 */
+	public function getUser(array $credentials)
+	{
+		$credentials = array_except($credentials, array('token'));
+
+		$user = $this->users->retrieveByCredentials($credentials);
+
+		if ($user && ! $user instanceof RemindableInterface)
+		{
+			throw new \UnexpectedValueException("User must implement Remindable interface.");
+		}
+
+		return $user;
+	}
+
+	/**
+	 * Get the password reminder repository implementation.
+	 *
+	 * @return \Illuminate\Auth\Reminders\ReminderRepositoryInterface
+	 */
+	protected function getRepository()
+	{
+		return $this->reminders;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/Reminders/RemindableInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Reminders/RemindableInterface.php b/vendor/laravel/framework/src/Illuminate/Auth/Reminders/RemindableInterface.php
new file mode 100755
index 0000000..645fa87
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/Reminders/RemindableInterface.php
@@ -0,0 +1,12 @@
+<?php namespace Illuminate\Auth\Reminders;
+
+interface RemindableInterface {
+
+	/**
+	 * Get the e-mail address where password reminders are sent.
+	 *
+	 * @return string
+	 */
+	public function getReminderEmail();
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/Reminders/RemindableTrait.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Reminders/RemindableTrait.php b/vendor/laravel/framework/src/Illuminate/Auth/Reminders/RemindableTrait.php
new file mode 100644
index 0000000..9acd859
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/Reminders/RemindableTrait.php
@@ -0,0 +1,15 @@
+<?php namespace Illuminate\Auth\Reminders;
+
+trait RemindableTrait {
+
+	/**
+	 * Get the e-mail address where password reminders are sent.
+	 *
+	 * @return string
+	 */
+	public function getReminderEmail()
+	{
+		return $this->email;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/Reminders/ReminderRepositoryInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Reminders/ReminderRepositoryInterface.php b/vendor/laravel/framework/src/Illuminate/Auth/Reminders/ReminderRepositoryInterface.php
new file mode 100755
index 0000000..18c91d0
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/Reminders/ReminderRepositoryInterface.php
@@ -0,0 +1,37 @@
+<?php namespace Illuminate\Auth\Reminders;
+
+interface ReminderRepositoryInterface {
+
+	/**
+	 * Create a new reminder record and token.
+	 *
+	 * @param  \Illuminate\Auth\Reminders\RemindableInterface  $user
+	 * @return string
+	 */
+	public function create(RemindableInterface $user);
+
+	/**
+	 * Determine if a reminder record exists and is valid.
+	 *
+	 * @param  \Illuminate\Auth\Reminders\RemindableInterface  $user
+	 * @param  string  $token
+	 * @return bool
+	 */
+	public function exists(RemindableInterface $user, $token);
+
+	/**
+	 * Delete a reminder record by token.
+	 *
+	 * @param  string  $token
+	 * @return void
+	 */
+	public function delete($token);
+
+	/**
+	 * Delete expired reminders.
+	 *
+	 * @return void
+	 */
+	public function deleteExpired();
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/Reminders/ReminderServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Reminders/ReminderServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Auth/Reminders/ReminderServiceProvider.php
new file mode 100755
index 0000000..dca3c0a
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/Reminders/ReminderServiceProvider.php
@@ -0,0 +1,122 @@
+<?php namespace Illuminate\Auth\Reminders;
+
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Auth\Console\RemindersTableCommand;
+use Illuminate\Auth\Console\ClearRemindersCommand;
+use Illuminate\Auth\Console\RemindersControllerCommand;
+use Illuminate\Auth\Reminders\DatabaseReminderRepository as DbRepository;
+
+class ReminderServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->registerPasswordBroker();
+
+		$this->registerReminderRepository();
+
+		$this->registerCommands();
+	}
+
+	/**
+	 * Register the password broker instance.
+	 *
+	 * @return void
+	 */
+	protected function registerPasswordBroker()
+	{
+		$this->app->bindShared('auth.reminder', function($app)
+		{
+			// The reminder repository is responsible for storing the user e-mail addresses
+			// and password reset tokens. It will be used to verify the tokens are valid
+			// for the given e-mail addresses. We will resolve an implementation here.
+			$reminders = $app['auth.reminder.repository'];
+
+			$users = $app['auth']->driver()->getProvider();
+
+			$view = $app['config']['auth.reminder.email'];
+
+			// The password broker uses the reminder repository to validate tokens and send
+			// reminder e-mails, as well as validating that password reset process as an
+			// aggregate service of sorts providing a convenient interface for resets.
+			return new PasswordBroker(
+
+				$reminders, $users, $app['mailer'], $view
+
+			);
+		});
+	}
+
+	/**
+	 * Register the reminder repository implementation.
+	 *
+	 * @return void
+	 */
+	protected function registerReminderRepository()
+	{
+		$this->app->bindShared('auth.reminder.repository', function($app)
+		{
+			$connection = $app['db']->connection();
+
+			// The database reminder repository is an implementation of the reminder repo
+			// interface, and is responsible for the actual storing of auth tokens and
+			// their e-mail addresses. We will inject this table and hash key to it.
+			$table = $app['config']['auth.reminder.table'];
+
+			$key = $app['config']['app.key'];
+
+			$expire = $app['config']->get('auth.reminder.expire', 60);
+
+			return new DbRepository($connection, $table, $key, $expire);
+		});
+	}
+
+	/**
+	 * Register the auth related console commands.
+	 *
+	 * @return void
+	 */
+	protected function registerCommands()
+	{
+		$this->app->bindShared('command.auth.reminders', function($app)
+		{
+			return new RemindersTableCommand($app['files']);
+		});
+
+		$this->app->bindShared('command.auth.reminders.clear', function()
+		{
+			return new ClearRemindersCommand;
+		});
+
+		$this->app->bindShared('command.auth.reminders.controller', function($app)
+		{
+			return new RemindersControllerCommand($app['files']);
+		});
+
+		$this->commands(
+			'command.auth.reminders', 'command.auth.reminders.clear', 'command.auth.reminders.controller'
+		);
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('auth.reminder', 'auth.reminder.repository', 'command.auth.reminders');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/UserInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/UserInterface.php b/vendor/laravel/framework/src/Illuminate/Auth/UserInterface.php
new file mode 100755
index 0000000..b2740a6
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/UserInterface.php
@@ -0,0 +1,41 @@
+<?php namespace Illuminate\Auth;
+
+interface UserInterface {
+
+	/**
+	 * Get the unique identifier for the user.
+	 *
+	 * @return mixed
+	 */
+	public function getAuthIdentifier();
+
+	/**
+	 * Get the password for the user.
+	 *
+	 * @return string
+	 */
+	public function getAuthPassword();
+
+	/**
+	 * Get the token value for the "remember me" session.
+	 *
+	 * @return string
+	 */
+	public function getRememberToken();
+
+	/**
+	 * Set the token value for the "remember me" session.
+	 *
+	 * @param  string  $value
+	 * @return void
+	 */
+	public function setRememberToken($value);
+
+	/**
+	 * Get the column name for the "remember me" token.
+	 *
+	 * @return string
+	 */
+	public function getRememberTokenName();
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/UserProviderInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/UserProviderInterface.php b/vendor/laravel/framework/src/Illuminate/Auth/UserProviderInterface.php
new file mode 100755
index 0000000..742a47c
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/UserProviderInterface.php
@@ -0,0 +1,48 @@
+<?php namespace Illuminate\Auth;
+
+interface UserProviderInterface {
+
+	/**
+	 * Retrieve a user by their unique identifier.
+	 *
+	 * @param  mixed  $identifier
+	 * @return \Illuminate\Auth\UserInterface|null
+	 */
+	public function retrieveById($identifier);
+
+	/**
+	 * Retrieve a user by by their unique identifier and "remember me" token.
+	 *
+	 * @param  mixed   $identifier
+	 * @param  string  $token
+	 * @return \Illuminate\Auth\UserInterface|null
+	 */
+	public function retrieveByToken($identifier, $token);
+
+	/**
+	 * Update the "remember me" token for the given user in storage.
+	 *
+	 * @param  \Illuminate\Auth\UserInterface  $user
+	 * @param  string  $token
+	 * @return void
+	 */
+	public function updateRememberToken(UserInterface $user, $token);
+
+	/**
+	 * Retrieve a user by the given credentials.
+	 *
+	 * @param  array  $credentials
+	 * @return \Illuminate\Auth\UserInterface|null
+	 */
+	public function retrieveByCredentials(array $credentials);
+
+	/**
+	 * Validate a user against the given credentials.
+	 *
+	 * @param  \Illuminate\Auth\UserInterface  $user
+	 * @param  array  $credentials
+	 * @return bool
+	 */
+	public function validateCredentials(UserInterface $user, array $credentials);
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/UserTrait.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/UserTrait.php b/vendor/laravel/framework/src/Illuminate/Auth/UserTrait.php
new file mode 100644
index 0000000..b120fb9
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/UserTrait.php
@@ -0,0 +1,56 @@
+<?php namespace Illuminate\Auth;
+
+trait UserTrait {
+
+	/**
+	 * Get the unique identifier for the user.
+	 *
+	 * @return mixed
+	 */
+	public function getAuthIdentifier()
+	{
+		return $this->getKey();
+	}
+
+	/**
+	 * Get the password for the user.
+	 *
+	 * @return string
+	 */
+	public function getAuthPassword()
+	{
+		return $this->password;
+	}
+
+	/**
+	 * Get the token value for the "remember me" session.
+	 *
+	 * @return string
+	 */
+	public function getRememberToken()
+	{
+		return $this->{$this->getRememberTokenName()};
+	}
+
+	/**
+	 * Set the token value for the "remember me" session.
+	 *
+	 * @param  string  $value
+	 * @return void
+	 */
+	public function setRememberToken($value)
+	{
+		$this->{$this->getRememberTokenName()} = $value;
+	}
+
+	/**
+	 * Get the column name for the "remember me" token.
+	 *
+	 * @return string
+	 */
+	public function getRememberTokenName()
+	{
+		return 'remember_token';
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Auth/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Auth/composer.json b/vendor/laravel/framework/src/Illuminate/Auth/composer.json
new file mode 100755
index 0000000..668ccf6
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Auth/composer.json
@@ -0,0 +1,35 @@
+{
+    "name": "illuminate/auth",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/cookie": "4.2.*",
+        "illuminate/encryption": "4.2.*",
+        "illuminate/events": "4.2.*",
+        "illuminate/hashing": "4.2.*",
+        "illuminate/http": "4.2.*",
+        "illuminate/session": "4.2.*",
+        "illuminate/support": "4.2.*",
+        "nesbot/carbon": "~1.0"
+    },
+    "require-dev": {
+        "illuminate/console": "4.2.*",
+        "illuminate/routing": "4.2.*"
+    },
+    "autoload": {
+        "psr-0": {"Illuminate\\Auth": ""}
+    },
+    "target-dir": "Illuminate/Auth",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/ApcStore.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/ApcStore.php b/vendor/laravel/framework/src/Illuminate/Cache/ApcStore.php
new file mode 100755
index 0000000..7d5c37a
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/ApcStore.php
@@ -0,0 +1,128 @@
+<?php namespace Illuminate\Cache;
+
+class ApcStore extends TaggableStore implements StoreInterface {
+
+	/**
+	 * The APC wrapper instance.
+	 *
+	 * @var \Illuminate\Cache\ApcWrapper
+	 */
+	protected $apc;
+
+	/**
+	 * A string that should be prepended to keys.
+	 *
+	 * @var string
+	 */
+	protected $prefix;
+
+	/**
+	 * Create a new APC store.
+	 *
+	 * @param  \Illuminate\Cache\ApcWrapper  $apc
+	 * @param  string  $prefix
+	 * @return void
+	 */
+	public function __construct(ApcWrapper $apc, $prefix = '')
+	{
+		$this->apc = $apc;
+		$this->prefix = $prefix;
+	}
+
+	/**
+	 * Retrieve an item from the cache by key.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function get($key)
+	{
+		$value = $this->apc->get($this->prefix.$key);
+
+		if ($value !== false)
+		{
+			return $value;
+		}
+	}
+
+	/**
+	 * Store an item in the cache for a given number of minutes.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @param  int     $minutes
+	 * @return void
+	 */
+	public function put($key, $value, $minutes)
+	{
+		$this->apc->put($this->prefix.$key, $value, $minutes * 60);
+	}
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int|bool
+	 */
+	public function increment($key, $value = 1)
+	{
+		return $this->apc->increment($this->prefix.$key, $value);
+	}
+
+	/**
+	 * Decrement the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int|bool
+	 */
+	public function decrement($key, $value = 1)
+	{
+		return $this->apc->decrement($this->prefix.$key, $value);
+	}
+
+	/**
+	 * Store an item in the cache indefinitely.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return array|bool
+	 */
+	public function forever($key, $value)
+	{
+		return $this->put($key, $value, 0);
+	}
+
+	/**
+	 * Remove an item from the cache.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function forget($key)
+	{
+		$this->apc->delete($this->prefix.$key);
+	}
+
+	/**
+	 * Remove all items from the cache.
+	 *
+	 * @return void
+	 */
+	public function flush()
+	{
+		$this->apc->flush();
+	}
+
+	/**
+	 * Get the cache key prefix.
+	 *
+	 * @return string
+	 */
+	public function getPrefix()
+	{
+		return $this->prefix;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/ApcWrapper.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/ApcWrapper.php b/vendor/laravel/framework/src/Illuminate/Cache/ApcWrapper.php
new file mode 100755
index 0000000..9172ba8
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/ApcWrapper.php
@@ -0,0 +1,91 @@
+<?php namespace Illuminate\Cache;
+
+class ApcWrapper {
+
+	/**
+	 * Indicates if APCu is supported.
+	 *
+	 * @var bool
+	 */
+	protected $apcu = false;
+
+	/**
+	 * Create a new APC wrapper instance.
+	 *
+	 * @return void
+	 */
+	public function __construct()
+	{
+		$this->apcu = function_exists('apcu_fetch');
+	}
+
+	/**
+	 * Get an item from the cache.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function get($key)
+	{
+		return $this->apcu ? apcu_fetch($key) : apc_fetch($key);
+	}
+
+	/**
+	 * Store an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @param  int     $seconds
+	 * @return array|bool
+	 */
+	public function put($key, $value, $seconds)
+	{
+		return $this->apcu ? apcu_store($key, $value, $seconds) : apc_store($key, $value, $seconds);
+	}
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int|bool
+	 */
+	public function increment($key, $value)
+	{
+		return $this->apcu ? apcu_inc($key, $value) : apc_inc($key, $value);
+	}
+
+	/**
+	 * Decrement the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int|bool
+	 */
+	public function decrement($key, $value)
+	{
+		return $this->apcu ? apcu_dec($key, $value) : apc_dec($key, $value);
+	}
+
+	/**
+	 * Remove an item from the cache.
+	 *
+	 * @param  string  $key
+	 * @return array|bool
+	 */
+	public function delete($key)
+	{
+		return $this->apcu ? apcu_delete($key) : apc_delete($key);
+	}
+
+	/**
+	 * Remove all items from the cache.
+	 *
+	 * @return void
+	 */
+	public function flush()
+	{
+		$this->apcu ? apcu_clear_cache() : apc_clear_cache('user');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/ArrayStore.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/ArrayStore.php b/vendor/laravel/framework/src/Illuminate/Cache/ArrayStore.php
new file mode 100755
index 0000000..65e82e6
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/ArrayStore.php
@@ -0,0 +1,108 @@
+<?php namespace Illuminate\Cache;
+
+class ArrayStore extends TaggableStore implements StoreInterface {
+
+	/**
+	 * The array of stored values.
+	 *
+	 * @var array
+	 */
+	protected $storage = array();
+
+	/**
+	 * Retrieve an item from the cache by key.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function get($key)
+	{
+		if (array_key_exists($key, $this->storage))
+		{
+			return $this->storage[$key];
+		}
+	}
+
+	/**
+	 * Store an item in the cache for a given number of minutes.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @param  int     $minutes
+	 * @return void
+	 */
+	public function put($key, $value, $minutes)
+	{
+		$this->storage[$key] = $value;
+	}
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int
+	 */
+	public function increment($key, $value = 1)
+	{
+		$this->storage[$key] = $this->storage[$key] + $value;
+
+		return $this->storage[$key];
+	}
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int
+	 */
+	public function decrement($key, $value = 1)
+	{
+		return $this->increment($key, $value * -1);
+	}
+
+	/**
+	 * Store an item in the cache indefinitely.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function forever($key, $value)
+	{
+		return $this->put($key, $value, 0);
+	}
+
+	/**
+	 * Remove an item from the cache.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function forget($key)
+	{
+		unset($this->storage[$key]);
+	}
+
+	/**
+	 * Remove all items from the cache.
+	 *
+	 * @return void
+	 */
+	public function flush()
+	{
+		$this->storage = array();
+	}
+
+	/**
+	 * Get the cache key prefix.
+	 *
+	 * @return string
+	 */
+	public function getPrefix()
+	{
+		return '';
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php b/vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php
new file mode 100755
index 0000000..5ec7526
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php
@@ -0,0 +1,182 @@
+<?php namespace Illuminate\Cache;
+
+use Closure;
+use Illuminate\Support\Manager;
+
+class CacheManager extends Manager {
+
+	/**
+	 * Create an instance of the APC cache driver.
+	 *
+	 * @return \Illuminate\Cache\ApcStore
+	 */
+	protected function createApcDriver()
+	{
+		return $this->repository(new ApcStore(new ApcWrapper, $this->getPrefix()));
+	}
+
+	/**
+	 * Create an instance of the array cache driver.
+	 *
+	 * @return \Illuminate\Cache\ArrayStore
+	 */
+	protected function createArrayDriver()
+	{
+		return $this->repository(new ArrayStore);
+	}
+
+	/**
+	 * Create an instance of the file cache driver.
+	 *
+	 * @return \Illuminate\Cache\FileStore
+	 */
+	protected function createFileDriver()
+	{
+		$path = $this->app['config']['cache.path'];
+
+		return $this->repository(new FileStore($this->app['files'], $path));
+	}
+
+	/**
+	 * Create an instance of the Memcached cache driver.
+	 *
+	 * @return \Illuminate\Cache\MemcachedStore
+	 */
+	protected function createMemcachedDriver()
+	{
+		$servers = $this->app['config']['cache.memcached'];
+
+		$memcached = $this->app['memcached.connector']->connect($servers);
+
+		return $this->repository(new MemcachedStore($memcached, $this->getPrefix()));
+	}
+
+	/**
+	 * Create an instance of the Null cache driver.
+	 *
+	 * @return \Illuminate\Cache\NullStore
+	 */
+	protected function createNullDriver()
+	{
+		return $this->repository(new NullStore);
+	}
+
+	/**
+	 * Create an instance of the WinCache cache driver.
+	 *
+	 * @return \Illuminate\Cache\WinCacheStore
+	 */
+	protected function createWincacheDriver()
+	{
+		return $this->repository(new WinCacheStore($this->getPrefix()));
+	}
+
+	/**
+	 * Create an instance of the XCache cache driver.
+	 *
+	 * @return \Illuminate\Cache\WinCacheStore
+	 */
+	protected function createXcacheDriver()
+	{
+		return $this->repository(new XCacheStore($this->getPrefix()));
+	}
+
+	/**
+	 * Create an instance of the Redis cache driver.
+	 *
+	 * @return \Illuminate\Cache\RedisStore
+	 */
+	protected function createRedisDriver()
+	{
+		$redis = $this->app['redis'];
+
+		return $this->repository(new RedisStore($redis, $this->getPrefix()));
+	}
+
+	/**
+	 * Create an instance of the database cache driver.
+	 *
+	 * @return \Illuminate\Cache\DatabaseStore
+	 */
+	protected function createDatabaseDriver()
+	{
+		$connection = $this->getDatabaseConnection();
+
+		$encrypter = $this->app['encrypter'];
+
+		// We allow the developer to specify which connection and table should be used
+		// to store the cached items. We also need to grab a prefix in case a table
+		// is being used by multiple applications although this is very unlikely.
+		$table = $this->app['config']['cache.table'];
+
+		$prefix = $this->getPrefix();
+
+		return $this->repository(new DatabaseStore($connection, $encrypter, $table, $prefix));
+	}
+
+	/**
+	 * Get the database connection for the database driver.
+	 *
+	 * @return \Illuminate\Database\Connection
+	 */
+	protected function getDatabaseConnection()
+	{
+		$connection = $this->app['config']['cache.connection'];
+
+		return $this->app['db']->connection($connection);
+	}
+
+	/**
+	 * Get the cache "prefix" value.
+	 *
+	 * @return string
+	 */
+	public function getPrefix()
+	{
+		return $this->app['config']['cache.prefix'];
+	}
+
+	/**
+	 * Set the cache "prefix" value.
+	 *
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function setPrefix($name)
+	{
+		$this->app['config']['cache.prefix'] = $name;
+	}
+
+	/**
+	 * Create a new cache repository with the given implementation.
+	 *
+	 * @param  \Illuminate\Cache\StoreInterface  $store
+	 * @return \Illuminate\Cache\Repository
+	 */
+	protected function repository(StoreInterface $store)
+	{
+		return new Repository($store);
+	}
+
+	/**
+	 * Get the default cache driver name.
+	 *
+	 * @return string
+	 */
+	public function getDefaultDriver()
+	{
+		return $this->app['config']['cache.driver'];
+	}
+
+	/**
+	 * Set the default cache driver name.
+	 *
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function setDefaultDriver($name)
+	{
+		$this->app['config']['cache.driver'] = $name;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php
new file mode 100755
index 0000000..4dee848
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php
@@ -0,0 +1,71 @@
+<?php namespace Illuminate\Cache;
+
+use Illuminate\Support\ServiceProvider;
+
+class CacheServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('cache', function($app)
+		{
+			return new CacheManager($app);
+		});
+
+		$this->app->bindShared('cache.store', function($app)
+		{
+			return $app['cache']->driver();
+		});
+
+		$this->app->bindShared('memcached.connector', function()
+		{
+			return new MemcachedConnector;
+		});
+
+		$this->registerCommands();
+	}
+
+	/**
+	 * Register the cache related console commands.
+	 *
+	 * @return void
+	 */
+	public function registerCommands()
+	{
+		$this->app->bindShared('command.cache.clear', function($app)
+		{
+			return new Console\ClearCommand($app['cache'], $app['files']);
+		});
+
+		$this->app->bindShared('command.cache.table', function($app)
+		{
+			return new Console\CacheTableCommand($app['files']);
+		});
+
+		$this->commands('command.cache.clear', 'command.cache.table');
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return [
+			'cache', 'cache.store', 'memcached.connector', 'command.cache.clear', 'command.cache.table'
+		];
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/Console/CacheTableCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/Console/CacheTableCommand.php b/vendor/laravel/framework/src/Illuminate/Cache/Console/CacheTableCommand.php
new file mode 100644
index 0000000..30daba8
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/Console/CacheTableCommand.php
@@ -0,0 +1,72 @@
+<?php namespace Illuminate\Cache\Console;
+
+use Illuminate\Console\Command;
+use Illuminate\Filesystem\Filesystem;
+
+class CacheTableCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'cache:table';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Create a migration for the cache database table';
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * Create a new session table command instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @return void
+	 */
+	public function __construct(Filesystem $files)
+	{
+		parent::__construct();
+
+		$this->files = $files;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$fullPath = $this->createBaseMigration();
+
+		$this->files->put($fullPath, $this->files->get(__DIR__.'/stubs/cache.stub'));
+
+		$this->info('Migration created successfully!');
+
+		$this->call('dump-autoload');
+	}
+
+	/**
+	 * Create a base migration file for the table.
+	 *
+	 * @return string
+	 */
+	protected function createBaseMigration()
+	{
+		$name = 'create_cache_table';
+
+		$path = $this->laravel['path'].'/database/migrations';
+
+		return $this->laravel['migration.creator']->create($name, $path);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/Console/ClearCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/Console/ClearCommand.php b/vendor/laravel/framework/src/Illuminate/Cache/Console/ClearCommand.php
new file mode 100755
index 0000000..9f1de3a
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/Console/ClearCommand.php
@@ -0,0 +1,70 @@
+<?php namespace Illuminate\Cache\Console;
+
+use Illuminate\Console\Command;
+use Illuminate\Cache\CacheManager;
+use Illuminate\Filesystem\Filesystem;
+
+class ClearCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'cache:clear';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = "Flush the application cache";
+
+	/**
+	 * The cache manager instance.
+	 *
+	 * @var \Illuminate\Cache\CacheManager
+	 */
+	protected $cache;
+
+	/**
+	 * The file system instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * Create a new cache clear command instance.
+	 *
+	 * @param  \Illuminate\Cache\CacheManager  $cache
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @return void
+	 */
+	public function __construct(CacheManager $cache, Filesystem $files)
+	{
+		parent::__construct();
+
+		$this->cache = $cache;
+		$this->files = $files;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$this->laravel['events']->fire('cache:clearing');
+
+		$this->cache->flush();
+
+		$this->files->delete($this->laravel['config']['app.manifest'].'/services.json');
+
+		$this->laravel['events']->fire('cache:cleared');
+
+		$this->info('Application cache cleared!');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/Console/stubs/cache.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/Console/stubs/cache.stub b/vendor/laravel/framework/src/Illuminate/Cache/Console/stubs/cache.stub
new file mode 100644
index 0000000..8ba4467
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/Console/stubs/cache.stub
@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreateCacheTable extends Migration {
+
+	/**
+	 * Run the migrations.
+	 *
+	 * @return void
+	 */
+	public function up()
+	{
+		Schema::create('cache', function(Blueprint $table)
+		{
+			$table->string('key')->unique();
+			$table->text('value');
+			$table->integer('expiration');
+		});
+	}
+
+	/**
+	 * Reverse the migrations.
+	 *
+	 * @return void
+	 */
+	public function down()
+	{
+		Schema::drop('cache');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/DatabaseStore.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/DatabaseStore.php b/vendor/laravel/framework/src/Illuminate/Cache/DatabaseStore.php
new file mode 100755
index 0000000..bc2323f
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/DatabaseStore.php
@@ -0,0 +1,223 @@
+<?php namespace Illuminate\Cache;
+
+use Illuminate\Database\Connection;
+use Illuminate\Encryption\Encrypter;
+
+class DatabaseStore implements StoreInterface {
+
+	/**
+	 * The database connection instance.
+	 *
+	 * @var \Illuminate\Database\Connection
+	 */
+	protected $connection;
+
+	/**
+	 * The encrypter instance.
+	 *
+	 * @var \Illuminate\Encryption\Encrypter
+	 */
+	protected $encrypter;
+
+	/**
+	 * The name of the cache table.
+	 *
+	 * @var string
+	 */
+	protected $table;
+
+	/**
+	 * A string that should be prepended to keys.
+	 *
+	 * @var string
+	 */
+	protected $prefix;
+
+	/**
+	 * Create a new database store.
+	 *
+	 * @param  \Illuminate\Database\Connection  $connection
+	 * @param  \Illuminate\Encryption\Encrypter  $encrypter
+	 * @param  string  $table
+	 * @param  string  $prefix
+	 * @return void
+	 */
+	public function __construct(Connection $connection, Encrypter $encrypter, $table, $prefix = '')
+	{
+		$this->table = $table;
+		$this->prefix = $prefix;
+		$this->encrypter = $encrypter;
+		$this->connection = $connection;
+	}
+
+	/**
+	 * Retrieve an item from the cache by key.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function get($key)
+	{
+		$prefixed = $this->prefix.$key;
+
+		$cache = $this->table()->where('key', '=', $prefixed)->first();
+
+		// If we have a cache record we will check the expiration time against current
+		// time on the system and see if the record has expired. If it has, we will
+		// remove the records from the database table so it isn't returned again.
+		if ( ! is_null($cache))
+		{
+			if (is_array($cache)) $cache = (object) $cache;
+
+			if (time() >= $cache->expiration)
+			{
+				$this->forget($key);
+
+				return null;
+			}
+
+			return $this->encrypter->decrypt($cache->value);
+		}
+	}
+
+	/**
+	 * Store an item in the cache for a given number of minutes.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @param  int     $minutes
+	 * @return void
+	 */
+	public function put($key, $value, $minutes)
+	{
+		$key = $this->prefix.$key;
+
+		// All of the cached values in the database are encrypted in case this is used
+		// as a session data store by the consumer. We'll also calculate the expire
+		// time and place that on the table so we will check it on our retrieval.
+		$value = $this->encrypter->encrypt($value);
+
+		$expiration = $this->getTime() + ($minutes * 60);
+
+		try
+		{
+			$this->table()->insert(compact('key', 'value', 'expiration'));
+		}
+		catch (\Exception $e)
+		{
+			$this->table()->where('key', '=', $key)->update(compact('value', 'expiration'));
+		}
+	}
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 *
+	 * @throws \LogicException
+	 */
+	public function increment($key, $value = 1)
+	{
+		throw new \LogicException("Increment operations not supported by this driver.");
+	}
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 *
+	 * @throws \LogicException
+	 */
+	public function decrement($key, $value = 1)
+	{
+		throw new \LogicException("Decrement operations not supported by this driver.");
+	}
+
+	/**
+	 * Get the current system time.
+	 *
+	 * @return int
+	 */
+	protected function getTime()
+	{
+		return time();
+	}
+
+	/**
+	 * Store an item in the cache indefinitely.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function forever($key, $value)
+	{
+		return $this->put($key, $value, 5256000);
+	}
+
+	/**
+	 * Remove an item from the cache.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function forget($key)
+	{
+		$this->table()->where('key', '=', $this->prefix.$key)->delete();
+	}
+
+	/**
+	 * Remove all items from the cache.
+	 *
+	 * @return void
+	 */
+	public function flush()
+	{
+		$this->table()->delete();
+	}
+
+	/**
+	 * Get a query builder for the cache table.
+	 *
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	protected function table()
+	{
+		return $this->connection->table($this->table);
+	}
+
+	/**
+	 * Get the underlying database connection.
+	 *
+	 * @return \Illuminate\Database\Connection
+	 */
+	public function getConnection()
+	{
+		return $this->connection;
+	}
+
+	/**
+	 * Get the encrypter instance.
+	 *
+	 * @return \Illuminate\Encryption\Encrypter
+	 */
+	public function getEncrypter()
+	{
+		return $this->encrypter;
+	}
+
+	/**
+	 * Get the cache key prefix.
+	 *
+	 * @return string
+	 */
+	public function getPrefix()
+	{
+		return $this->prefix;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php b/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php
new file mode 100755
index 0000000..dc97b5c
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php
@@ -0,0 +1,257 @@
+<?php namespace Illuminate\Cache;
+
+use Illuminate\Filesystem\Filesystem;
+
+class FileStore implements StoreInterface {
+
+	/**
+	 * The Illuminate Filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * The file cache directory
+	 *
+	 * @var string
+	 */
+	protected $directory;
+
+	/**
+	 * Create a new file cache store instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @param  string  $directory
+	 * @return void
+	 */
+	public function __construct(Filesystem $files, $directory)
+	{
+		$this->files = $files;
+		$this->directory = $directory;
+	}
+
+	/**
+	 * Retrieve an item from the cache by key.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function get($key)
+	{
+		return array_get($this->getPayload($key), 'data');
+	}
+
+	/**
+	 * Retrieve an item and expiry time from the cache by key.
+	 *
+	 * @param  string  $key
+	 * @return array
+	 */
+	protected function getPayload($key)
+	{
+		$path = $this->path($key);
+
+		// If the file doesn't exists, we obviously can't return the cache so we will
+		// just return null. Otherwise, we'll get the contents of the file and get
+		// the expiration UNIX timestamps from the start of the file's contents.
+		if ( ! $this->files->exists($path))
+		{
+			return array('data' => null, 'time' => null);
+		}
+
+		try
+		{
+			$expire = substr($contents = $this->files->get($path), 0, 10);
+		}
+		catch (\Exception $e)
+		{
+			return array('data' => null, 'time' => null);
+		}
+
+		// If the current time is greater than expiration timestamps we will delete
+		// the file and return null. This helps clean up the old files and keeps
+		// this directory much cleaner for us as old files aren't hanging out.
+		if (time() >= $expire)
+		{
+			$this->forget($key);
+
+			return array('data' => null, 'time' => null);
+		}
+
+		$data = unserialize(substr($contents, 10));
+
+		// Next, we'll extract the number of minutes that are remaining for a cache
+		// so that we can properly retain the time for things like the increment
+		// operation that may be performed on the cache. We'll round this out.
+		$time = ceil(($expire - time()) / 60);
+
+		return compact('data', 'time');
+	}
+
+	/**
+	 * Store an item in the cache for a given number of minutes.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @param  int     $minutes
+	 * @return void
+	 */
+	public function put($key, $value, $minutes)
+	{
+		$value = $this->expiration($minutes).serialize($value);
+
+		$this->createCacheDirectory($path = $this->path($key));
+
+		$this->files->put($path, $value);
+	}
+
+	/**
+	 * Create the file cache directory if necessary.
+	 *
+	 * @param  string  $path
+	 * @return void
+	 */
+	protected function createCacheDirectory($path)
+	{
+		try
+		{
+			$this->files->makeDirectory(dirname($path), 0777, true, true);
+		}
+		catch (\Exception $e)
+		{
+			//
+		}
+	}
+
+	/**
+	 * Increment the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int
+	 */
+	public function increment($key, $value = 1)
+	{
+		$raw = $this->getPayload($key);
+
+		$int = ((int) $raw['data']) + $value;
+
+		$this->put($key, $int, (int) $raw['time']);
+
+		return $int;
+	}
+
+	/**
+	 * Decrement the value of an item in the cache.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return int
+	 */
+	public function decrement($key, $value = 1)
+	{
+		return $this->increment($key, $value * -1);
+	}
+
+	/**
+	 * Store an item in the cache indefinitely.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $value
+	 * @return void
+	 */
+	public function forever($key, $value)
+	{
+		return $this->put($key, $value, 0);
+	}
+
+	/**
+	 * Remove an item from the cache.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function forget($key)
+	{
+		$file = $this->path($key);
+
+		if ($this->files->exists($file))
+		{
+			$this->files->delete($file);
+		}
+	}
+
+	/**
+	 * Remove all items from the cache.
+	 *
+	 * @return void
+	 */
+	public function flush()
+	{
+		if ($this->files->isDirectory($this->directory))
+		{
+			foreach ($this->files->directories($this->directory) as $directory)
+			{
+				$this->files->deleteDirectory($directory);
+			}
+		}
+	}
+
+	/**
+	 * Get the full path for the given cache key.
+	 *
+	 * @param  string  $key
+	 * @return string
+	 */
+	protected function path($key)
+	{
+		$parts = array_slice(str_split($hash = md5($key), 2), 0, 2);
+
+		return $this->directory.'/'.join('/', $parts).'/'.$hash;
+	}
+
+	/**
+	 * Get the expiration time based on the given minutes.
+	 *
+	 * @param  int  $minutes
+	 * @return int
+	 */
+	protected function expiration($minutes)
+	{
+		if ($minutes === 0) return 9999999999;
+
+		return time() + ($minutes * 60);
+	}
+
+	/**
+	 * Get the Filesystem instance.
+	 *
+	 * @return \Illuminate\Filesystem\Filesystem
+	 */
+	public function getFilesystem()
+	{
+		return $this->files;
+	}
+
+	/**
+	 * Get the working directory of the cache.
+	 *
+	 * @return string
+	 */
+	public function getDirectory()
+	{
+		return $this->directory;
+	}
+
+	/**
+	 * Get the cache key prefix.
+	 *
+	 * @return string
+	 */
+	public function getPrefix()
+	{
+		return '';
+	}
+
+}


[50/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/config/app.php
----------------------------------------------------------------------
diff --git a/app/config/app.php b/app/config/app.php
new file mode 100755
index 0000000..39aee38
--- /dev/null
+++ b/app/config/app.php
@@ -0,0 +1,194 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Application Debug Mode
+	|--------------------------------------------------------------------------
+	|
+	| When your application is in debug mode, detailed error messages with
+	| stack traces will be shown on every error that occurs within your
+	| application. If disabled, a simple generic error page is shown.
+	|
+	*/
+
+	'debug' => true,
+
+	/*
+	|--------------------------------------------------------------------------
+	| Application URL
+	|--------------------------------------------------------------------------
+	|
+	| This URL is used by the console to properly generate URLs when using
+	| the Artisan command line tool. You should set this to the root of
+	| your application so that it is used when running Artisan tasks.
+	|
+	*/
+
+	'url' => 'http://localhost',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Application Timezone
+	|--------------------------------------------------------------------------
+	|
+	| Here you may specify the default timezone for your application, which
+	| will be used by the PHP date and date-time functions. We have gone
+	| ahead and set this to a sensible default for you out of the box.
+	|
+	*/
+
+	'timezone' => 'UTC',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Application Locale Configuration
+	|--------------------------------------------------------------------------
+	|
+	| The application locale determines the default locale that will be used
+	| by the translation service provider. You are free to set this value
+	| to any of the locales which will be supported by the application.
+	|
+	*/
+
+	'locale' => 'en',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Application Fallback Locale
+	|--------------------------------------------------------------------------
+	|
+	| The fallback locale determines the locale to use when the current one
+	| is not available. You may change the value to correspond to any of
+	| the language folders that are provided through your application.
+	|
+	*/
+
+	'fallback_locale' => 'en',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Encryption Key
+	|--------------------------------------------------------------------------
+	|
+	| This key is used by the Illuminate encrypter service and should be set
+	| to a random, 32 character string, otherwise these encrypted strings
+	| will not be safe. Please do this before deploying an application!
+	|
+	*/
+
+	'key' => 'tez6xP65a0BGj1ZtX7PPfYhC9OIW9AjS',
+
+	'cipher' => MCRYPT_RIJNDAEL_128,
+
+	/*
+	|--------------------------------------------------------------------------
+	| Autoloaded Service Providers
+	|--------------------------------------------------------------------------
+	|
+	| The service providers listed here will be automatically loaded on the
+	| request to your application. Feel free to add your own services to
+	| this array to grant expanded functionality to your applications.
+	|
+	*/
+
+	'providers' => array(
+
+		'Illuminate\Foundation\Providers\ArtisanServiceProvider',
+		'Illuminate\Auth\AuthServiceProvider',
+		'Illuminate\Cache\CacheServiceProvider',
+		'Illuminate\Session\CommandsServiceProvider',
+		'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider',
+		'Illuminate\Routing\ControllerServiceProvider',
+		'Illuminate\Cookie\CookieServiceProvider',
+		'Illuminate\Database\DatabaseServiceProvider',
+		'Illuminate\Encryption\EncryptionServiceProvider',
+		'Illuminate\Filesystem\FilesystemServiceProvider',
+		'Illuminate\Hashing\HashServiceProvider',
+		'Illuminate\Html\HtmlServiceProvider',
+		'Illuminate\Log\LogServiceProvider',
+		'Illuminate\Mail\MailServiceProvider',
+		'Illuminate\Database\MigrationServiceProvider',
+		'Illuminate\Pagination\PaginationServiceProvider',
+		'Illuminate\Queue\QueueServiceProvider',
+		'Illuminate\Redis\RedisServiceProvider',
+		'Illuminate\Remote\RemoteServiceProvider',
+		'Illuminate\Auth\Reminders\ReminderServiceProvider',
+		'Illuminate\Database\SeedServiceProvider',
+		'Illuminate\Session\SessionServiceProvider',
+		'Illuminate\Translation\TranslationServiceProvider',
+		'Illuminate\Validation\ValidationServiceProvider',
+		'Illuminate\View\ViewServiceProvider',
+		'Illuminate\Workbench\WorkbenchServiceProvider',
+
+	),
+
+	/*
+	|--------------------------------------------------------------------------
+	| Service Provider Manifest
+	|--------------------------------------------------------------------------
+	|
+	| The service provider manifest is used by Laravel to lazy load service
+	| providers which are not needed for each request, as well to keep a
+	| list of all of the services. Here, you may set its storage spot.
+	|
+	*/
+
+	'manifest' => storage_path().'/meta',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Class Aliases
+	|--------------------------------------------------------------------------
+	|
+	| This array of class aliases will be registered when this application
+	| is started. However, feel free to register as many as you wish as
+	| the aliases are "lazy" loaded so they don't hinder performance.
+	|
+	*/
+
+	'aliases' => array(
+
+		'App'             => 'Illuminate\Support\Facades\App',
+		'Artisan'         => 'Illuminate\Support\Facades\Artisan',
+		'Auth'            => 'Illuminate\Support\Facades\Auth',
+		'Blade'           => 'Illuminate\Support\Facades\Blade',
+		'Cache'           => 'Illuminate\Support\Facades\Cache',
+		'ClassLoader'     => 'Illuminate\Support\ClassLoader',
+		'Config'          => 'Illuminate\Support\Facades\Config',
+		'Controller'      => 'Illuminate\Routing\Controller',
+		'Cookie'          => 'Illuminate\Support\Facades\Cookie',
+		'Crypt'           => 'Illuminate\Support\Facades\Crypt',
+		'DB'              => 'Illuminate\Support\Facades\DB',
+		'Eloquent'        => 'Illuminate\Database\Eloquent\Model',
+		'Event'           => 'Illuminate\Support\Facades\Event',
+		'File'            => 'Illuminate\Support\Facades\File',
+		'Form'            => 'Illuminate\Support\Facades\Form',
+		'Hash'            => 'Illuminate\Support\Facades\Hash',
+		'HTML'            => 'Illuminate\Support\Facades\HTML',
+		'Input'           => 'Illuminate\Support\Facades\Input',
+		'Lang'            => 'Illuminate\Support\Facades\Lang',
+		'Log'             => 'Illuminate\Support\Facades\Log',
+		'Mail'            => 'Illuminate\Support\Facades\Mail',
+		'Paginator'       => 'Illuminate\Support\Facades\Paginator',
+		'Password'        => 'Illuminate\Support\Facades\Password',
+		'Queue'           => 'Illuminate\Support\Facades\Queue',
+		'Redirect'        => 'Illuminate\Support\Facades\Redirect',
+		'Redis'           => 'Illuminate\Support\Facades\Redis',
+		'Request'         => 'Illuminate\Support\Facades\Request',
+		'Response'        => 'Illuminate\Support\Facades\Response',
+		'Route'           => 'Illuminate\Support\Facades\Route',
+		'Schema'          => 'Illuminate\Support\Facades\Schema',
+		'Seeder'          => 'Illuminate\Database\Seeder',
+		'Session'         => 'Illuminate\Support\Facades\Session',
+		'SoftDeletingTrait' => 'Illuminate\Database\Eloquent\SoftDeletingTrait',
+		'SSH'             => 'Illuminate\Support\Facades\SSH',
+		'Str'             => 'Illuminate\Support\Str',
+		'URL'             => 'Illuminate\Support\Facades\URL',
+		'Validator'       => 'Illuminate\Support\Facades\Validator',
+		'View'            => 'Illuminate\Support\Facades\View',
+
+	),
+
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/config/app_config.ini
----------------------------------------------------------------------
diff --git a/app/config/app_config.ini b/app/config/app_config.ini
new file mode 100644
index 0000000..d70d26e
--- /dev/null
+++ b/app/config/app_config.ini
@@ -0,0 +1,91 @@
+;--------------------------------------- Identity Server Constants ----------------------
+
+;Admin Role Name
+admin-role-name = "admin"
+;Gateway User Role
+gateway-admin = "Internal/everyone"
+
+;Tenant admin's username
+admin-username = "test@testphprg.scigap.org"
+
+;Tenant admin's password
+admin-password = "testadmin@scigap.org"
+
+;Identity server domain
+server = "idp.scigap.org"
+
+;Identity server web services endpoint
+service-url = "https://idp.scigap.org:7443/services/"
+
+;Gateway Domain Name 
+gateway-id = "default"
+
+;Path the to server certificate file
+cafile-path = "/resources/security/idp_scigap_org.pem"
+
+;Enable HTTPS server verification
+verify-peer = true
+
+;Allow self signed server certificates
+allow-self-signed = false
+
+;--------------------------------------- Airavata Constants ----------------------
+
+
+;development
+airavata-port = 9930;
+airavata-server = 'gw111.iu.xsede.org'
+
+;production
+;airavata-server = 'gw127.iu.xsede.org'
+;airavata-port = 8930; 
+
+airavata-timeout = 100000;
+experiment-data-root = '/../experimentData/'
+ssh-user = 'root'
+data-path = 'file://home/pga/production/experimentData/'
+experiment-data-root-absolute = '/var/www/experimentData/'
+;USER_STORE = 'WSO2','XML','USER_API'
+user-store = "WSO2"
+admin-role = "admin"
+gateway-admin-role = "gateway_admin"
+user-role = "Internal/everyone"
+;identity server roles assigned for Gateway
+gateway-role-prepend = "gateway_"
+gateway-role-admin-append = "_admin"
+req-url = 'https://gw111.iu.xsede.org:8443/credential-store/acs-start-servlet'
+gateway-name = 'PHP-Reference-Gateway'
+email = 'admin@gw120.iu.xsede.org'
+;file size in MB
+server-allowed-file-size = 64
+
+;Credential Store Token
+credential-store-token = "bdc612fe-401e-4684-88e9-317f99409c45"
+
+;----------------------------------------- Experiment Defaults --------------------
+
+;default Queue name 
+queue-name = 'normal'
+;default Node Count
+node-count = '1'
+;default Total Core Count
+total-cpu-count = '4'
+;default Wall Time Limit
+wall-time-limit = '30'
+
+
+user-role = "Internal/everyone"
+;identity server roles assigned for Gateway
+gateway-role-prepend = "gateway_"
+gateway-role-admin-append = "_admin"
+req-url = 'https://gw111.iu.xsede.org:8443/credential-store/acs-start-servlet'
+gateway-name = 'PHP-Reference-Gateway'
+email = 'admin@gw120.iu.xsede.org'
+;file size in MB
+server-allowed-file-size = 64
+
+;Credential Store Token
+credential-store-token = 'bdc612fe-401e-4684-88e9-317f99409c45'
+
+;Advanced Experiment Options available
+advanced-experiment-options = true
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/config/app_config.ini.template
----------------------------------------------------------------------
diff --git a/app/config/app_config.ini.template b/app/config/app_config.ini.template
new file mode 100644
index 0000000..3ec74f0
--- /dev/null
+++ b/app/config/app_config.ini.template
@@ -0,0 +1,74 @@
+;--------------------------------------- Identity Server Constants ----------------------
+
+;Admin Role Name
+admin-role-name = "admin"
+;Gateway User Role
+gateway-admin = "Internal/everyone"
+
+;Tenant admin's username
+admin-username = “$username”
+
+;Tenant admin's password
+admin-password = “$password”
+
+;Identity server domain
+server = "idp.scigap.org"
+
+;Identity server web services endpoint
+service-url = "https://idp.scigap.org:7443/services/"
+
+;Gateway Domain Name 
+gateway-id = “$gatewayname”
+
+;Path the to server certificate file
+cafile-path = "/resources/security/idp_scigap_org.pem"
+
+;Enable HTTPS server verification
+verify-peer = true
+
+;Allow self signed server certificates
+allow-self-signed = false
+
+;--------------------------------------- Airavata Constants ----------------------
+
+
+;development
+airavata-port = 9930;
+airavata-server = 'gw111.iu.xsede.org'
+
+;production
+;airavata-server = 'gw127.iu.xsede.org'
+;airavata-port = 8930; 
+
+airavata-timeout = 100000;
+experiment-data-root = '/../experimentData/'
+ssh-user = 'root'
+data-path = 'file://home/pga/production/experimentData/'
+experiment-data-root-absolute = '/var/www/experimentData/'
+;USER_STORE = 'WSO2','XML','USER_API'
+user-store = "WSO2"
+admin-role = "admin"
+gateway-admin-role = "gateway_admin"
+user-role = "Internal/everyone"
+;identity server roles assigned for Gateway
+gateway-role-prepend = "gateway_"
+gateway-role-admin-append = "_admin"
+req-url = 'https://gw111.iu.xsede.org:8443/credential-store/acs-start-servlet'
+gateway-name = 'PHP-Reference-Gateway'
+email = 'admin@gw120.iu.xsede.org'
+;file size in MB
+server-allowed-file-size = 64
+
+;Credential Store Token
+credential-store-token="811351f3-7484-4931-b354-24881e7963e9"
+
+;----------------------------------------- Experiment Defaults --------------------
+
+;default Queue name 
+queue-name = 'long'
+;default Node Count
+node-count = '1'
+;default Total Core Count
+total-cpu-count = '4'
+;default Wall Time Limit
+wall-time-limit = '30'

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/config/auth.php
----------------------------------------------------------------------
diff --git a/app/config/auth.php b/app/config/auth.php
new file mode 100755
index 0000000..eacbbfa
--- /dev/null
+++ b/app/config/auth.php
@@ -0,0 +1,71 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Default Authentication Driver
+	|--------------------------------------------------------------------------
+	|
+	| This option controls the authentication driver that will be utilized.
+	| This driver manages the retrieval and authentication of the users
+	| attempting to get access to protected areas of your application.
+	|
+	| Supported: "database", "eloquent"
+	|
+	*/
+
+	'driver' => 'eloquent',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Authentication Model
+	|--------------------------------------------------------------------------
+	|
+	| When using the "Eloquent" authentication driver, we need to know which
+	| Eloquent model should be used to retrieve your users. Of course, it
+	| is often just the "User" model but you may use whatever you like.
+	|
+	*/
+
+	'model' => 'User',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Authentication Table
+	|--------------------------------------------------------------------------
+	|
+	| When using the "Database" authentication driver, we need to know which
+	| table should be used to retrieve your users. We have chosen a basic
+	| default value but you may easily change it to any table you like.
+	|
+	*/
+
+	'table' => 'users',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Password Reminder Settings
+	|--------------------------------------------------------------------------
+	|
+	| Here you may set the settings for password reminders, including a view
+	| that should be used as your password reminder e-mail. You will also
+	| be able to set the name of the table that holds the reset tokens.
+	|
+	| The "expire" time is the number of minutes that the reminder should be
+	| considered valid. This security feature keeps tokens short-lived so
+	| they have less time to be guessed. You may change this as needed.
+	|
+	*/
+
+	'reminder' => array(
+
+		'email' => 'emails.auth.reminder',
+
+		'table' => 'password_reminders',
+
+		'expire' => 60,
+
+	),
+
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/config/cache.php
----------------------------------------------------------------------
diff --git a/app/config/cache.php b/app/config/cache.php
new file mode 100755
index 0000000..34e5bf0
--- /dev/null
+++ b/app/config/cache.php
@@ -0,0 +1,89 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Default Cache Driver
+	|--------------------------------------------------------------------------
+	|
+	| This option controls the default cache "driver" that will be used when
+	| using the Caching library. Of course, you may use other drivers any
+	| time you wish. This is the default when another is not specified.
+	|
+	| Supported: "file", "database", "apc", "memcached", "redis", "array"
+	|
+	*/
+
+	'driver' => 'apc',
+
+	/*
+	|--------------------------------------------------------------------------
+	| File Cache Location
+	|--------------------------------------------------------------------------
+	|
+	| When using the "file" cache driver, we need a location where the cache
+	| files may be stored. A sensible default has been specified, but you
+	| are free to change it to any other place on disk that you desire.
+	|
+	*/
+
+	'path' => storage_path().'/cache',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Database Cache Connection
+	|--------------------------------------------------------------------------
+	|
+	| When using the "database" cache driver you may specify the connection
+	| that should be used to store the cached items. When this option is
+	| null the default database connection will be utilized for cache.
+	|
+	*/
+
+	'connection' => null,
+
+	/*
+	|--------------------------------------------------------------------------
+	| Database Cache Table
+	|--------------------------------------------------------------------------
+	|
+	| When using the "database" cache driver we need to know the table that
+	| should be used to store the cached items. A default table name has
+	| been provided but you're free to change it however you deem fit.
+	|
+	*/
+
+	'table' => 'cache',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Memcached Servers
+	|--------------------------------------------------------------------------
+	|
+	| Now you may specify an array of your Memcached servers that should be
+	| used when utilizing the Memcached cache driver. All of the servers
+	| should contain a value for "host", "port", and "weight" options.
+	|
+	*/
+
+	'memcached' => array(
+
+		array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100),
+
+	),
+
+	/*
+	|--------------------------------------------------------------------------
+	| Cache Key Prefix
+	|--------------------------------------------------------------------------
+	|
+	| When utilizing a RAM based store such as APC or Memcached, there might
+	| be other applications utilizing the same cache. So, we'll specify a
+	| value to get prefixed to all our keys so we can avoid collisions.
+	|
+	*/
+
+	'prefix' => 'laravel',
+
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/config/compile.php
----------------------------------------------------------------------
diff --git a/app/config/compile.php b/app/config/compile.php
new file mode 100755
index 0000000..d5e5518
--- /dev/null
+++ b/app/config/compile.php
@@ -0,0 +1,18 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Additional Compiled Classes
+	|--------------------------------------------------------------------------
+	|
+	| Here you may specify additional classes to include in the compiled file
+	| generated by the `artisan optimize` command. These should be classes
+	| that are included on basically every request into the application.
+	|
+	*/
+
+
+
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/config/database.php
----------------------------------------------------------------------
diff --git a/app/config/database.php b/app/config/database.php
new file mode 100755
index 0000000..3498fa8
--- /dev/null
+++ b/app/config/database.php
@@ -0,0 +1,124 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| PDO Fetch Style
+	|--------------------------------------------------------------------------
+	|
+	| By default, database results will be returned as instances of the PHP
+	| stdClass object; however, you may desire to retrieve records in an
+	| array format for simplicity. Here you can tweak the fetch style.
+	|
+	*/
+
+	'fetch' => PDO::FETCH_CLASS,
+
+	/*
+	|--------------------------------------------------------------------------
+	| Default Database Connection Name
+	|--------------------------------------------------------------------------
+	|
+	| Here you may specify which of the database connections below you wish
+	| to use as your default connection for all database work. Of course
+	| you may use many connections at once using the Database library.
+	|
+	*/
+
+	'default' => 'mysql',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Database Connections
+	|--------------------------------------------------------------------------
+	|
+	| Here are each of the database connections setup for your application.
+	| Of course, examples of configuring each database platform that is
+	| supported by Laravel is shown below to make development simple.
+	|
+	|
+	| All database work in Laravel is done through the PHP PDO facilities
+	| so make sure you have the driver for your particular database of
+	| choice installed on your machine before you begin development.
+	|
+	*/
+
+	'connections' => array(
+
+		'sqlite' => array(
+			'driver'   => 'sqlite',
+			'database' => __DIR__.'/../database/production.sqlite',
+			'prefix'   => '',
+		),
+
+		'mysql' => array(
+			'driver'    => 'mysql',
+			'host'      => 'localhost',
+			'database'  => 'forge',
+			'username'  => 'forge',
+			'password'  => '',
+			'charset'   => 'utf8',
+			'collation' => 'utf8_unicode_ci',
+			'prefix'    => '',
+		),
+
+		'pgsql' => array(
+			'driver'   => 'pgsql',
+			'host'     => 'localhost',
+			'database' => 'forge',
+			'username' => 'forge',
+			'password' => '',
+			'charset'  => 'utf8',
+			'prefix'   => '',
+			'schema'   => 'public',
+		),
+
+		'sqlsrv' => array(
+			'driver'   => 'sqlsrv',
+			'host'     => 'localhost',
+			'database' => 'database',
+			'username' => 'root',
+			'password' => '',
+			'prefix'   => '',
+		),
+
+	),
+
+	/*
+	|--------------------------------------------------------------------------
+	| Migration Repository Table
+	|--------------------------------------------------------------------------
+	|
+	| This table keeps track of all the migrations that have already run for
+	| your application. Using this information, we can determine which of
+	| the migrations on disk haven't actually been run in the database.
+	|
+	*/
+
+	'migrations' => 'migrations',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Redis Databases
+	|--------------------------------------------------------------------------
+	|
+	| Redis is an open source, fast, and advanced key-value store that also
+	| provides a richer set of commands than a typical key-value systems
+	| such as APC or Memcached. Laravel makes it easy to dig right in.
+	|
+	*/
+
+	'redis' => array(
+
+		'cluster' => false,
+
+		'default' => array(
+			'host'     => '127.0.0.1',
+			'port'     => 6379,
+			'database' => 0,
+		),
+
+	),
+
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/config/local/app.php
----------------------------------------------------------------------
diff --git a/app/config/local/app.php b/app/config/local/app.php
new file mode 100755
index 0000000..c56fcb9
--- /dev/null
+++ b/app/config/local/app.php
@@ -0,0 +1,18 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Application Debug Mode
+	|--------------------------------------------------------------------------
+	|
+	| When your application is in debug mode, detailed error messages with
+	| stack traces will be shown on every error that occurs within your
+	| application. If disabled, a simple generic error page is shown.
+	|
+	*/
+
+	'debug' => true,
+
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/config/local/database.php
----------------------------------------------------------------------
diff --git a/app/config/local/database.php b/app/config/local/database.php
new file mode 100755
index 0000000..fbcb95a
--- /dev/null
+++ b/app/config/local/database.php
@@ -0,0 +1,47 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Database Connections
+	|--------------------------------------------------------------------------
+	|
+	| Here are each of the database connections setup for your application.
+	| Of course, examples of configuring each database platform that is
+	| supported by Laravel is shown below to make development simple.
+	|
+	|
+	| All database work in Laravel is done through the PHP PDO facilities
+	| so make sure you have the driver for your particular database of
+	| choice installed on your machine before you begin development.
+	|
+	*/
+
+	'connections' => array(
+
+		'mysql' => array(
+			'driver'    => 'mysql',
+			'host'      => 'localhost',
+			'database'  => 'homestead',
+			'username'  => 'homestead',
+			'password'  => 'secret',
+			'charset'   => 'utf8',
+			'collation' => 'utf8_unicode_ci',
+			'prefix'    => '',
+		),
+
+		'pgsql' => array(
+			'driver'   => 'pgsql',
+			'host'     => 'localhost',
+			'database' => 'homestead',
+			'username' => 'homestead',
+			'password' => 'secret',
+			'charset'  => 'utf8',
+			'prefix'   => '',
+			'schema'   => 'public',
+		),
+
+	),
+
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/config/mail.php
----------------------------------------------------------------------
diff --git a/app/config/mail.php b/app/config/mail.php
new file mode 100755
index 0000000..76fd9e4
--- /dev/null
+++ b/app/config/mail.php
@@ -0,0 +1,124 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Mail Driver
+	|--------------------------------------------------------------------------
+	|
+	| Laravel supports both SMTP and PHP's "mail" function as drivers for the
+	| sending of e-mail. You may specify which one you're using throughout
+	| your application here. By default, Laravel is setup for SMTP mail.
+	|
+	| Supported: "smtp", "mail", "sendmail", "mailgun", "mandrill", "log"
+	|
+	*/
+
+	'driver' => 'smtp',
+
+	/*
+	|--------------------------------------------------------------------------
+	| SMTP Host Address
+	|--------------------------------------------------------------------------
+	|
+	| Here you may provide the host address of the SMTP server used by your
+	| applications. A default option is provided that is compatible with
+	| the Mailgun mail service which will provide reliable deliveries.
+	|
+	*/
+
+	'host' => 'smtp.mailgun.org',
+
+	/*
+	|--------------------------------------------------------------------------
+	| SMTP Host Port
+	|--------------------------------------------------------------------------
+	|
+	| This is the SMTP port used by your application to deliver e-mails to
+	| users of the application. Like the host we have set this value to
+	| stay compatible with the Mailgun e-mail application by default.
+	|
+	*/
+
+	'port' => 587,
+
+	/*
+	|--------------------------------------------------------------------------
+	| Global "From" Address
+	|--------------------------------------------------------------------------
+	|
+	| You may wish for all e-mails sent by your application to be sent from
+	| the same address. Here, you may specify a name and address that is
+	| used globally for all e-mails that are sent by your application.
+	|
+	*/
+
+	'from' => array('address' => null, 'name' => null),
+
+	/*
+	|--------------------------------------------------------------------------
+	| E-Mail Encryption Protocol
+	|--------------------------------------------------------------------------
+	|
+	| Here you may specify the encryption protocol that should be used when
+	| the application send e-mail messages. A sensible default using the
+	| transport layer security protocol should provide great security.
+	|
+	*/
+
+	'encryption' => 'tls',
+
+	/*
+	|--------------------------------------------------------------------------
+	| SMTP Server Username
+	|--------------------------------------------------------------------------
+	|
+	| If your SMTP server requires a username for authentication, you should
+	| set it here. This will get used to authenticate with your server on
+	| connection. You may also set the "password" value below this one.
+	|
+	*/
+
+	'username' => null,
+
+	/*
+	|--------------------------------------------------------------------------
+	| SMTP Server Password
+	|--------------------------------------------------------------------------
+	|
+	| Here you may set the password required by your SMTP server to send out
+	| messages from your application. This will be given to the server on
+	| connection so that the application will be able to send messages.
+	|
+	*/
+
+	'password' => null,
+
+	/*
+	|--------------------------------------------------------------------------
+	| Sendmail System Path
+	|--------------------------------------------------------------------------
+	|
+	| When using the "sendmail" driver to send e-mails, we will need to know
+	| the path to where Sendmail lives on this server. A default path has
+	| been provided here, which will work well on most of your systems.
+	|
+	*/
+
+	'sendmail' => '/usr/sbin/sendmail -bs',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Mail "Pretend"
+	|--------------------------------------------------------------------------
+	|
+	| When this option is enabled, e-mail will not actually be sent over the
+	| web and will instead be written to your application's logs files so
+	| you may inspect the message. This is great for local development.
+	|
+	*/
+
+	'pretend' => false,
+
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/config/queue.php
----------------------------------------------------------------------
diff --git a/app/config/queue.php b/app/config/queue.php
new file mode 100755
index 0000000..940a4cd
--- /dev/null
+++ b/app/config/queue.php
@@ -0,0 +1,85 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Default Queue Driver
+	|--------------------------------------------------------------------------
+	|
+	| The Laravel queue API supports a variety of back-ends via an unified
+	| API, giving you convenient access to each back-end using the same
+	| syntax for each one. Here you may set the default queue driver.
+	|
+	| Supported: "sync", "beanstalkd", "sqs", "iron", "redis"
+	|
+	*/
+
+	'default' => 'sync',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Queue Connections
+	|--------------------------------------------------------------------------
+	|
+	| Here you may configure the connection information for each server that
+	| is used by your application. A default configuration has been added
+	| for each back-end shipped with Laravel. You are free to add more.
+	|
+	*/
+
+	'connections' => array(
+
+		'sync' => array(
+			'driver' => 'sync',
+		),
+
+		'beanstalkd' => array(
+			'driver' => 'beanstalkd',
+			'host'   => 'localhost',
+			'queue'  => 'default',
+			'ttr'    => 60,
+		),
+
+		'sqs' => array(
+			'driver' => 'sqs',
+			'key'    => 'your-public-key',
+			'secret' => 'your-secret-key',
+			'queue'  => 'your-queue-url',
+			'region' => 'us-east-1',
+		),
+
+		'iron' => array(
+			'driver'  => 'iron',
+			'host'    => 'mq-aws-us-east-1.iron.io',
+			'token'   => 'your-token',
+			'project' => 'your-project-id',
+			'queue'   => 'your-queue-name',
+			'encrypt' => true,
+		),
+
+		'redis' => array(
+			'driver' => 'redis',
+			'queue'  => 'default',
+		),
+
+	),
+
+	/*
+	|--------------------------------------------------------------------------
+	| Failed Queue Jobs
+	|--------------------------------------------------------------------------
+	|
+	| These options configure the behavior of failed queue job logging so you
+	| can control which database and table are used to store the jobs that
+	| have failed. You may change them to any database / table you wish.
+	|
+	*/
+
+	'failed' => array(
+
+		'database' => 'mysql', 'table' => 'failed_jobs',
+
+	),
+
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/config/remote.php
----------------------------------------------------------------------
diff --git a/app/config/remote.php b/app/config/remote.php
new file mode 100755
index 0000000..2169c43
--- /dev/null
+++ b/app/config/remote.php
@@ -0,0 +1,59 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Default Remote Connection Name
+	|--------------------------------------------------------------------------
+	|
+	| Here you may specify the default connection that will be used for SSH
+	| operations. This name should correspond to a connection name below
+	| in the server list. Each connection will be manually accessible.
+	|
+	*/
+
+	'default' => 'production',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Remote Server Connections
+	|--------------------------------------------------------------------------
+	|
+	| These are the servers that will be accessible via the SSH task runner
+	| facilities of Laravel. This feature radically simplifies executing
+	| tasks on your servers, such as deploying out these applications.
+	|
+	*/
+
+	'connections' => array(
+
+		'production' => array(
+			'host'      => '',
+			'username'  => '',
+			'password'  => '',
+			'key'       => '',
+			'keyphrase' => '',
+			'root'      => '/var/www',
+		),
+
+	),
+
+	/*
+	|--------------------------------------------------------------------------
+	| Remote Server Groups
+	|--------------------------------------------------------------------------
+	|
+	| Here you may list connections under a single group name, which allows
+	| you to easily access all of the servers at once using a short name
+	| that is extremely easy to remember, such as "web" or "database".
+	|
+	*/
+
+	'groups' => array(
+
+		'web' => array('production')
+
+	),
+
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/config/services.php
----------------------------------------------------------------------
diff --git a/app/config/services.php b/app/config/services.php
new file mode 100755
index 0000000..c8aba2a
--- /dev/null
+++ b/app/config/services.php
@@ -0,0 +1,31 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Third Party Services
+	|--------------------------------------------------------------------------
+	|
+	| This file is for storing the credentials for third party services such
+	| as Stripe, Mailgun, Mandrill, and others. This file provides a sane
+	| default location for this type of information, allowing packages
+	| to have a conventional place to find your various credentials.
+	|
+	*/
+
+	'mailgun' => array(
+		'domain' => '',
+		'secret' => '',
+	),
+
+	'mandrill' => array(
+		'secret' => '',
+	),
+
+	'stripe' => array(
+		'model'  => 'User',
+		'secret' => '',
+	),
+
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/config/session.php
----------------------------------------------------------------------
diff --git a/app/config/session.php b/app/config/session.php
new file mode 100755
index 0000000..ae34302
--- /dev/null
+++ b/app/config/session.php
@@ -0,0 +1,140 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Default Session Driver
+	|--------------------------------------------------------------------------
+	|
+	| This option controls the default session "driver" that will be used on
+	| requests. By default, we will use the lightweight native driver but
+	| you may specify any of the other wonderful drivers provided here.
+	|
+	| Supported: "file", "cookie", "database", "apc",
+	|            "memcached", "redis", "array"
+	|
+	*/
+
+	'driver' => 'file',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Session Lifetime
+	|--------------------------------------------------------------------------
+	|
+	| Here you may specify the number of minutes that you wish the session
+	| to be allowed to remain idle before it expires. If you want them
+	| to immediately expire on the browser closing, set that option.
+	|
+	*/
+
+	'lifetime' => 120,
+
+	'expire_on_close' => false,
+
+	/*
+	|--------------------------------------------------------------------------
+	| Session File Location
+	|--------------------------------------------------------------------------
+	|
+	| When using the native session driver, we need a location where session
+	| files may be stored. A default has been set for you but a different
+	| location may be specified. This is only needed for file sessions.
+	|
+	*/
+
+	'files' => storage_path().'/sessions',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Session Database Connection
+	|--------------------------------------------------------------------------
+	|
+	| When using the "database" or "redis" session drivers, you may specify a
+	| connection that should be used to manage these sessions. This should
+	| correspond to a connection in your database configuration options.
+	|
+	*/
+
+	'connection' => null,
+
+	/*
+	|--------------------------------------------------------------------------
+	| Session Database Table
+	|--------------------------------------------------------------------------
+	|
+	| When using the "database" session driver, you may specify the table we
+	| should use to manage the sessions. Of course, a sensible default is
+	| provided for you; however, you are free to change this as needed.
+	|
+	*/
+
+	'table' => 'sessions',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Session Sweeping Lottery
+	|--------------------------------------------------------------------------
+	|
+	| Some session drivers must manually sweep their storage location to get
+	| rid of old sessions from storage. Here are the chances that it will
+	| happen on a given request. By default, the odds are 2 out of 100.
+	|
+	*/
+
+	'lottery' => array(2, 100),
+
+	/*
+	|--------------------------------------------------------------------------
+	| Session Cookie Name
+	|--------------------------------------------------------------------------
+	|
+	| Here you may change the name of the cookie used to identify a session
+	| instance by ID. The name specified here will get used every time a
+	| new session cookie is created by the framework for every driver.
+	|
+	*/
+
+	'cookie' => 'laravel_session',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Session Cookie Path
+	|--------------------------------------------------------------------------
+	|
+	| The session cookie path determines the path for which the cookie will
+	| be regarded as available. Typically, this will be the root path of
+	| your application but you are free to change this when necessary.
+	|
+	*/
+
+	'path' => '/',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Session Cookie Domain
+	|--------------------------------------------------------------------------
+	|
+	| Here you may change the domain of the cookie used to identify a session
+	| in your application. This will determine which domains the cookie is
+	| available to in your application. A sensible default has been set.
+	|
+	*/
+
+	'domain' => null,
+
+	/*
+	|--------------------------------------------------------------------------
+	| HTTPS Only Cookies
+	|--------------------------------------------------------------------------
+	|
+	| By setting this option to true, session cookies will only be sent back
+	| to the server if the browser has a HTTPS connection. This will keep
+	| the cookie from being sent to you if it can not be done securely.
+	|
+	*/
+
+	'secure' => false,
+
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/config/testing/cache.php
----------------------------------------------------------------------
diff --git a/app/config/testing/cache.php b/app/config/testing/cache.php
new file mode 100755
index 0000000..66a8a39
--- /dev/null
+++ b/app/config/testing/cache.php
@@ -0,0 +1,20 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Default Cache Driver
+	|--------------------------------------------------------------------------
+	|
+	| This option controls the default cache "driver" that will be used when
+	| using the Caching library. Of course, you may use other drivers any
+	| time you wish. This is the default when another is not specified.
+	|
+	| Supported: "file", "database", "apc", "memcached", "redis", "array"
+	|
+	*/
+
+	'driver' => 'array',
+
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/config/testing/session.php
----------------------------------------------------------------------
diff --git a/app/config/testing/session.php b/app/config/testing/session.php
new file mode 100755
index 0000000..0364b63
--- /dev/null
+++ b/app/config/testing/session.php
@@ -0,0 +1,21 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Default Session Driver
+	|--------------------------------------------------------------------------
+	|
+	| This option controls the default session "driver" that will be used on
+	| requests. By default, we will use the lightweight native driver but
+	| you may specify any of the other wonderful drivers provided here.
+	|
+	| Supported: "native", "cookie", "database", "apc",
+	|            "memcached", "redis", "array"
+	|
+	*/
+
+	'driver' => 'array',
+
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/config/view.php
----------------------------------------------------------------------
diff --git a/app/config/view.php b/app/config/view.php
new file mode 100755
index 0000000..34b8f38
--- /dev/null
+++ b/app/config/view.php
@@ -0,0 +1,31 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| View Storage Paths
+	|--------------------------------------------------------------------------
+	|
+	| Most templating systems load templates from disk. Here you may specify
+	| an array of paths that should be checked for your views. Of course
+	| the usual Laravel view path has already been registered for you.
+	|
+	*/
+
+	'paths' => array(__DIR__.'/../views'),
+
+	/*
+	|--------------------------------------------------------------------------
+	| Pagination View
+	|--------------------------------------------------------------------------
+	|
+	| This view will be used to render the pagination link output, and can
+	| be easily customized here to show any view you like. A clean view
+	| compatible with Twitter's Bootstrap is given to you by default.
+	|
+	*/
+
+	'pagination' => 'pagination::slider-3',
+
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/config/workbench.php
----------------------------------------------------------------------
diff --git a/app/config/workbench.php b/app/config/workbench.php
new file mode 100755
index 0000000..87c5e38
--- /dev/null
+++ b/app/config/workbench.php
@@ -0,0 +1,31 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Workbench Author Name
+	|--------------------------------------------------------------------------
+	|
+	| When you create new packages via the Artisan "workbench" command your
+	| name is needed to generate the composer.json file for your package.
+	| You may specify it now so it is used for all of your workbenches.
+	|
+	*/
+
+	'name' => '',
+
+	/*
+	|--------------------------------------------------------------------------
+	| Workbench Author E-Mail Address
+	|--------------------------------------------------------------------------
+	|
+	| Like the option above, your e-mail address is used when generating new
+	| workbench packages. The e-mail is placed in your composer.json file
+	| automatically after the package is created by the workbench tool.
+	|
+	*/
+
+	'email' => '',
+
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/controllers/AccountController.php
----------------------------------------------------------------------
diff --git a/app/controllers/AccountController.php b/app/controllers/AccountController.php
new file mode 100755
index 0000000..c80672f
--- /dev/null
+++ b/app/controllers/AccountController.php
@@ -0,0 +1,109 @@
+<?php
+
+class AccountController extends BaseController {
+
+	public function createAccountView()
+	{
+		return View::make('account/create');
+	}
+
+	public function createAccountSubmit()
+	{
+		$rules = array(
+				"username" => "required|min:6",
+				"password" => "required|min:6",
+				"confirm_password" => "required|same:password",
+				"email" => "required",
+		);
+
+		$validator = Validator::make( Input::all(), $rules);
+		if( $validator->fails()){
+			$messages = $validator->messages();
+
+			return Redirect::to("create")
+										->withInput(Input::except('password', 'password_confirm'))
+										->withErrors( $validator);
+		}
+
+        $first_name = $_POST['first_name'];
+        $last_name = $_POST['last_name'];
+        $username = $_POST['username'];
+        $password = $_POST['password'];
+        $confirm_password = $_POST['confirm_password'];
+        $email = $_POST['email'];
+        $organization = $_POST['organization'];
+        $address = $_POST['address'];
+        $country = $_POST['country'];
+        $telephone = $_POST['telephone'];
+        $mobile = $_POST['mobile'];
+        $im = $_POST['im'];
+        $url = $_POST['url'];
+
+        $idStore = new WSISUtilities();
+
+        try
+	    {
+	        $idStore->connect();
+	    }
+	    catch (Exception $e)
+	    {
+	        Utilities::print_error_message('<p>Error connecting to ID store.
+	            Please try again later or report a bug using the link in the Help menu</p>' .
+	            '<p>' . $e->getMessage() . '</p>');
+	    }
+
+        if ($idStore->username_exists($username)) {
+        	return Redirect::to("create")
+										->withInput(Input::except('password', 'password_confirm'))
+										->with("username_exists", true);
+		}
+        else{
+            $idStore->add_user($username, $password, $first_name, $last_name, $email, $organization,
+            $address, $country,$telephone, $mobile, $im, $url);
+            Utilities::print_success_message('New user created!');
+
+            return View::make('home');
+		}
+	}
+
+	public function loginView(){
+		return View::make('account/login');
+	}
+
+	public function loginSubmit(){
+
+        if ( Utilities::form_submitted() ) {
+            $username = $_POST['username'];
+            $password = $_POST['password'];
+            try {
+                if ( Utilities::id_matches_db($username, $password)) {
+                	
+                    Utilities::store_id_in_session($username);
+                    Utilities::print_success_message('Login successful! You will be redirected to your home page shortly.');
+                	$app_config = Utilities::read_config();
+                	Session::put("gateway_id", $app_config["gateway-id"]);
+                	//TODO::If this option is not safe, have to find a better method to send credentials to identity server on every connection.
+                	Session::put("password", $_POST["password"]);
+                	
+                	return Redirect::to( "home");
+
+                } else {
+                	return Redirect::to("login")->with("invalid-credentials", true); 
+                }
+            } catch (Exception $ex) {
+                return Redirect::to("login")->with("invalid-credentials", true); 
+            }
+        }
+
+	}
+
+	public function forgotPassword(){
+		return View::make("account/forgot-password");
+	}
+
+	public function logout(){
+		Session::flush();
+		return Redirect::to('home');
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/controllers/AdminController.php
----------------------------------------------------------------------
diff --git a/app/controllers/AdminController.php b/app/controllers/AdminController.php
new file mode 100644
index 0000000..c55718e
--- /dev/null
+++ b/app/controllers/AdminController.php
@@ -0,0 +1,127 @@
+<?php
+
+class AdminController extends BaseController {
+
+    private $idStore = null;
+
+	public function __construct()
+	{
+		$this->beforeFilter('verifyadmin');
+		$idStore = new WSISUtilities();
+        try
+	    {
+	        $idStore->connect();
+	    }
+	    catch (Exception $e)
+	    {
+	        Utilities::print_error_message('<p>Error connecting to ID store.
+	            Please try again later or report a bug using the link in the Help menu</p>' .
+	            '<p>' . $e->getMessage() . '</p>');
+	    }
+	    $this->idStore = $idStore;
+	    //Session::put("idStore", $idStore);
+		Session::put("nav-active", "user-console");
+	}
+
+	public function console(){
+		return View::make("admin/dashboard");
+	}
+
+	public function dashboard(){
+		//only for super admin
+		//Session::put("scigap_admin", true);
+		$idStore = $this->idStore;
+
+		$crData = CRUtilities::getEditCRData();
+		$gateways = CRUtilities::getAllGatewayProfilesData();
+		return View::make("admin/manage-gateway", array( 
+														"gateways" => $gateways, 
+														"computeResources" => CRUtilities::getAllCRObjects(),
+														"crData" => $crData));
+	}
+
+	public function addAdminSubmit(){
+		$idStore = $this->idStore;
+	    $idStore->updateRoleListOfUser( Input::get("username"), array( "new"=>array("admin"), "deleted"=>array() ) );
+
+   		return View::make("account/admin-dashboard")->with("message", "User has been added to Admin.");
+	}
+
+	public function usersView(){
+		$idStore = $this->idStore;
+		if( Input::has("role"))
+		{
+			$users = $idStore->getUserListOfRole( Input::get("role"));
+			if( isset( $users->return))
+		    	$users = $users->return;
+		    else
+		    	$users = array();
+		}
+		else
+	    	$users = $idStore->listUsers();
+	    
+	    $roles = $idStore->getRoleNames();
+
+	    return View::make("admin/manage-users", array("users" => $users, "roles" => $roles));
+
+	}
+
+	public function addGatewayAdminSubmit(){
+		$idStore = $this->idStore;
+		//check if username exists
+		if( $idStore->username_exists( Input::get("username")) )
+		{
+			//add user to admin role
+			$app_config = Utilities::read_config();
+			$idStore->updateRoleListOfUser( Input::get("username"), array( "new"=>array( $app_config["admin-role-name"]), "deleted"=>array() ) );
+
+			return Redirect::to("admin/dashboard/users?role=" . $app_config["admin-role-name"])->with("Gateway Admin has been added.");
+
+		}
+		else
+		{
+			echo ("username doesn't exist only."); exit;
+		}
+	}
+
+	public function rolesView(){
+		$idStore = $this->idStore;
+		$roles = $idStore->getRoleNames();
+
+		return View::make("admin/manage-roles", array("roles" => $roles));
+	}
+
+	public function experimentsView(){
+		$idStore = $this->idStore;
+		//$roles = $idStore->getExperiments();
+
+		return View::make("admin/manage-experiments" );
+	}
+
+	public function addRole(){
+		$idStore = $this->idStore;
+
+		$idStore->addRole( Input::get("role") );
+		return Redirect::to("admin/dashboard/roles")->with( "message", "Role has been added.");
+	}
+
+	public function getRoles(){
+		$idStore = $this->idStore;
+
+		return json_encode( (array)$idStore->getRoleListOfUser( Input::get("username") ) );
+	}
+
+	public function deleteRole(){
+		$idStore = $this->idStore;
+
+		$idStore->deleteRole( Input::get("role") );
+		return Redirect::to("admin/dashboard/roles")->with( "message", "Role has been deleted.");
+
+	}
+
+	public function credentialStoreView(){
+		$idStore = $this->idStore;
+
+		return View::make("admin/manage-credentials", array("tokens" => array()) );
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/controllers/ApplicationController.php
----------------------------------------------------------------------
diff --git a/app/controllers/ApplicationController.php b/app/controllers/ApplicationController.php
new file mode 100644
index 0000000..78b51ff
--- /dev/null
+++ b/app/controllers/ApplicationController.php
@@ -0,0 +1,141 @@
+<?php
+
+class ApplicationController extends BaseController {
+
+	public function __construct()
+	{
+		$this->beforeFilter('verifyadmin');
+		Session::put("nav-active", "app-catalog");
+	}
+
+	public function showAppModuleView()
+	{
+		$data = array();
+		$data["modules"] = AppUtilities::getAllModules();
+		return View::make('application/module', $data);
+	}
+
+	public function modifyAppModuleSubmit()
+	{
+		$update = false;
+		if( Input::has("appModuleId") )
+			$update = true;
+			
+		if( AppUtilities::create_or_update_appModule( Input::all(), $update ) )
+		{
+			if( $update)
+				$message = "Module has been updated successfully!";
+			else
+				$message = "Module has been created successfully!";
+		}
+		else
+			$message = "An error has occurred. Please report the issue.";
+
+
+		return Redirect::to("app/module")->with("message", $message);
+	}
+
+	public function deleteAppModule()
+	{
+		if( AppUtilities::deleteAppModule( Input::get("appModuleId") ) )
+			$message = "Module has been deleted successfully!";
+		else
+			$message = "An error has occurred. Please report the issue.";
+
+		return Redirect::to("app/module")->with("message", $message);
+
+	}
+
+	public function createAppInterfaceView()
+	{
+		$data = array();
+		$data = AppUtilities::getAppInterfaceData();
+		//var_dump( $data["appInterfaces"][14] ); exit;
+		return View::make("application/interface", $data);
+	}
+
+	public function createAppInterfaceSubmit()
+	{
+		$appInterfaceValues = Input::all();
+		//var_dump( $appInterfaceValues); exit;
+		AppUtilities::create_or_update_appInterface( $appInterfaceValues);
+
+		return Redirect::to( "app/interface")->with("message","Application Interface has been created");
+	}
+
+	public function editAppInterfaceSubmit()
+	{
+		if( Input::has("app-interface-id"))
+		{
+			$update = true;
+			$appInterfaceValues = Input::all();
+			//var_dump( $appInterfaceValues); exit;
+			AppUtilities::create_or_update_appInterface( $appInterfaceValues, $update);
+			$message = "Application Interface has been updated!";
+		}
+		else
+		{
+			$message = "An error has occurred. Please report the issue.";
+		}
+		return Redirect::to( "app/interface")->with("message", $message);
+
+	}
+
+	public function deleteAppInterface()
+	{
+		if( AppUtilities::deleteAppInterface( Input::get("appInterfaceId") ) )
+			$message = "Interface has been deleted successfully!";
+		else
+			$message = "An error has occurred. Please report the issue.";
+
+		return Redirect::to("app/interface")->with("message", $message);
+
+	}
+
+	public function createAppDeploymentView()
+	{
+		$data = array();
+		$data = AppUtilities::getAppDeploymentData();
+		//var_dump( $data); exit;
+
+		return View::make("application/deployment", $data);
+	}
+
+	public function createAppDeploymentSubmit()
+	{
+		$appDeploymentValues = Input::all();
+		AppUtilities::create_or_update_appDeployment( $appDeploymentValues );
+		return Redirect::to("app/deployment")->with("message", "App Deployment was created successfully!");
+	}
+
+	public function editAppDeploymentSubmit()
+	{
+		if( Input::has("app-deployment-id"))
+		{
+			$update = true;
+			$appDeploymentValues = Input::all();
+
+			AppUtilities::create_or_update_appDeployment( $appDeploymentValues, $update);
+			$message = "Application Deployment has been updated!";
+		}
+		else
+		{
+			$message = "An error has occurred. Please report the issue.";
+		}
+		return Redirect::to( "app/deployment")->with("message", $message);
+	}
+
+	public function deleteAppDeployment()
+	{
+		if( AppUtilities::deleteAppDeployment( Input::get("appDeploymentId") ) )
+			$message = "Deployment has been deleted successfully!";
+		else
+			$message = "An error has occurred. Please report the issue.";
+
+		return Redirect::to("app/deployment")->with("message", $message);
+
+	}
+
+}
+
+?>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/controllers/BaseController.php
----------------------------------------------------------------------
diff --git a/app/controllers/BaseController.php b/app/controllers/BaseController.php
new file mode 100755
index 0000000..2bee464
--- /dev/null
+++ b/app/controllers/BaseController.php
@@ -0,0 +1,18 @@
+<?php
+
+class BaseController extends Controller {
+
+	/**
+	 * Setup the layout used by the controller.
+	 *
+	 * @return void
+	 */
+	protected function setupLayout()
+	{
+		if ( ! is_null($this->layout))
+		{
+			$this->layout = View::make($this->layout);
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/controllers/ComputeResource.php
----------------------------------------------------------------------
diff --git a/app/controllers/ComputeResource.php b/app/controllers/ComputeResource.php
new file mode 100755
index 0000000..6644c73
--- /dev/null
+++ b/app/controllers/ComputeResource.php
@@ -0,0 +1,238 @@
+<?php
+
+class ComputeResource extends BaseController{
+	
+	/**
+	*    Instantiate a new Compute Resource Controller Instance
+	**/
+
+	public function __construct()
+	{
+		$this->beforeFilter('verifyadmin');
+		Session::put("nav-active", "compute-resource");
+
+	}
+
+	public function createView(){
+			return View::make("resource/create");
+	}
+
+	public function createSubmit(){
+
+		$hostAliases = Input::get("hostaliases");
+		$ips = Input::get("ips");
+		$computeDescription = array( 
+									"hostName"=> trim( Input::get("hostname") ),
+									"hostAliases"=> array_unique( array_filter( $hostAliases) ),
+									"ipAddresses"=> array_unique( array_filter( $ips) ),
+									"resourceDescription"=>Input::get("description") 
+									);
+		$computeResource = CRUtilities::register_or_update_compute_resource( $computeDescription);
+		
+		return Redirect::to( "cr/edit?crId=" . $computeResource->computeResourceId);
+	}
+
+	public function editView(){
+		
+		$data = CRUtilities::getEditCRData();
+		$computeResourceId = "";
+		if( Input::has("crId"))
+			$computeResourceId = Input::get("crId");
+		else if( Session::has("computeResource"))
+		{
+			$computeResource = Session::get("computeResource");
+			$computeResourceId = $computeResource->computeResourceId;
+		}
+
+		if( $computeResourceId != "")
+		{
+			$computeResource = Utilities::get_compute_resource(  $computeResourceId);
+			$jobSubmissionInterfaces = array();
+			$dataMovementInterfaces = array();
+			$addedJSP = array();
+			$addedDMI = array();
+			//var_dump( $computeResource->jobSubmissionInterfaces); exit;
+			if( count( $computeResource->jobSubmissionInterfaces) )
+			{
+				foreach( $computeResource->jobSubmissionInterfaces as $JSI )
+				{
+					$jobSubmissionInterfaces[] = CRUtilities::getJobSubmissionDetails( $JSI->jobSubmissionInterfaceId, $JSI->jobSubmissionProtocol);
+					$addedJSP[] = $JSI->jobSubmissionProtocol;
+				}
+			}
+			//var_dump( CRUtilities::getJobSubmissionDetails( $data["computeResource"]->jobSubmissionInterfaces[0]->jobSubmissionInterfaceId, 1) ); exit;
+			if( count( $computeResource->dataMovementInterfaces) )
+			{
+				foreach( $computeResource->dataMovementInterfaces as $DMI )
+				{
+					$dataMovementInterfaces[] = CRUtilities::getDataMovementDetails( $DMI->dataMovementInterfaceId, $DMI->dataMovementProtocol);
+					$addedDMI[] = $DMI->dataMovementProtocol;
+				}
+			}
+
+			$data["computeResource"] = $computeResource;
+			$data["jobSubmissionInterfaces"] = $jobSubmissionInterfaces;
+			$data["dataMovementInterfaces"] = $dataMovementInterfaces;
+			$data["addedJSP"] = $addedJSP;
+			$data["addedDMI"] = $addedDMI;
+			//var_dump($data["jobSubmissionInterfaces"]); exit;
+			return View::make("resource/edit", $data);
+		}
+		else
+			return View::make("resource/browse")->with("login-alert", "Unable to retrieve this Compute Resource. Please report this error to devs.");
+
+	}
+		
+	public function editSubmit(){
+
+		$tabName = "";
+		if( Input::get("cr-edit") == "resDesc") /* Modify compute Resource description */
+		{
+			$computeDescription = Utilities::get_compute_resource(  Input::get("crId"));
+			$computeDescription->hostName = trim( Input::get("hostname") );
+			$computeDescription->hostAliases = array_unique( array_filter( Input::get("hostaliases") ) );
+			$computeDescription->ipAddresses = array_unique( array_filter( Input::get("ips") ) );
+			$computeDescription->resourceDescription = Input::get("description");
+			$computeDescription->maxMemoryPerNode = Input::get("maxMemoryPerNode");
+			//var_dump( $computeDescription); exit;
+
+			$computeResource = CRUtilities::register_or_update_compute_resource( $computeDescription, true);
+
+			$tabName =  "#tab-desc";
+		}
+		if( Input::get("cr-edit") == "queue") /* Add / Modify a Queue */
+		{
+			$queue = array( "queueName"			=>Input::get("qname"),
+							"queueDescription"	=>Input::get("qdesc"),
+							"maxRunTime"		=>Input::get( "qmaxruntime"),
+							"maxNodes"			=>Input::get("qmaxnodes"),
+							"maxProcessors"		=>Input::get("qmaxprocessors"),
+							"maxJobsInQueue"	=>Input::get("qmaxjobsinqueue"),
+							"maxMemory"			=>Input::get("qmaxmemoryinqueue")
+						);
+
+			$computeDescription = Utilities::get_compute_resource(  Input::get("crId"));
+			$computeDescription->batchQueues[] = CRUtilities::createQueueObject( $queue);
+			$computeResource = CRUtilities::register_or_update_compute_resource( $computeDescription, true);
+			//var_dump( $computeResource); exit;
+			$tabName = "#tab-queues";
+		}
+		else if( Input::get("cr-edit") == "delete-queue" )
+		{
+			CRUtilities::deleteQueue( Input::get("crId"), Input::get("queueName") );
+			$tabName = "#tab-queues";
+		} 
+		else if( Input::get("cr-edit") == "fileSystems")
+		{
+			$computeDescription = Utilities::get_compute_resource(  Input::get("crId"));
+			$computeDescription->fileSystems = array_filter( Input::get("fileSystems"), "trim");
+			$computeResource = CRUtilities::register_or_update_compute_resource( $computeDescription, true);
+
+			$tabName = "#tab-filesystem";
+		}
+		else if( Input::get("cr-edit") == "jsp" ||  Input::get("cr-edit") == "edit-jsp" ) /* Add / Modify a Job Submission Interface */
+		{		
+			$update = false;	
+			if( Input::get("cr-edit") == "edit-jsp")
+				$update = true;
+
+			$jobSubmissionInterface = CRUtilities::create_or_update_JSIObject( Input::all(), $update );
+
+			$tabName = "#tab-jobSubmission";
+		}
+		else if( Input::get("cr-edit") == "jsi-priority") 
+		{
+			$inputs = Input::all();
+			$computeDescription = Utilities::get_compute_resource(  Input::get("crId"));
+			foreach( $computeDescription->jobSubmissionInterfaces as $index => $jsi)
+			{
+				foreach( $inputs["jsi-id"] as $idIndex => $jsiId)
+				{
+					if( $jsiId == $jsi->jobSubmissionInterfaceId )
+					{
+						$computeDescription->jobSubmissionInterfaces[$index]->priorityOrder = $inputs["jsi-priority"][$idIndex];
+						break;
+					}
+				}
+			}
+			$computeResource = CRUtilities::register_or_update_compute_resource( $computeDescription, true);
+
+			return 1; //currently done by ajax.
+		}
+		else if( Input::get("cr-edit") == "dmp" ||  Input::get("cr-edit") == "edit-dmi" ) /* Add / Modify a Data Movement Interface */
+		{
+			$update = false;	
+			if( Input::get("cr-edit") == "edit-dmi")
+				$update = true;
+			$dataMovementInterface = CRUtilities::create_or_update_DMIObject( Input::all(), $update );
+
+			$tabName = "#tab-dataMovement";
+		}
+		else if( Input::get("cr-edit") == "dmi-priority") 
+		{
+			$inputs = Input::all();
+			$computeDescription = Utilities::get_compute_resource(  Input::get("crId"));
+			foreach( $computeDescription->dataMovementInterfaces as $index => $dmi)
+			{
+				foreach( $inputs["dmi-id"] as $idIndex => $dmiId)
+				{
+					if( $dmiId == $dmi->dataMovementInterfaceId )
+					{
+						$computeDescription->dataMovementInterfaces[$index]->priorityOrder = $inputs["dmi-priority"][$idIndex];
+						break;
+					}
+				}
+			}
+			$computeResource = CRUtilities::register_or_update_compute_resource( $computeDescription, true);
+
+			return 1; //currently done by ajax.
+		}
+
+		return Redirect::to("cr/edit?crId=" . Input::get("crId") . $tabName );
+	}
+
+	public function deleteActions(){
+
+		$result = CRUtilities::deleteActions( Input::all() );
+		if( Input::has("jsiId"))
+		{
+			return Redirect::to("cr/edit?crId=" . Input::get("crId"). "#tab-jobSubmission")
+							->with("message", "Job Submission Interface was deleted successfully");
+		}
+		if( Input::has("dmiId"))
+		{
+			return Redirect::to("cr/edit?crId=" . Input::get("crId"). "#tab-dataMovement")
+							->with( "message", "Data Movement Protocol was deleted successfully");
+		}
+		elseif( Input::has("del-crId") )
+		{
+			return Redirect::to("cr/browse")->with("message", "The Compute Resource has been successfully deleted.");
+		}
+		else
+			return $result;
+	}
+
+	public function browseView(){
+		$data = CRUtilities::getBrowseCRData();
+		$allCRs = $data["crObjects"];
+		$appDeployments = $data["appDeployments"];
+
+		$connectedDeployments = array();
+		foreach( (array)$allCRs as $crId => $crName)
+		{
+			$connectedDeployments[ $crId] = 0;
+			foreach( (array)$appDeployments as $deploymentObject)
+			{
+				if( $crId == $deploymentObject->computeHostId)
+					$connectedDeployments[$crId]++;
+			}
+		}
+		return View::make("resource/browse", array(
+												"allCRs" => $allCRs,
+												"connectedDeployments" => $connectedDeployments
+												));
+
+	}
+}
+
+?>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/controllers/ExperimentController.php
----------------------------------------------------------------------
diff --git a/app/controllers/ExperimentController.php b/app/controllers/ExperimentController.php
new file mode 100755
index 0000000..69abd00
--- /dev/null
+++ b/app/controllers/ExperimentController.php
@@ -0,0 +1,232 @@
+ <?php
+
+class ExperimentController extends BaseController {
+
+	/**
+	*    Instantiate a new ExperimentController Instance
+	**/
+
+	public function __construct()
+	{
+		$this->beforeFilter('verifylogin');
+		Session::put("nav-active", "experiment");
+	}
+
+	public function createView()
+	{
+		Session::forget( 'exp_create_continue');
+		return View::make('experiment/create');
+	}
+
+	public function createSubmit()
+	{
+		$inputs = Input::all();
+
+		if( isset( $_POST['continue'] ))
+		{
+			Session::put( 'exp_create_continue', true);
+			
+			$app_config = Utilities::read_config();
+			$experimentInputs = array( 
+								"disabled" => ' disabled',
+						        "experimentName" => $_POST['experiment-name'],
+						        "experimentDescription" => $_POST['experiment-description'] . ' ',
+						        "project" => $_POST['project'],
+						        "application" => $_POST['application'],
+						        "allowedFileSize" => $app_config["server-allowed-file-size"],
+						        "echo" => ($_POST['application'] == 'Echo')? ' selected' : '',
+						        "wrf" => ($_POST['application'] == 'WRF')? ' selected' : '',
+						        "queueName" => $app_config["queue-name"],
+						        "nodeCount" => $app_config["node-count"],
+						        "cpuCount" => $app_config["total-cpu-count"],
+						        "wallTimeLimit" => $app_config["wall-time-limit"],
+						        "advancedOptions" => $app_config["advanced-experiment-options"]
+					        );
+			return View::make( "experiment/create-complete", array( "expInputs" => $experimentInputs) );
+		}
+
+		else if (isset($_POST['save']) || isset($_POST['launch']))
+		{
+		    $expId = Utilities::create_experiment();
+
+		    if (isset($_POST['launch']) && $expId)
+		    {
+		        Utilities::launch_experiment($expId);
+		    }
+		    /* Not required.
+		    else
+		    {
+		        Utilities::print_success_message("<p>Experiment {$_POST['experiment-name']} created!</p>" .
+		            '<p>You will be redirected to the summary page shortly, or you can
+		            <a href=' . URL::to('/') . '"/experiment/summary?expId=' . $expId . '">go directly</a> to experiment summary page.</p>');
+		        
+		    }*/
+        	return Redirect::to('experiment/summary?expId=' . $expId);
+		}
+		else
+			return Redirect::to("home")->with("message", "Something went wrong here. Please file a bug report using the link in the Help menu.");
+	}
+
+	public function summary()
+	{
+		$experiment = Utilities::get_experiment($_GET['expId']);
+		if( $experiment != null)
+		{
+			$project = Utilities::get_project($experiment->projectID);
+			$expVal = Utilities::get_experiment_values( $experiment, $project);
+			$jobDetails = Utilities::get_job_details( $experiment->experimentID);
+			$transferDetails = Utilities::get_transfer_details( $experiment->experimentID);
+			//var_dump( $jobDetails); exit;
+			// User should not clone or edit a failed experiment. Only create clones of it.
+			if( $expVal["experimentStatusString"] == "FAILED")
+				$expVal["editable"] = false;
+
+			$expVal["cancelable"] = false;
+			if( $expVal["experimentStatusString"] == "LAUNCHED" || $expVal["experimentStatusString"] == "EXECUTING" )
+				$expVal["cancelable"] = true;
+
+			$data = array(
+										"expId" => Input::get("expId"),
+										"experiment" => $experiment,
+										"project" => $project,
+										"jobDetails" => $jobDetails,
+										"expVal" => $expVal
+						);
+
+			if( Request::ajax() )
+			{
+				//admin wants to see an experiment summary
+				if( Input::has("dashboard"))
+				{
+					$data["dashboard"] = true;
+					return View::make("partials/experiment-info", $data);
+				}
+				else
+					return json_encode( $experiment);
+			}
+			else
+			{
+				return View::make( "experiment/summary", $data);
+			}
+		}
+		else
+		{
+			if( Input::has("dashboard"))
+				return View::make( "partials/experiment-info", array("invalidExperimentId" => 1)); 
+			else
+				return View::make( "experiment/summary", array("invalidExperimentId" => 1));
+		}
+	}
+
+	public function expCancel()
+	{
+		Utilities::cancel_experiment( Input::get("expId"));
+
+		return Redirect::to('experiment/summary?expId=' . Input::get("expId"));
+	}
+
+	public function expChange()
+	{
+		//var_dump( Input::all() ); exit;
+		$experiment = Utilities::get_experiment( Input::get('expId') );
+		$project = Utilities::get_project($experiment->projectID);
+
+		$expVal = Utilities::get_experiment_values( $experiment, $project);
+		/*if (isset($_POST['save']))
+		{
+		    $updatedExperiment = Utilities::apply_changes_to_experiment($experiment);
+
+		    Utilities::update_experiment($experiment->experimentID, $updatedExperiment);
+		}*/
+		if (isset($_POST['launch']))
+		{
+		    Utilities::launch_experiment($experiment->experimentID);
+			return Redirect::to('experiment/summary?expId=' . $experiment->experimentID);
+		}
+		elseif (isset($_POST['clone']))
+		{
+		    $cloneId = Utilities::clone_experiment($experiment->experimentID);
+		    $experiment = Utilities::get_experiment( $cloneId );
+			$project = Utilities::get_project($experiment->projectID);
+
+			$expVal = Utilities::get_experiment_values( $experiment, $project);
+
+			return Redirect::to('experiment/edit?expId=' . $experiment->experimentID);
+
+		}
+		
+		elseif (isset($_POST['cancel']))
+		{
+		    Utilities::cancel_experiment($experiment->experimentID);
+			return Redirect::to('experiment/summary?expId=' . $experiment->experimentID);
+
+		}
+	}
+
+	public function editView()
+	{
+		$app_config = Utilities::read_config();
+		$experiment = Utilities::get_experiment($_GET['expId']);
+		$project = Utilities::get_project($experiment->projectID);
+
+		$expVal = Utilities::get_experiment_values( $experiment, $project);
+
+		$experimentInputs = array(	
+								"disabled" => ' ',
+						        "experimentName" => $experiment->name,
+						        "experimentDescription" => $experiment->description,
+						        "application" => $experiment->applicationId,
+						      	"allowedFileSize" => $app_config["server-allowed-file-size"],
+								'experiment' => $experiment,
+								'project' => $project,
+								'expVal' => $expVal,
+								'cloning' => true,
+						        'advancedOptions' => $app_config["advanced-experiment-options"]
+								);
+		return View::make("experiment/edit", array("expInputs" => $experimentInputs) );
+	}
+
+	public function editSubmit()
+	{
+		if (isset($_POST['save']) || isset($_POST['launch']))
+		{
+	        $experiment = Utilities::get_experiment(Input::get('expId') ); // update local experiment variable
+		    $updatedExperiment = Utilities::apply_changes_to_experiment($experiment, Input::all() );
+
+		    Utilities::update_experiment($experiment->experimentID, $updatedExperiment);
+
+		    if (isset($_POST['save']))
+		    {
+		        $experiment = Utilities::get_experiment(Input::get('expId') ); // update local experiment variable
+		    }
+		    if (isset($_POST['launch']))
+		    {
+		        Utilities::launch_experiment($experiment->experimentID);
+		    }
+
+			return Redirect::to('experiment/summary?expId=' . $experiment->experimentID);
+		}
+		else
+			return View::make("home");
+	}
+
+	public function searchView()
+	{
+		$experimentStates = Utilities::getExpStates();
+		return View::make("experiment/search", array( "expStates" => $experimentStates ) );
+	}
+
+	public function searchSubmit()
+	{
+		$expContainer = Utilities::get_expsearch_results( Input::all() );
+
+		$experimentStates = Utilities::getExpStates();
+		return View::make('experiment/search', array(
+													'expStates' => $experimentStates,
+													'expContainer' => $expContainer 
+												));
+	}
+
+}
+
+?>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/controllers/GatewayprofileController.php
----------------------------------------------------------------------
diff --git a/app/controllers/GatewayprofileController.php b/app/controllers/GatewayprofileController.php
new file mode 100644
index 0000000..24b8589
--- /dev/null
+++ b/app/controllers/GatewayprofileController.php
@@ -0,0 +1,79 @@
+<?php
+
+class GatewayprofileController extends BaseController {
+
+	public function __construct()
+	{
+		$this->beforeFilter('verifyadmin');
+		Session::put("nav-active", "gateway-profile");
+	}
+
+	public function createView()
+	{
+		return View::make("gateway/create");
+	}
+
+	public function createSubmit()
+	{
+		$gatewayProfileId = CRUtilities::create_or_update_gateway_profile( Input::all() );
+		//TODO:: Maybe this is a better way. Things to ponder upon.
+		//return Redirect::to("gp/browse")->with("gpId", $gatewayProfileId);
+		return Redirect::to("gp/browse")->with("message","Gateway has been created. You can set preferences now.");
+	}
+
+	public function editGP()
+	{
+		$gatewayProfileId = CRUtilities::create_or_update_gateway_profile( Input::all(), true );
+		return Redirect::to("gp/browse")->with("message","Gateway has been created. You can set preferences now.");
+	}
+
+	public function browseView()
+	{
+		$crObjects = CRUtilities::getAllCRObjects();
+		$crData = CRUtilities::getEditCRData();
+		//var_dump( $crObjects[0]); exit;
+		return View::make("gateway/browse", array(	"gatewayProfiles" => CRUtilities::getAllGatewayProfilesData(),
+													"computeResources" => CRUtilities::getAllCRObjects(),
+													"crData" => CRUtilities::getEditCRData()
+												));
+	}
+
+	public function modifyCRP()
+	{
+		if( CRUtilities::add_or_update_CRP( Input::all()) )
+		{
+			return Redirect::to("admin/dashboard/gateway")->with("message","Compute Resource Preference for the desired Gateway has been set.");
+		}
+	}
+
+	public function delete()
+	{
+		//var_dump( Input::all()); exit;
+		$error = false;
+		if( Input::has("del-gpId")) // if Gateway has to be deleted
+		{
+			if( CRUtilities::deleteGP( Input::get("del-gpId")) )
+				return Redirect::to("admin/dashboard/gateway")->with("message","Gateway Profile has been deleted.");
+			else
+				$error = true;
+		}
+		else if( Input::has("rem-crId")) // if Compute Resource has to be removed from Gateway
+		{
+			if(CRUtilities::deleteCR( Input::all()) )
+				return Redirect::to("admin/dashboard/gateway")->with("message", "The selected Compute Resource has been successfully removed");
+			else
+				$error = true;
+		}
+		else
+			$error = true;
+
+
+		if( $error)
+		{
+			return Redirect::to("admin/dashboard/gateway")->with("message","An error has occurred. Please try again later or report a bug using the link in the Help menu");
+		}
+	}
+
+}
+
+?>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/controllers/HomeController.php
----------------------------------------------------------------------
diff --git a/app/controllers/HomeController.php b/app/controllers/HomeController.php
new file mode 100755
index 0000000..64266ce
--- /dev/null
+++ b/app/controllers/HomeController.php
@@ -0,0 +1,25 @@
+<?php
+
+class HomeController extends BaseController {
+
+	/*
+	|--------------------------------------------------------------------------
+	| Default Home Controller
+	|--------------------------------------------------------------------------
+	|
+	| You may wish to use controllers instead of, or in addition to, Closure
+	| based routes. That's great! Here is an example controller method to
+	| get you started. To route to this controller, just add the route:
+	|
+	|	Route::get('/', 'HomeController@showWelcome');
+	|
+	*/
+
+	public function getIndex()
+	{
+		return View::make('home');
+	}
+
+}
+
+?>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/controllers/ProjectController.php
----------------------------------------------------------------------
diff --git a/app/controllers/ProjectController.php b/app/controllers/ProjectController.php
new file mode 100755
index 0000000..2a8a934
--- /dev/null
+++ b/app/controllers/ProjectController.php
@@ -0,0 +1,86 @@
+<?php
+
+class ProjectController extends BaseController {
+
+	/**
+	*    Instantiate a new ProjectController Instance
+	**/
+
+	public function __construct()
+	{
+		$this->beforeFilter('verifylogin');
+		Session::put("nav-active", "project");
+
+	}
+
+	public function createView()
+	{
+		return View::make("project/create");
+	}
+
+	public function createSubmit()
+	{
+		if (isset($_POST['save']))
+		{
+			$projectId = Utilities::create_project();
+            return Redirect::to('project/summary?projId=' . $projectId);
+		}
+		else
+		{
+			return Redirect::to('project/create');
+		}
+	}
+
+	public function summary()
+	{
+		if( Input::has("projId"))
+		{
+			Session::put("projId", Input::get("projId"));
+			return View::make("project/summary", 
+					array( "projectId" => Input::get("projId")) );
+		}
+		else
+			return Redirect::to("home");
+	}
+
+	public function editView()
+	{
+		if( Input::has("projId"))
+		{
+			return View::make("project/edit", 
+					array( "projectId" => Input::get("projId"),
+							"project" => Utilities::get_project($_GET['projId']) 
+						 ) );
+		}
+		else
+			return Redirect::to("home");
+	}
+
+	public function editSubmit()
+	{
+		if (isset($_POST['save']))
+	    {
+	    	$projectDetails["owner"] = Session::get("username");
+	    	$projectDetails["name"] = Input::get("project-name");
+	    	$projectDetails["description"] = Input::get("project-description");
+
+	        Utilities::update_project( Input::get("projectId"), $projectDetails);
+
+	        return Redirect::to("project/summary?projId=" . Input::get("projectId") )->with("project_edited", true);
+	    }
+	}
+
+	public function searchView()
+	{
+		return View::make('project/search');
+	}
+
+	public function searchSubmit()
+	{
+        $projects = Utilities::get_projsearch_results( Input::get("search-key"), Input::get("search-value"));
+		return View::make( 'project/search', array('projects' => $projects));
+	}
+
+}
+
+?>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/database/production.sqlite
----------------------------------------------------------------------
diff --git a/app/database/production.sqlite b/app/database/production.sqlite
new file mode 100755
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/database/seeds/DatabaseSeeder.php
----------------------------------------------------------------------
diff --git a/app/database/seeds/DatabaseSeeder.php b/app/database/seeds/DatabaseSeeder.php
new file mode 100755
index 0000000..1989252
--- /dev/null
+++ b/app/database/seeds/DatabaseSeeder.php
@@ -0,0 +1,17 @@
+<?php
+
+class DatabaseSeeder extends Seeder {
+
+	/**
+	 * Run the database seeds.
+	 *
+	 * @return void
+	 */
+	public function run()
+	{
+		Eloquent::unguard();
+
+		// $this->call('UserTableSeeder');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/filters.php
----------------------------------------------------------------------
diff --git a/app/filters.php b/app/filters.php
new file mode 100755
index 0000000..93b988b
--- /dev/null
+++ b/app/filters.php
@@ -0,0 +1,115 @@
+<?php
+
+/*
+|--------------------------------------------------------------------------
+| Application & Route Filters
+|--------------------------------------------------------------------------
+|
+| Below you will find the "before" and "after" events for the application
+| which may be used to do any work before or after a request into your
+| application. Here you may also register your custom route filters.
+|
+*/
+
+App::before(function($request)
+{
+	$airavataClient = Utilities::get_airavata_client();
+	if( ! is_object( $airavataClient))
+		return View::make("server-down");
+	else
+		Session::put("airavataClient", $airavataClient);
+});
+
+
+App::after(function($request, $response)
+{
+	//
+	// Test commit.
+});
+
+/*
+|--------------------------------------------------------------------------
+| Authentication Filters
+|--------------------------------------------------------------------------
+|
+| The following filters are used to verify that the user of the current
+| session is logged into this application. The "basic" filter easily
+| integrates HTTP Basic authentication for quick, simple checking.
+|
+*/
+
+Route::filter('auth', function()
+{
+	if (Auth::guest())
+	{
+		if (Request::ajax())
+		{
+			return Response::make('Unauthorized', 401);
+		}
+		else
+		{
+			return Redirect::guest('login');
+		}
+	}
+});
+
+
+Route::filter('auth.basic', function()
+{
+	return Auth::basic();
+});
+
+/*
+|--------------------------------------------------------------------------
+| Guest Filter
+|--------------------------------------------------------------------------
+|
+| The "guest" filter is the counterpart of the authentication filters as
+| it simply checks that the current user is not logged in. A redirect
+| response will be issued if they are, which you may freely change.
+|
+*/
+
+Route::filter('guest', function()
+{
+	if (Auth::check()) return Redirect::to('/');
+});
+
+/*
+|--------------------------------------------------------------------------
+| CSRF Protection Filter
+|--------------------------------------------------------------------------
+|
+| The CSRF filter is responsible for protecting your application against
+| cross-site request forgery attacks. If this special token in a user
+| session does not match the one given in this request, we'll bail.
+|
+*/
+
+Route::filter('csrf', function()
+{
+	if (Session::token() != Input::get('_token'))
+	{
+		throw new Illuminate\Session\TokenMismatchException;
+	}
+});
+
+
+Route::filter('verifylogin',function()
+{
+	if( ! Utilities::verify_login() )
+		return Redirect::to("home")->with("login-alert", true);
+});
+
+Route::filter('verifyadmin', function()
+{
+	if( Utilities::verify_login() )
+	{
+		if( !Session::has("admin"))
+		{
+			return Redirect::to("home")->with("admin-alert", true);
+		}
+	} 
+	else
+		return Redirect::to("home")->with("login-alert", true);
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/lang/en/pagination.php
----------------------------------------------------------------------
diff --git a/app/lang/en/pagination.php b/app/lang/en/pagination.php
new file mode 100755
index 0000000..6b99ef5
--- /dev/null
+++ b/app/lang/en/pagination.php
@@ -0,0 +1,20 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Pagination Language Lines
+	|--------------------------------------------------------------------------
+	|
+	| The following language lines are used by the paginator library to build
+	| the simple pagination links. You are free to change them to anything
+	| you want to customize your views to better match your application.
+	|
+	*/
+
+	'previous' => '&laquo; Previous',
+
+	'next'     => 'Next &raquo;',
+
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/lang/en/reminders.php
----------------------------------------------------------------------
diff --git a/app/lang/en/reminders.php b/app/lang/en/reminders.php
new file mode 100755
index 0000000..e42148e
--- /dev/null
+++ b/app/lang/en/reminders.php
@@ -0,0 +1,24 @@
+<?php
+
+return array(
+
+	/*
+	|--------------------------------------------------------------------------
+	| Password Reminder Language Lines
+	|--------------------------------------------------------------------------
+	|
+	| The following language lines are the default lines which match reasons
+	| that are given by the password broker for a password update attempt
+	| has failed, such as for an invalid token or invalid new password.
+	|
+	*/
+
+	"password" => "Passwords must be at least six characters and match the confirmation.",
+
+	"user" => "We can't find a user with that e-mail address.",
+
+	"token" => "This password reset token is invalid.",
+
+	"sent" => "Password reminder sent!",
+
+);


[47/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/Airavata/API/Error/Types.php
----------------------------------------------------------------------
diff --git a/app/libraries/Airavata/API/Error/Types.php b/app/libraries/Airavata/API/Error/Types.php
new file mode 100644
index 0000000..de30884
--- /dev/null
+++ b/app/libraries/Airavata/API/Error/Types.php
@@ -0,0 +1,944 @@
+<?php
+namespace Airavata\API\Error;
+
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+use Thrift\Base\TBase;
+use Thrift\Type\TType;
+use Thrift\Type\TMessageType;
+use Thrift\Exception\TException;
+use Thrift\Exception\TProtocolException;
+use Thrift\Protocol\TProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
+use Thrift\Exception\TApplicationException;
+
+
+final class AiravataErrorType {
+  const UNKNOWN = 0;
+  const PERMISSION_DENIED = 1;
+  const INTERNAL_ERROR = 2;
+  const AUTHENTICATION_FAILURE = 3;
+  const INVALID_AUTHORIZATION = 4;
+  const AUTHORIZATION_EXPIRED = 5;
+  const UNKNOWN_GATEWAY_ID = 6;
+  const UNSUPPORTED_OPERATION = 7;
+  static public $__names = array(
+    0 => 'UNKNOWN',
+    1 => 'PERMISSION_DENIED',
+    2 => 'INTERNAL_ERROR',
+    3 => 'AUTHENTICATION_FAILURE',
+    4 => 'INVALID_AUTHORIZATION',
+    5 => 'AUTHORIZATION_EXPIRED',
+    6 => 'UNKNOWN_GATEWAY_ID',
+    7 => 'UNSUPPORTED_OPERATION',
+  );
+}
+
+class ExperimentNotFoundException extends TException {
+  static $_TSPEC;
+
+  public $message = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'message',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['message'])) {
+        $this->message = $vals['message'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ExperimentNotFoundException';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->message);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ExperimentNotFoundException');
+    if ($this->message !== null) {
+      $xfer += $output->writeFieldBegin('message', TType::STRING, 1);
+      $xfer += $output->writeString($this->message);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ProjectNotFoundException extends TException {
+  static $_TSPEC;
+
+  public $message = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'message',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['message'])) {
+        $this->message = $vals['message'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ProjectNotFoundException';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->message);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ProjectNotFoundException');
+    if ($this->message !== null) {
+      $xfer += $output->writeFieldBegin('message', TType::STRING, 1);
+      $xfer += $output->writeString($this->message);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class InvalidRequestException extends TException {
+  static $_TSPEC;
+
+  public $message = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'message',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['message'])) {
+        $this->message = $vals['message'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'InvalidRequestException';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->message);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('InvalidRequestException');
+    if ($this->message !== null) {
+      $xfer += $output->writeFieldBegin('message', TType::STRING, 1);
+      $xfer += $output->writeString($this->message);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class TimedOutException extends TException {
+  static $_TSPEC;
+
+
+  public function __construct() {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        );
+    }
+  }
+
+  public function getName() {
+    return 'TimedOutException';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('TimedOutException');
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class AuthenticationException extends TException {
+  static $_TSPEC;
+
+  public $message = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'message',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['message'])) {
+        $this->message = $vals['message'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'AuthenticationException';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->message);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('AuthenticationException');
+    if ($this->message !== null) {
+      $xfer += $output->writeFieldBegin('message', TType::STRING, 1);
+      $xfer += $output->writeString($this->message);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class AuthorizationException extends TException {
+  static $_TSPEC;
+
+  public $message = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'message',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['message'])) {
+        $this->message = $vals['message'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'AuthorizationException';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->message);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('AuthorizationException');
+    if ($this->message !== null) {
+      $xfer += $output->writeFieldBegin('message', TType::STRING, 1);
+      $xfer += $output->writeString($this->message);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class AiravataClientException extends TException {
+  static $_TSPEC;
+
+  public $airavataErrorType = null;
+  public $parameter = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'airavataErrorType',
+          'type' => TType::I32,
+          ),
+        2 => array(
+          'var' => 'parameter',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['airavataErrorType'])) {
+        $this->airavataErrorType = $vals['airavataErrorType'];
+      }
+      if (isset($vals['parameter'])) {
+        $this->parameter = $vals['parameter'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'AiravataClientException';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->airavataErrorType);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->parameter);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('AiravataClientException');
+    if ($this->airavataErrorType !== null) {
+      $xfer += $output->writeFieldBegin('airavataErrorType', TType::I32, 1);
+      $xfer += $output->writeI32($this->airavataErrorType);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->parameter !== null) {
+      $xfer += $output->writeFieldBegin('parameter', TType::STRING, 2);
+      $xfer += $output->writeString($this->parameter);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ValidatorResult {
+  static $_TSPEC;
+
+  public $result = null;
+  public $errorDetails = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'result',
+          'type' => TType::BOOL,
+          ),
+        2 => array(
+          'var' => 'errorDetails',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['result'])) {
+        $this->result = $vals['result'];
+      }
+      if (isset($vals['errorDetails'])) {
+        $this->errorDetails = $vals['errorDetails'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ValidatorResult';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->result);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->errorDetails);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ValidatorResult');
+    if ($this->result !== null) {
+      $xfer += $output->writeFieldBegin('result', TType::BOOL, 1);
+      $xfer += $output->writeBool($this->result);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->errorDetails !== null) {
+      $xfer += $output->writeFieldBegin('errorDetails', TType::STRING, 2);
+      $xfer += $output->writeString($this->errorDetails);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class ValidationResults {
+  static $_TSPEC;
+
+  public $validationState = null;
+  public $validationResultList = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'validationState',
+          'type' => TType::BOOL,
+          ),
+        2 => array(
+          'var' => 'validationResultList',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\API\Error\ValidatorResult',
+            ),
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['validationState'])) {
+        $this->validationState = $vals['validationState'];
+      }
+      if (isset($vals['validationResultList'])) {
+        $this->validationResultList = $vals['validationResultList'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'ValidationResults';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->validationState);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::LST) {
+            $this->validationResultList = array();
+            $_size0 = 0;
+            $_etype3 = 0;
+            $xfer += $input->readListBegin($_etype3, $_size0);
+            for ($_i4 = 0; $_i4 < $_size0; ++$_i4)
+            {
+              $elem5 = null;
+              $elem5 = new \Airavata\API\Error\ValidatorResult();
+              $xfer += $elem5->read($input);
+              $this->validationResultList []= $elem5;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('ValidationResults');
+    if ($this->validationState !== null) {
+      $xfer += $output->writeFieldBegin('validationState', TType::BOOL, 1);
+      $xfer += $output->writeBool($this->validationState);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->validationResultList !== null) {
+      if (!is_array($this->validationResultList)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('validationResultList', TType::LST, 2);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->validationResultList));
+        {
+          foreach ($this->validationResultList as $iter6)
+          {
+            $xfer += $iter6->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class LaunchValidationException extends TException {
+  static $_TSPEC;
+
+  public $validationResult = null;
+  public $errorMessage = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'validationResult',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\ValidationResults',
+          ),
+        2 => array(
+          'var' => 'errorMessage',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['validationResult'])) {
+        $this->validationResult = $vals['validationResult'];
+      }
+      if (isset($vals['errorMessage'])) {
+        $this->errorMessage = $vals['errorMessage'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'LaunchValidationException';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->validationResult = new \Airavata\API\Error\ValidationResults();
+            $xfer += $this->validationResult->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->errorMessage);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('LaunchValidationException');
+    if ($this->validationResult !== null) {
+      if (!is_object($this->validationResult)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('validationResult', TType::STRUCT, 1);
+      $xfer += $this->validationResult->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->errorMessage !== null) {
+      $xfer += $output->writeFieldBegin('errorMessage', TType::STRING, 2);
+      $xfer += $output->writeString($this->errorMessage);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class AiravataSystemException extends TException {
+  static $_TSPEC;
+
+  public $airavataErrorType = null;
+  public $message = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'airavataErrorType',
+          'type' => TType::I32,
+          ),
+        2 => array(
+          'var' => 'message',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['airavataErrorType'])) {
+        $this->airavataErrorType = $vals['airavataErrorType'];
+      }
+      if (isset($vals['message'])) {
+        $this->message = $vals['message'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'AiravataSystemException';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->airavataErrorType);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->message);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('AiravataSystemException');
+    if ($this->airavataErrorType !== null) {
+      $xfer += $output->writeFieldBegin('airavataErrorType', TType::I32, 1);
+      $xfer += $output->writeI32($this->airavataErrorType);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->message !== null) {
+      $xfer += $output->writeFieldBegin('message', TType::STRING, 2);
+      $xfer += $output->writeString($this->message);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/Airavata/API/Types.php
----------------------------------------------------------------------
diff --git a/app/libraries/Airavata/API/Types.php b/app/libraries/Airavata/API/Types.php
new file mode 100644
index 0000000..481421f
--- /dev/null
+++ b/app/libraries/Airavata/API/Types.php
@@ -0,0 +1,22 @@
+<?php
+namespace Airavata\API;
+
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+use Thrift\Base\TBase;
+use Thrift\Type\TType;
+use Thrift\Type\TMessageType;
+use Thrift\Exception\TException;
+use Thrift\Exception\TProtocolException;
+use Thrift\Protocol\TProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
+use Thrift\Exception\TApplicationException;
+
+
+$GLOBALS['airavataAPI_CONSTANTS']['AIRAVATA_API_VERSION'] = "0.15.0";
+
+

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/Airavata/API/Workflow.php
----------------------------------------------------------------------
diff --git a/app/libraries/Airavata/API/Workflow.php b/app/libraries/Airavata/API/Workflow.php
new file mode 100644
index 0000000..5261d94
--- /dev/null
+++ b/app/libraries/Airavata/API/Workflow.php
@@ -0,0 +1,1927 @@
+<?php
+namespace Airavata\API;
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+use Thrift\Base\TBase;
+use Thrift\Type\TType;
+use Thrift\Type\TMessageType;
+use Thrift\Exception\TException;
+use Thrift\Exception\TProtocolException;
+use Thrift\Protocol\TProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
+use Thrift\Exception\TApplicationException;
+
+
+interface WorkflowIf {
+  public function getAllWorkflows();
+  public function getWorkflow($workflowTemplateId);
+  public function deleteWorkflow($workflowTemplateId);
+  public function registerWorkflow(\Airavata\Model\Workflow $workflow);
+  public function updateWorkflow($workflowTemplateId, \Airavata\Model\Workflow $workflow);
+  public function getWorkflowTemplateId($workflowName);
+  public function isWorkflowExistWithName($workflowName);
+}
+
+class WorkflowClient implements \Airavata\API\WorkflowIf {
+  protected $input_ = null;
+  protected $output_ = null;
+
+  protected $seqid_ = 0;
+
+  public function __construct($input, $output=null) {
+    $this->input_ = $input;
+    $this->output_ = $output ? $output : $input;
+  }
+
+  public function getAllWorkflows()
+  {
+    $this->send_getAllWorkflows();
+    return $this->recv_getAllWorkflows();
+  }
+
+  public function send_getAllWorkflows()
+  {
+    $args = new \Airavata\API\Workflow_getAllWorkflows_args();
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getAllWorkflows', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getAllWorkflows', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getAllWorkflows()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Workflow_getAllWorkflows_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Workflow_getAllWorkflows_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("getAllWorkflows failed: unknown result");
+  }
+
+  public function getWorkflow($workflowTemplateId)
+  {
+    $this->send_getWorkflow($workflowTemplateId);
+    return $this->recv_getWorkflow();
+  }
+
+  public function send_getWorkflow($workflowTemplateId)
+  {
+    $args = new \Airavata\API\Workflow_getWorkflow_args();
+    $args->workflowTemplateId = $workflowTemplateId;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getWorkflow', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getWorkflow', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getWorkflow()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Workflow_getWorkflow_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Workflow_getWorkflow_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("getWorkflow failed: unknown result");
+  }
+
+  public function deleteWorkflow($workflowTemplateId)
+  {
+    $this->send_deleteWorkflow($workflowTemplateId);
+    $this->recv_deleteWorkflow();
+  }
+
+  public function send_deleteWorkflow($workflowTemplateId)
+  {
+    $args = new \Airavata\API\Workflow_deleteWorkflow_args();
+    $args->workflowTemplateId = $workflowTemplateId;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'deleteWorkflow', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('deleteWorkflow', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_deleteWorkflow()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Workflow_deleteWorkflow_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Workflow_deleteWorkflow_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    return;
+  }
+
+  public function registerWorkflow(\Airavata\Model\Workflow $workflow)
+  {
+    $this->send_registerWorkflow($workflow);
+    return $this->recv_registerWorkflow();
+  }
+
+  public function send_registerWorkflow(\Airavata\Model\Workflow $workflow)
+  {
+    $args = new \Airavata\API\Workflow_registerWorkflow_args();
+    $args->workflow = $workflow;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'registerWorkflow', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('registerWorkflow', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_registerWorkflow()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Workflow_registerWorkflow_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Workflow_registerWorkflow_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("registerWorkflow failed: unknown result");
+  }
+
+  public function updateWorkflow($workflowTemplateId, \Airavata\Model\Workflow $workflow)
+  {
+    $this->send_updateWorkflow($workflowTemplateId, $workflow);
+    $this->recv_updateWorkflow();
+  }
+
+  public function send_updateWorkflow($workflowTemplateId, \Airavata\Model\Workflow $workflow)
+  {
+    $args = new \Airavata\API\Workflow_updateWorkflow_args();
+    $args->workflowTemplateId = $workflowTemplateId;
+    $args->workflow = $workflow;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'updateWorkflow', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('updateWorkflow', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_updateWorkflow()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Workflow_updateWorkflow_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Workflow_updateWorkflow_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    return;
+  }
+
+  public function getWorkflowTemplateId($workflowName)
+  {
+    $this->send_getWorkflowTemplateId($workflowName);
+    return $this->recv_getWorkflowTemplateId();
+  }
+
+  public function send_getWorkflowTemplateId($workflowName)
+  {
+    $args = new \Airavata\API\Workflow_getWorkflowTemplateId_args();
+    $args->workflowName = $workflowName;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'getWorkflowTemplateId', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('getWorkflowTemplateId', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_getWorkflowTemplateId()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Workflow_getWorkflowTemplateId_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Workflow_getWorkflowTemplateId_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("getWorkflowTemplateId failed: unknown result");
+  }
+
+  public function isWorkflowExistWithName($workflowName)
+  {
+    $this->send_isWorkflowExistWithName($workflowName);
+    return $this->recv_isWorkflowExistWithName();
+  }
+
+  public function send_isWorkflowExistWithName($workflowName)
+  {
+    $args = new \Airavata\API\Workflow_isWorkflowExistWithName_args();
+    $args->workflowName = $workflowName;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'isWorkflowExistWithName', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('isWorkflowExistWithName', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_isWorkflowExistWithName()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Workflow_isWorkflowExistWithName_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Workflow_isWorkflowExistWithName_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("isWorkflowExistWithName failed: unknown result");
+  }
+
+}
+
+// HELPER FUNCTIONS AND STRUCTURES
+
+class Workflow_getAllWorkflows_args {
+  static $_TSPEC;
+
+
+  public function __construct() {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        );
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_getAllWorkflows_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_getAllWorkflows_args');
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_getAllWorkflows_result {
+  static $_TSPEC;
+
+  public $success = null;
+  public $ire = null;
+  public $ace = null;
+  public $ase = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::LST,
+          'etype' => TType::STRING,
+          'elem' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        1 => array(
+          'var' => 'ire',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\InvalidRequestException',
+          ),
+        2 => array(
+          'var' => 'ace',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataClientException',
+          ),
+        3 => array(
+          'var' => 'ase',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataSystemException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+      if (isset($vals['ire'])) {
+        $this->ire = $vals['ire'];
+      }
+      if (isset($vals['ace'])) {
+        $this->ace = $vals['ace'];
+      }
+      if (isset($vals['ase'])) {
+        $this->ase = $vals['ase'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_getAllWorkflows_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::LST) {
+            $this->success = array();
+            $_size187 = 0;
+            $_etype190 = 0;
+            $xfer += $input->readListBegin($_etype190, $_size187);
+            for ($_i191 = 0; $_i191 < $_size187; ++$_i191)
+            {
+              $elem192 = null;
+              $xfer += $input->readString($elem192);
+              $this->success []= $elem192;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->ire = new \Airavata\API\Error\InvalidRequestException();
+            $xfer += $this->ire->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ace = new \Airavata\API\Error\AiravataClientException();
+            $xfer += $this->ace->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRUCT) {
+            $this->ase = new \Airavata\API\Error\AiravataSystemException();
+            $xfer += $this->ase->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_getAllWorkflows_result');
+    if ($this->success !== null) {
+      if (!is_array($this->success)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('success', TType::LST, 0);
+      {
+        $output->writeListBegin(TType::STRING, count($this->success));
+        {
+          foreach ($this->success as $iter193)
+          {
+            $xfer += $output->writeString($iter193);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ire !== null) {
+      $xfer += $output->writeFieldBegin('ire', TType::STRUCT, 1);
+      $xfer += $this->ire->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ace !== null) {
+      $xfer += $output->writeFieldBegin('ace', TType::STRUCT, 2);
+      $xfer += $this->ace->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ase !== null) {
+      $xfer += $output->writeFieldBegin('ase', TType::STRUCT, 3);
+      $xfer += $this->ase->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_getWorkflow_args {
+  static $_TSPEC;
+
+  public $workflowTemplateId = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'workflowTemplateId',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['workflowTemplateId'])) {
+        $this->workflowTemplateId = $vals['workflowTemplateId'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_getWorkflow_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->workflowTemplateId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_getWorkflow_args');
+    if ($this->workflowTemplateId !== null) {
+      $xfer += $output->writeFieldBegin('workflowTemplateId', TType::STRING, 1);
+      $xfer += $output->writeString($this->workflowTemplateId);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_getWorkflow_result {
+  static $_TSPEC;
+
+  public $success = null;
+  public $ire = null;
+  public $ace = null;
+  public $ase = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workflow',
+          ),
+        1 => array(
+          'var' => 'ire',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\InvalidRequestException',
+          ),
+        2 => array(
+          'var' => 'ace',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataClientException',
+          ),
+        3 => array(
+          'var' => 'ase',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataSystemException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+      if (isset($vals['ire'])) {
+        $this->ire = $vals['ire'];
+      }
+      if (isset($vals['ace'])) {
+        $this->ace = $vals['ace'];
+      }
+      if (isset($vals['ase'])) {
+        $this->ase = $vals['ase'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_getWorkflow_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::STRUCT) {
+            $this->success = new \Airavata\Model\Workflow();
+            $xfer += $this->success->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->ire = new \Airavata\API\Error\InvalidRequestException();
+            $xfer += $this->ire->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ace = new \Airavata\API\Error\AiravataClientException();
+            $xfer += $this->ace->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRUCT) {
+            $this->ase = new \Airavata\API\Error\AiravataSystemException();
+            $xfer += $this->ase->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_getWorkflow_result');
+    if ($this->success !== null) {
+      if (!is_object($this->success)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('success', TType::STRUCT, 0);
+      $xfer += $this->success->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ire !== null) {
+      $xfer += $output->writeFieldBegin('ire', TType::STRUCT, 1);
+      $xfer += $this->ire->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ace !== null) {
+      $xfer += $output->writeFieldBegin('ace', TType::STRUCT, 2);
+      $xfer += $this->ace->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ase !== null) {
+      $xfer += $output->writeFieldBegin('ase', TType::STRUCT, 3);
+      $xfer += $this->ase->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_deleteWorkflow_args {
+  static $_TSPEC;
+
+  public $workflowTemplateId = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'workflowTemplateId',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['workflowTemplateId'])) {
+        $this->workflowTemplateId = $vals['workflowTemplateId'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_deleteWorkflow_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->workflowTemplateId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_deleteWorkflow_args');
+    if ($this->workflowTemplateId !== null) {
+      $xfer += $output->writeFieldBegin('workflowTemplateId', TType::STRING, 1);
+      $xfer += $output->writeString($this->workflowTemplateId);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_deleteWorkflow_result {
+  static $_TSPEC;
+
+  public $ire = null;
+  public $ace = null;
+  public $ase = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'ire',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\InvalidRequestException',
+          ),
+        2 => array(
+          'var' => 'ace',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataClientException',
+          ),
+        3 => array(
+          'var' => 'ase',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataSystemException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['ire'])) {
+        $this->ire = $vals['ire'];
+      }
+      if (isset($vals['ace'])) {
+        $this->ace = $vals['ace'];
+      }
+      if (isset($vals['ase'])) {
+        $this->ase = $vals['ase'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_deleteWorkflow_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->ire = new \Airavata\API\Error\InvalidRequestException();
+            $xfer += $this->ire->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ace = new \Airavata\API\Error\AiravataClientException();
+            $xfer += $this->ace->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRUCT) {
+            $this->ase = new \Airavata\API\Error\AiravataSystemException();
+            $xfer += $this->ase->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_deleteWorkflow_result');
+    if ($this->ire !== null) {
+      $xfer += $output->writeFieldBegin('ire', TType::STRUCT, 1);
+      $xfer += $this->ire->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ace !== null) {
+      $xfer += $output->writeFieldBegin('ace', TType::STRUCT, 2);
+      $xfer += $this->ace->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ase !== null) {
+      $xfer += $output->writeFieldBegin('ase', TType::STRUCT, 3);
+      $xfer += $this->ase->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_registerWorkflow_args {
+  static $_TSPEC;
+
+  public $workflow = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'workflow',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workflow',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['workflow'])) {
+        $this->workflow = $vals['workflow'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_registerWorkflow_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->workflow = new \Airavata\Model\Workflow();
+            $xfer += $this->workflow->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_registerWorkflow_args');
+    if ($this->workflow !== null) {
+      if (!is_object($this->workflow)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('workflow', TType::STRUCT, 1);
+      $xfer += $this->workflow->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_registerWorkflow_result {
+  static $_TSPEC;
+
+  public $success = null;
+  public $ire = null;
+  public $ace = null;
+  public $ase = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::STRING,
+          ),
+        1 => array(
+          'var' => 'ire',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\InvalidRequestException',
+          ),
+        2 => array(
+          'var' => 'ace',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataClientException',
+          ),
+        3 => array(
+          'var' => 'ase',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataSystemException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+      if (isset($vals['ire'])) {
+        $this->ire = $vals['ire'];
+      }
+      if (isset($vals['ace'])) {
+        $this->ace = $vals['ace'];
+      }
+      if (isset($vals['ase'])) {
+        $this->ase = $vals['ase'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_registerWorkflow_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->success);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->ire = new \Airavata\API\Error\InvalidRequestException();
+            $xfer += $this->ire->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ace = new \Airavata\API\Error\AiravataClientException();
+            $xfer += $this->ace->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRUCT) {
+            $this->ase = new \Airavata\API\Error\AiravataSystemException();
+            $xfer += $this->ase->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_registerWorkflow_result');
+    if ($this->success !== null) {
+      $xfer += $output->writeFieldBegin('success', TType::STRING, 0);
+      $xfer += $output->writeString($this->success);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ire !== null) {
+      $xfer += $output->writeFieldBegin('ire', TType::STRUCT, 1);
+      $xfer += $this->ire->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ace !== null) {
+      $xfer += $output->writeFieldBegin('ace', TType::STRUCT, 2);
+      $xfer += $this->ace->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ase !== null) {
+      $xfer += $output->writeFieldBegin('ase', TType::STRUCT, 3);
+      $xfer += $this->ase->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_updateWorkflow_args {
+  static $_TSPEC;
+
+  public $workflowTemplateId = null;
+  public $workflow = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'workflowTemplateId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'workflow',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\Model\Workflow',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['workflowTemplateId'])) {
+        $this->workflowTemplateId = $vals['workflowTemplateId'];
+      }
+      if (isset($vals['workflow'])) {
+        $this->workflow = $vals['workflow'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_updateWorkflow_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->workflowTemplateId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->workflow = new \Airavata\Model\Workflow();
+            $xfer += $this->workflow->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_updateWorkflow_args');
+    if ($this->workflowTemplateId !== null) {
+      $xfer += $output->writeFieldBegin('workflowTemplateId', TType::STRING, 1);
+      $xfer += $output->writeString($this->workflowTemplateId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->workflow !== null) {
+      if (!is_object($this->workflow)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('workflow', TType::STRUCT, 2);
+      $xfer += $this->workflow->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_updateWorkflow_result {
+  static $_TSPEC;
+
+  public $ire = null;
+  public $ace = null;
+  public $ase = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'ire',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\InvalidRequestException',
+          ),
+        2 => array(
+          'var' => 'ace',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataClientException',
+          ),
+        3 => array(
+          'var' => 'ase',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataSystemException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['ire'])) {
+        $this->ire = $vals['ire'];
+      }
+      if (isset($vals['ace'])) {
+        $this->ace = $vals['ace'];
+      }
+      if (isset($vals['ase'])) {
+        $this->ase = $vals['ase'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_updateWorkflow_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->ire = new \Airavata\API\Error\InvalidRequestException();
+            $xfer += $this->ire->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ace = new \Airavata\API\Error\AiravataClientException();
+            $xfer += $this->ace->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRUCT) {
+            $this->ase = new \Airavata\API\Error\AiravataSystemException();
+            $xfer += $this->ase->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_updateWorkflow_result');
+    if ($this->ire !== null) {
+      $xfer += $output->writeFieldBegin('ire', TType::STRUCT, 1);
+      $xfer += $this->ire->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ace !== null) {
+      $xfer += $output->writeFieldBegin('ace', TType::STRUCT, 2);
+      $xfer += $this->ace->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ase !== null) {
+      $xfer += $output->writeFieldBegin('ase', TType::STRUCT, 3);
+      $xfer += $this->ase->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_getWorkflowTemplateId_args {
+  static $_TSPEC;
+
+  public $workflowName = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'workflowName',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['workflowName'])) {
+        $this->workflowName = $vals['workflowName'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_getWorkflowTemplateId_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->workflowName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_getWorkflowTemplateId_args');
+    if ($this->workflowName !== null) {
+      $xfer += $output->writeFieldBegin('workflowName', TType::STRING, 1);
+      $xfer += $output->writeString($this->workflowName);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_getWorkflowTemplateId_result {
+  static $_TSPEC;
+
+  public $success = null;
+  public $ire = null;
+  public $ace = null;
+  public $ase = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::STRING,
+          ),
+        1 => array(
+          'var' => 'ire',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\InvalidRequestException',
+          ),
+        2 => array(
+          'var' => 'ace',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataClientException',
+          ),
+        3 => array(
+          'var' => 'ase',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataSystemException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+      if (isset($vals['ire'])) {
+        $this->ire = $vals['ire'];
+      }
+      if (isset($vals['ace'])) {
+        $this->ace = $vals['ace'];
+      }
+      if (isset($vals['ase'])) {
+        $this->ase = $vals['ase'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_getWorkflowTemplateId_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->success);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->ire = new \Airavata\API\Error\InvalidRequestException();
+            $xfer += $this->ire->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ace = new \Airavata\API\Error\AiravataClientException();
+            $xfer += $this->ace->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRUCT) {
+            $this->ase = new \Airavata\API\Error\AiravataSystemException();
+            $xfer += $this->ase->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_getWorkflowTemplateId_result');
+    if ($this->success !== null) {
+      $xfer += $output->writeFieldBegin('success', TType::STRING, 0);
+      $xfer += $output->writeString($this->success);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ire !== null) {
+      $xfer += $output->writeFieldBegin('ire', TType::STRUCT, 1);
+      $xfer += $this->ire->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ace !== null) {
+      $xfer += $output->writeFieldBegin('ace', TType::STRUCT, 2);
+      $xfer += $this->ace->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ase !== null) {
+      $xfer += $output->writeFieldBegin('ase', TType::STRUCT, 3);
+      $xfer += $this->ase->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_isWorkflowExistWithName_args {
+  static $_TSPEC;
+
+  public $workflowName = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'workflowName',
+          'type' => TType::STRING,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['workflowName'])) {
+        $this->workflowName = $vals['workflowName'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_isWorkflowExistWithName_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->workflowName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_isWorkflowExistWithName_args');
+    if ($this->workflowName !== null) {
+      $xfer += $output->writeFieldBegin('workflowName', TType::STRING, 1);
+      $xfer += $output->writeString($this->workflowName);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Workflow_isWorkflowExistWithName_result {
+  static $_TSPEC;
+
+  public $success = null;
+  public $ire = null;
+  public $ace = null;
+  public $ase = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::BOOL,
+          ),
+        1 => array(
+          'var' => 'ire',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\InvalidRequestException',
+          ),
+        2 => array(
+          'var' => 'ace',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataClientException',
+          ),
+        3 => array(
+          'var' => 'ase',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataSystemException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+      if (isset($vals['ire'])) {
+        $this->ire = $vals['ire'];
+      }
+      if (isset($vals['ace'])) {
+        $this->ace = $vals['ace'];
+      }
+      if (isset($vals['ase'])) {
+        $this->ase = $vals['ase'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Workflow_isWorkflowExistWithName_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->success);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->ire = new \Airavata\API\Error\InvalidRequestException();
+            $xfer += $this->ire->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ace = new \Airavata\API\Error\AiravataClientException();
+            $xfer += $this->ace->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRUCT) {
+            $this->ase = new \Airavata\API\Error\AiravataSystemException();
+            $xfer += $this->ase->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Workflow_isWorkflowExistWithName_result');
+    if ($this->success !== null) {
+      $xfer += $output->writeFieldBegin('success', TType::BOOL, 0);
+      $xfer += $output->writeBool($this->success);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ire !== null) {
+      $xfer += $output->writeFieldBegin('ire', TType::STRUCT, 1);
+      $xfer += $this->ire->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ace !== null) {
+      $xfer += $output->writeFieldBegin('ace', TType::STRUCT, 2);
+      $xfer += $this->ace->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ase !== null) {
+      $xfer += $output->writeFieldBegin('ase', TType::STRUCT, 3);
+      $xfer += $this->ase->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/Airavata/API/Workflow/Types.php
----------------------------------------------------------------------
diff --git a/app/libraries/Airavata/API/Workflow/Types.php b/app/libraries/Airavata/API/Workflow/Types.php
new file mode 100644
index 0000000..b5ffe55
--- /dev/null
+++ b/app/libraries/Airavata/API/Workflow/Types.php
@@ -0,0 +1,22 @@
+<?php
+namespace Airavata\API\Workflow;
+
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+use Thrift\Base\TBase;
+use Thrift\Type\TType;
+use Thrift\Type\TMessageType;
+use Thrift\Exception\TException;
+use Thrift\Exception\TProtocolException;
+use Thrift\Protocol\TProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
+use Thrift\Exception\TApplicationException;
+
+
+$GLOBALS['workflowAPI_CONSTANTS']['AIRAVATA_API_VERSION'] = "0.13.0";
+
+


[30/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/js/moment.js
----------------------------------------------------------------------
diff --git a/public/js/moment.js b/public/js/moment.js
new file mode 100644
index 0000000..cf8bb30
--- /dev/null
+++ b/public/js/moment.js
@@ -0,0 +1,2936 @@
+//! moment.js
+//! version : 2.8.4
+//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
+//! license : MIT
+//! momentjs.com
+
+(function (undefined) {
+    /************************************
+        Constants
+    ************************************/
+
+    var moment,
+        VERSION = '2.8.4',
+        // the global-scope this is NOT the global object in Node.js
+        globalScope = typeof global !== 'undefined' ? global : this,
+        oldGlobalMoment,
+        round = Math.round,
+        hasOwnProperty = Object.prototype.hasOwnProperty,
+        i,
+
+        YEAR = 0,
+        MONTH = 1,
+        DATE = 2,
+        HOUR = 3,
+        MINUTE = 4,
+        SECOND = 5,
+        MILLISECOND = 6,
+
+        // internal storage for locale config files
+        locales = {},
+
+        // extra moment internal properties (plugins register props here)
+        momentProperties = [],
+
+        // check for nodeJS
+        hasModule = (typeof module !== 'undefined' && module && module.exports),
+
+        // ASP.NET json date format regex
+        aspNetJsonRegex = /^\/?Date\((\-?\d+)/i,
+        aspNetTimeSpanJsonRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,
+
+        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
+        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
+        isoDurationRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/,
+
+        // format tokens
+        formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g,
+        localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
+
+        // parsing token regexes
+        parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99
+        parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999
+        parseTokenOneToFourDigits = /\d{1,4}/, // 0 - 9999
+        parseTokenOneToSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999
+        parseTokenDigits = /\d+/, // nonzero number of digits
+        parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic.
+        parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
+        parseTokenT = /T/i, // T (ISO separator)
+        parseTokenOffsetMs = /[\+\-]?\d+/, // 1234567890123
+        parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
+
+        //strict parsing regexes
+        parseTokenOneDigit = /\d/, // 0 - 9
+        parseTokenTwoDigits = /\d\d/, // 00 - 99
+        parseTokenThreeDigits = /\d{3}/, // 000 - 999
+        parseTokenFourDigits = /\d{4}/, // 0000 - 9999
+        parseTokenSixDigits = /[+-]?\d{6}/, // -999,999 - 999,999
+        parseTokenSignedNumber = /[+-]?\d+/, // -inf - inf
+
+        // iso 8601 regex
+        // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
+        isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
+
+        isoFormat = 'YYYY-MM-DDTHH:mm:ssZ',
+
+        isoDates = [
+            ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/],
+            ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/],
+            ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/],
+            ['GGGG-[W]WW', /\d{4}-W\d{2}/],
+            ['YYYY-DDD', /\d{4}-\d{3}/]
+        ],
+
+        // iso time formats and regexes
+        isoTimes = [
+            ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/],
+            ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/],
+            ['HH:mm', /(T| )\d\d:\d\d/],
+            ['HH', /(T| )\d\d/]
+        ],
+
+        // timezone chunker '+10:00' > ['10', '00'] or '-1530' > ['-15', '30']
+        parseTimezoneChunker = /([\+\-]|\d\d)/gi,
+
+        // getter and setter names
+        proxyGettersAndSetters = 'Date|Hours|Minutes|Seconds|Milliseconds'.split('|'),
+        unitMillisecondFactors = {
+            'Milliseconds' : 1,
+            'Seconds' : 1e3,
+            'Minutes' : 6e4,
+            'Hours' : 36e5,
+            'Days' : 864e5,
+            'Months' : 2592e6,
+            'Years' : 31536e6
+        },
+
+        unitAliases = {
+            ms : 'millisecond',
+            s : 'second',
+            m : 'minute',
+            h : 'hour',
+            d : 'day',
+            D : 'date',
+            w : 'week',
+            W : 'isoWeek',
+            M : 'month',
+            Q : 'quarter',
+            y : 'year',
+            DDD : 'dayOfYear',
+            e : 'weekday',
+            E : 'isoWeekday',
+            gg: 'weekYear',
+            GG: 'isoWeekYear'
+        },
+
+        camelFunctions = {
+            dayofyear : 'dayOfYear',
+            isoweekday : 'isoWeekday',
+            isoweek : 'isoWeek',
+            weekyear : 'weekYear',
+            isoweekyear : 'isoWeekYear'
+        },
+
+        // format function strings
+        formatFunctions = {},
+
+        // default relative time thresholds
+        relativeTimeThresholds = {
+            s: 45,  // seconds to minute
+            m: 45,  // minutes to hour
+            h: 22,  // hours to day
+            d: 26,  // days to month
+            M: 11   // months to year
+        },
+
+        // tokens to ordinalize and pad
+        ordinalizeTokens = 'DDD w W M D d'.split(' '),
+        paddedTokens = 'M D H h m s w W'.split(' '),
+
+        formatTokenFunctions = {
+            M    : function () {
+                return this.month() + 1;
+            },
+            MMM  : function (format) {
+                return this.localeData().monthsShort(this, format);
+            },
+            MMMM : function (format) {
+                return this.localeData().months(this, format);
+            },
+            D    : function () {
+                return this.date();
+            },
+            DDD  : function () {
+                return this.dayOfYear();
+            },
+            d    : function () {
+                return this.day();
+            },
+            dd   : function (format) {
+                return this.localeData().weekdaysMin(this, format);
+            },
+            ddd  : function (format) {
+                return this.localeData().weekdaysShort(this, format);
+            },
+            dddd : function (format) {
+                return this.localeData().weekdays(this, format);
+            },
+            w    : function () {
+                return this.week();
+            },
+            W    : function () {
+                return this.isoWeek();
+            },
+            YY   : function () {
+                return leftZeroFill(this.year() % 100, 2);
+            },
+            YYYY : function () {
+                return leftZeroFill(this.year(), 4);
+            },
+            YYYYY : function () {
+                return leftZeroFill(this.year(), 5);
+            },
+            YYYYYY : function () {
+                var y = this.year(), sign = y >= 0 ? '+' : '-';
+                return sign + leftZeroFill(Math.abs(y), 6);
+            },
+            gg   : function () {
+                return leftZeroFill(this.weekYear() % 100, 2);
+            },
+            gggg : function () {
+                return leftZeroFill(this.weekYear(), 4);
+            },
+            ggggg : function () {
+                return leftZeroFill(this.weekYear(), 5);
+            },
+            GG   : function () {
+                return leftZeroFill(this.isoWeekYear() % 100, 2);
+            },
+            GGGG : function () {
+                return leftZeroFill(this.isoWeekYear(), 4);
+            },
+            GGGGG : function () {
+                return leftZeroFill(this.isoWeekYear(), 5);
+            },
+            e : function () {
+                return this.weekday();
+            },
+            E : function () {
+                return this.isoWeekday();
+            },
+            a    : function () {
+                return this.localeData().meridiem(this.hours(), this.minutes(), true);
+            },
+            A    : function () {
+                return this.localeData().meridiem(this.hours(), this.minutes(), false);
+            },
+            H    : function () {
+                return this.hours();
+            },
+            h    : function () {
+                return this.hours() % 12 || 12;
+            },
+            m    : function () {
+                return this.minutes();
+            },
+            s    : function () {
+                return this.seconds();
+            },
+            S    : function () {
+                return toInt(this.milliseconds() / 100);
+            },
+            SS   : function () {
+                return leftZeroFill(toInt(this.milliseconds() / 10), 2);
+            },
+            SSS  : function () {
+                return leftZeroFill(this.milliseconds(), 3);
+            },
+            SSSS : function () {
+                return leftZeroFill(this.milliseconds(), 3);
+            },
+            Z    : function () {
+                var a = -this.zone(),
+                    b = '+';
+                if (a < 0) {
+                    a = -a;
+                    b = '-';
+                }
+                return b + leftZeroFill(toInt(a / 60), 2) + ':' + leftZeroFill(toInt(a) % 60, 2);
+            },
+            ZZ   : function () {
+                var a = -this.zone(),
+                    b = '+';
+                if (a < 0) {
+                    a = -a;
+                    b = '-';
+                }
+                return b + leftZeroFill(toInt(a / 60), 2) + leftZeroFill(toInt(a) % 60, 2);
+            },
+            z : function () {
+                return this.zoneAbbr();
+            },
+            zz : function () {
+                return this.zoneName();
+            },
+            x    : function () {
+                return this.valueOf();
+            },
+            X    : function () {
+                return this.unix();
+            },
+            Q : function () {
+                return this.quarter();
+            }
+        },
+
+        deprecations = {},
+
+        lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin'];
+
+    // Pick the first defined of two or three arguments. dfl comes from
+    // default.
+    function dfl(a, b, c) {
+        switch (arguments.length) {
+            case 2: return a != null ? a : b;
+            case 3: return a != null ? a : b != null ? b : c;
+            default: throw new Error('Implement me');
+        }
+    }
+
+    function hasOwnProp(a, b) {
+        return hasOwnProperty.call(a, b);
+    }
+
+    function defaultParsingFlags() {
+        // We need to deep clone this object, and es5 standard is not very
+        // helpful.
+        return {
+            empty : false,
+            unusedTokens : [],
+            unusedInput : [],
+            overflow : -2,
+            charsLeftOver : 0,
+            nullInput : false,
+            invalidMonth : null,
+            invalidFormat : false,
+            userInvalidated : false,
+            iso: false
+        };
+    }
+
+    function printMsg(msg) {
+        if (moment.suppressDeprecationWarnings === false &&
+                typeof console !== 'undefined' && console.warn) {
+            console.warn('Deprecation warning: ' + msg);
+        }
+    }
+
+    function deprecate(msg, fn) {
+        var firstTime = true;
+        return extend(function () {
+            if (firstTime) {
+                printMsg(msg);
+                firstTime = false;
+            }
+            return fn.apply(this, arguments);
+        }, fn);
+    }
+
+    function deprecateSimple(name, msg) {
+        if (!deprecations[name]) {
+            printMsg(msg);
+            deprecations[name] = true;
+        }
+    }
+
+    function padToken(func, count) {
+        return function (a) {
+            return leftZeroFill(func.call(this, a), count);
+        };
+    }
+    function ordinalizeToken(func, period) {
+        return function (a) {
+            return this.localeData().ordinal(func.call(this, a), period);
+        };
+    }
+
+    while (ordinalizeTokens.length) {
+        i = ordinalizeTokens.pop();
+        formatTokenFunctions[i + 'o'] = ordinalizeToken(formatTokenFunctions[i], i);
+    }
+    while (paddedTokens.length) {
+        i = paddedTokens.pop();
+        formatTokenFunctions[i + i] = padToken(formatTokenFunctions[i], 2);
+    }
+    formatTokenFunctions.DDDD = padToken(formatTokenFunctions.DDD, 3);
+
+
+    /************************************
+        Constructors
+    ************************************/
+
+    function Locale() {
+    }
+
+    // Moment prototype object
+    function Moment(config, skipOverflow) {
+        if (skipOverflow !== false) {
+            checkOverflow(config);
+        }
+        copyConfig(this, config);
+        this._d = new Date(+config._d);
+    }
+
+    // Duration Constructor
+    function Duration(duration) {
+        var normalizedInput = normalizeObjectUnits(duration),
+            years = normalizedInput.year || 0,
+            quarters = normalizedInput.quarter || 0,
+            months = normalizedInput.month || 0,
+            weeks = normalizedInput.week || 0,
+            days = normalizedInput.day || 0,
+            hours = normalizedInput.hour || 0,
+            minutes = normalizedInput.minute || 0,
+            seconds = normalizedInput.second || 0,
+            milliseconds = normalizedInput.millisecond || 0;
+
+        // representation for dateAddRemove
+        this._milliseconds = +milliseconds +
+            seconds * 1e3 + // 1000
+            minutes * 6e4 + // 1000 * 60
+            hours * 36e5; // 1000 * 60 * 60
+        // Because of dateAddRemove treats 24 hours as different from a
+        // day when working around DST, we need to store them separately
+        this._days = +days +
+            weeks * 7;
+        // It is impossible translate months into days without knowing
+        // which months you are are talking about, so we have to store
+        // it separately.
+        this._months = +months +
+            quarters * 3 +
+            years * 12;
+
+        this._data = {};
+
+        this._locale = moment.localeData();
+
+        this._bubble();
+    }
+
+    /************************************
+        Helpers
+    ************************************/
+
+
+    function extend(a, b) {
+        for (var i in b) {
+            if (hasOwnProp(b, i)) {
+                a[i] = b[i];
+            }
+        }
+
+        if (hasOwnProp(b, 'toString')) {
+            a.toString = b.toString;
+        }
+
+        if (hasOwnProp(b, 'valueOf')) {
+            a.valueOf = b.valueOf;
+        }
+
+        return a;
+    }
+
+    function copyConfig(to, from) {
+        var i, prop, val;
+
+        if (typeof from._isAMomentObject !== 'undefined') {
+            to._isAMomentObject = from._isAMomentObject;
+        }
+        if (typeof from._i !== 'undefined') {
+            to._i = from._i;
+        }
+        if (typeof from._f !== 'undefined') {
+            to._f = from._f;
+        }
+        if (typeof from._l !== 'undefined') {
+            to._l = from._l;
+        }
+        if (typeof from._strict !== 'undefined') {
+            to._strict = from._strict;
+        }
+        if (typeof from._tzm !== 'undefined') {
+            to._tzm = from._tzm;
+        }
+        if (typeof from._isUTC !== 'undefined') {
+            to._isUTC = from._isUTC;
+        }
+        if (typeof from._offset !== 'undefined') {
+            to._offset = from._offset;
+        }
+        if (typeof from._pf !== 'undefined') {
+            to._pf = from._pf;
+        }
+        if (typeof from._locale !== 'undefined') {
+            to._locale = from._locale;
+        }
+
+        if (momentProperties.length > 0) {
+            for (i in momentProperties) {
+                prop = momentProperties[i];
+                val = from[prop];
+                if (typeof val !== 'undefined') {
+                    to[prop] = val;
+                }
+            }
+        }
+
+        return to;
+    }
+
+    function absRound(number) {
+        if (number < 0) {
+            return Math.ceil(number);
+        } else {
+            return Math.floor(number);
+        }
+    }
+
+    // left zero fill a number
+    // see http://jsperf.com/left-zero-filling for performance comparison
+    function leftZeroFill(number, targetLength, forceSign) {
+        var output = '' + Math.abs(number),
+            sign = number >= 0;
+
+        while (output.length < targetLength) {
+            output = '0' + output;
+        }
+        return (sign ? (forceSign ? '+' : '') : '-') + output;
+    }
+
+    function positiveMomentsDifference(base, other) {
+        var res = {milliseconds: 0, months: 0};
+
+        res.months = other.month() - base.month() +
+            (other.year() - base.year()) * 12;
+        if (base.clone().add(res.months, 'M').isAfter(other)) {
+            --res.months;
+        }
+
+        res.milliseconds = +other - +(base.clone().add(res.months, 'M'));
+
+        return res;
+    }
+
+    function momentsDifference(base, other) {
+        var res;
+        other = makeAs(other, base);
+        if (base.isBefore(other)) {
+            res = positiveMomentsDifference(base, other);
+        } else {
+            res = positiveMomentsDifference(other, base);
+            res.milliseconds = -res.milliseconds;
+            res.months = -res.months;
+        }
+
+        return res;
+    }
+
+    // TODO: remove 'name' arg after deprecation is removed
+    function createAdder(direction, name) {
+        return function (val, period) {
+            var dur, tmp;
+            //invert the arguments, but complain about it
+            if (period !== null && !isNaN(+period)) {
+                deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period).');
+                tmp = val; val = period; period = tmp;
+            }
+
+            val = typeof val === 'string' ? +val : val;
+            dur = moment.duration(val, period);
+            addOrSubtractDurationFromMoment(this, dur, direction);
+            return this;
+        };
+    }
+
+    function addOrSubtractDurationFromMoment(mom, duration, isAdding, updateOffset) {
+        var milliseconds = duration._milliseconds,
+            days = duration._days,
+            months = duration._months;
+        updateOffset = updateOffset == null ? true : updateOffset;
+
+        if (milliseconds) {
+            mom._d.setTime(+mom._d + milliseconds * isAdding);
+        }
+        if (days) {
+            rawSetter(mom, 'Date', rawGetter(mom, 'Date') + days * isAdding);
+        }
+        if (months) {
+            rawMonthSetter(mom, rawGetter(mom, 'Month') + months * isAdding);
+        }
+        if (updateOffset) {
+            moment.updateOffset(mom, days || months);
+        }
+    }
+
+    // check if is an array
+    function isArray(input) {
+        return Object.prototype.toString.call(input) === '[object Array]';
+    }
+
+    function isDate(input) {
+        return Object.prototype.toString.call(input) === '[object Date]' ||
+            input instanceof Date;
+    }
+
+    // compare two arrays, return the number of differences
+    function compareArrays(array1, array2, dontConvert) {
+        var len = Math.min(array1.length, array2.length),
+            lengthDiff = Math.abs(array1.length - array2.length),
+            diffs = 0,
+            i;
+        for (i = 0; i < len; i++) {
+            if ((dontConvert && array1[i] !== array2[i]) ||
+                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {
+                diffs++;
+            }
+        }
+        return diffs + lengthDiff;
+    }
+
+    function normalizeUnits(units) {
+        if (units) {
+            var lowered = units.toLowerCase().replace(/(.)s$/, '$1');
+            units = unitAliases[units] || camelFunctions[lowered] || lowered;
+        }
+        return units;
+    }
+
+    function normalizeObjectUnits(inputObject) {
+        var normalizedInput = {},
+            normalizedProp,
+            prop;
+
+        for (prop in inputObject) {
+            if (hasOwnProp(inputObject, prop)) {
+                normalizedProp = normalizeUnits(prop);
+                if (normalizedProp) {
+                    normalizedInput[normalizedProp] = inputObject[prop];
+                }
+            }
+        }
+
+        return normalizedInput;
+    }
+
+    function makeList(field) {
+        var count, setter;
+
+        if (field.indexOf('week') === 0) {
+            count = 7;
+            setter = 'day';
+        }
+        else if (field.indexOf('month') === 0) {
+            count = 12;
+            setter = 'month';
+        }
+        else {
+            return;
+        }
+
+        moment[field] = function (format, index) {
+            var i, getter,
+                method = moment._locale[field],
+                results = [];
+
+            if (typeof format === 'number') {
+                index = format;
+                format = undefined;
+            }
+
+            getter = function (i) {
+                var m = moment().utc().set(setter, i);
+                return method.call(moment._locale, m, format || '');
+            };
+
+            if (index != null) {
+                return getter(index);
+            }
+            else {
+                for (i = 0; i < count; i++) {
+                    results.push(getter(i));
+                }
+                return results;
+            }
+        };
+    }
+
+    function toInt(argumentForCoercion) {
+        var coercedNumber = +argumentForCoercion,
+            value = 0;
+
+        if (coercedNumber !== 0 && isFinite(coercedNumber)) {
+            if (coercedNumber >= 0) {
+                value = Math.floor(coercedNumber);
+            } else {
+                value = Math.ceil(coercedNumber);
+            }
+        }
+
+        return value;
+    }
+
+    function daysInMonth(year, month) {
+        return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();
+    }
+
+    function weeksInYear(year, dow, doy) {
+        return weekOfYear(moment([year, 11, 31 + dow - doy]), dow, doy).week;
+    }
+
+    function daysInYear(year) {
+        return isLeapYear(year) ? 366 : 365;
+    }
+
+    function isLeapYear(year) {
+        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
+    }
+
+    function checkOverflow(m) {
+        var overflow;
+        if (m._a && m._pf.overflow === -2) {
+            overflow =
+                m._a[MONTH] < 0 || m._a[MONTH] > 11 ? MONTH :
+                m._a[DATE] < 1 || m._a[DATE] > daysInMonth(m._a[YEAR], m._a[MONTH]) ? DATE :
+                m._a[HOUR] < 0 || m._a[HOUR] > 24 ||
+                    (m._a[HOUR] === 24 && (m._a[MINUTE] !== 0 ||
+                                           m._a[SECOND] !== 0 ||
+                                           m._a[MILLISECOND] !== 0)) ? HOUR :
+                m._a[MINUTE] < 0 || m._a[MINUTE] > 59 ? MINUTE :
+                m._a[SECOND] < 0 || m._a[SECOND] > 59 ? SECOND :
+                m._a[MILLISECOND] < 0 || m._a[MILLISECOND] > 999 ? MILLISECOND :
+                -1;
+
+            if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
+                overflow = DATE;
+            }
+
+            m._pf.overflow = overflow;
+        }
+    }
+
+    function isValid(m) {
+        if (m._isValid == null) {
+            m._isValid = !isNaN(m._d.getTime()) &&
+                m._pf.overflow < 0 &&
+                !m._pf.empty &&
+                !m._pf.invalidMonth &&
+                !m._pf.nullInput &&
+                !m._pf.invalidFormat &&
+                !m._pf.userInvalidated;
+
+            if (m._strict) {
+                m._isValid = m._isValid &&
+                    m._pf.charsLeftOver === 0 &&
+                    m._pf.unusedTokens.length === 0 &&
+                    m._pf.bigHour === undefined;
+            }
+        }
+        return m._isValid;
+    }
+
+    function normalizeLocale(key) {
+        return key ? key.toLowerCase().replace('_', '-') : key;
+    }
+
+    // pick the locale from the array
+    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
+    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
+    function chooseLocale(names) {
+        var i = 0, j, next, locale, split;
+
+        while (i < names.length) {
+            split = normalizeLocale(names[i]).split('-');
+            j = split.length;
+            next = normalizeLocale(names[i + 1]);
+            next = next ? next.split('-') : null;
+            while (j > 0) {
+                locale = loadLocale(split.slice(0, j).join('-'));
+                if (locale) {
+                    return locale;
+                }
+                if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
+                    //the next array item is better than a shallower substring of this one
+                    break;
+                }
+                j--;
+            }
+            i++;
+        }
+        return null;
+    }
+
+    function loadLocale(name) {
+        var oldLocale = null;
+        if (!locales[name] && hasModule) {
+            try {
+                oldLocale = moment.locale();
+                require('./locale/' + name);
+                // because defineLocale currently also sets the global locale, we want to undo that for lazy loaded locales
+                moment.locale(oldLocale);
+            } catch (e) { }
+        }
+        return locales[name];
+    }
+
+    // Return a moment from input, that is local/utc/zone equivalent to model.
+    function makeAs(input, model) {
+        var res, diff;
+        if (model._isUTC) {
+            res = model.clone();
+            diff = (moment.isMoment(input) || isDate(input) ?
+                    +input : +moment(input)) - (+res);
+            // Use low-level api, because this fn is low-level api.
+            res._d.setTime(+res._d + diff);
+            moment.updateOffset(res, false);
+            return res;
+        } else {
+            return moment(input).local();
+        }
+    }
+
+    /************************************
+        Locale
+    ************************************/
+
+
+    extend(Locale.prototype, {
+
+        set : function (config) {
+            var prop, i;
+            for (i in config) {
+                prop = config[i];
+                if (typeof prop === 'function') {
+                    this[i] = prop;
+                } else {
+                    this['_' + i] = prop;
+                }
+            }
+            // Lenient ordinal parsing accepts just a number in addition to
+            // number + (possibly) stuff coming from _ordinalParseLenient.
+            this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + /\d{1,2}/.source);
+        },
+
+        _months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+        months : function (m) {
+            return this._months[m.month()];
+        },
+
+        _monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+        monthsShort : function (m) {
+            return this._monthsShort[m.month()];
+        },
+
+        monthsParse : function (monthName, format, strict) {
+            var i, mom, regex;
+
+            if (!this._monthsParse) {
+                this._monthsParse = [];
+                this._longMonthsParse = [];
+                this._shortMonthsParse = [];
+            }
+
+            for (i = 0; i < 12; i++) {
+                // make the regex if we don't have it already
+                mom = moment.utc([2000, i]);
+                if (strict && !this._longMonthsParse[i]) {
+                    this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');
+                    this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');
+                }
+                if (!strict && !this._monthsParse[i]) {
+                    regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
+                    this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
+                }
+                // test the regex
+                if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
+                    return i;
+                } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
+                    return i;
+                } else if (!strict && this._monthsParse[i].test(monthName)) {
+                    return i;
+                }
+            }
+        },
+
+        _weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+        weekdays : function (m) {
+            return this._weekdays[m.day()];
+        },
+
+        _weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+        weekdaysShort : function (m) {
+            return this._weekdaysShort[m.day()];
+        },
+
+        _weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+        weekdaysMin : function (m) {
+            return this._weekdaysMin[m.day()];
+        },
+
+        weekdaysParse : function (weekdayName) {
+            var i, mom, regex;
+
+            if (!this._weekdaysParse) {
+                this._weekdaysParse = [];
+            }
+
+            for (i = 0; i < 7; i++) {
+                // make the regex if we don't have it already
+                if (!this._weekdaysParse[i]) {
+                    mom = moment([2000, 1]).day(i);
+                    regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
+                    this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
+                }
+                // test the regex
+                if (this._weekdaysParse[i].test(weekdayName)) {
+                    return i;
+                }
+            }
+        },
+
+        _longDateFormat : {
+            LTS : 'h:mm:ss A',
+            LT : 'h:mm A',
+            L : 'MM/DD/YYYY',
+            LL : 'MMMM D, YYYY',
+            LLL : 'MMMM D, YYYY LT',
+            LLLL : 'dddd, MMMM D, YYYY LT'
+        },
+        longDateFormat : function (key) {
+            var output = this._longDateFormat[key];
+            if (!output && this._longDateFormat[key.toUpperCase()]) {
+                output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) {
+                    return val.slice(1);
+                });
+                this._longDateFormat[key] = output;
+            }
+            return output;
+        },
+
+        isPM : function (input) {
+            // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
+            // Using charAt should be more compatible.
+            return ((input + '').toLowerCase().charAt(0) === 'p');
+        },
+
+        _meridiemParse : /[ap]\.?m?\.?/i,
+        meridiem : function (hours, minutes, isLower) {
+            if (hours > 11) {
+                return isLower ? 'pm' : 'PM';
+            } else {
+                return isLower ? 'am' : 'AM';
+            }
+        },
+
+        _calendar : {
+            sameDay : '[Today at] LT',
+            nextDay : '[Tomorrow at] LT',
+            nextWeek : 'dddd [at] LT',
+            lastDay : '[Yesterday at] LT',
+            lastWeek : '[Last] dddd [at] LT',
+            sameElse : 'L'
+        },
+        calendar : function (key, mom, now) {
+            var output = this._calendar[key];
+            return typeof output === 'function' ? output.apply(mom, [now]) : output;
+        },
+
+        _relativeTime : {
+            future : 'in %s',
+            past : '%s ago',
+            s : 'a few seconds',
+            m : 'a minute',
+            mm : '%d minutes',
+            h : 'an hour',
+            hh : '%d hours',
+            d : 'a day',
+            dd : '%d days',
+            M : 'a month',
+            MM : '%d months',
+            y : 'a year',
+            yy : '%d years'
+        },
+
+        relativeTime : function (number, withoutSuffix, string, isFuture) {
+            var output = this._relativeTime[string];
+            return (typeof output === 'function') ?
+                output(number, withoutSuffix, string, isFuture) :
+                output.replace(/%d/i, number);
+        },
+
+        pastFuture : function (diff, output) {
+            var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
+            return typeof format === 'function' ? format(output) : format.replace(/%s/i, output);
+        },
+
+        ordinal : function (number) {
+            return this._ordinal.replace('%d', number);
+        },
+        _ordinal : '%d',
+        _ordinalParse : /\d{1,2}/,
+
+        preparse : function (string) {
+            return string;
+        },
+
+        postformat : function (string) {
+            return string;
+        },
+
+        week : function (mom) {
+            return weekOfYear(mom, this._week.dow, this._week.doy).week;
+        },
+
+        _week : {
+            dow : 0, // Sunday is the first day of the week.
+            doy : 6  // The week that contains Jan 1st is the first week of the year.
+        },
+
+        _invalidDate: 'Invalid date',
+        invalidDate: function () {
+            return this._invalidDate;
+        }
+    });
+
+    /************************************
+        Formatting
+    ************************************/
+
+
+    function removeFormattingTokens(input) {
+        if (input.match(/\[[\s\S]/)) {
+            return input.replace(/^\[|\]$/g, '');
+        }
+        return input.replace(/\\/g, '');
+    }
+
+    function makeFormatFunction(format) {
+        var array = format.match(formattingTokens), i, length;
+
+        for (i = 0, length = array.length; i < length; i++) {
+            if (formatTokenFunctions[array[i]]) {
+                array[i] = formatTokenFunctions[array[i]];
+            } else {
+                array[i] = removeFormattingTokens(array[i]);
+            }
+        }
+
+        return function (mom) {
+            var output = '';
+            for (i = 0; i < length; i++) {
+                output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];
+            }
+            return output;
+        };
+    }
+
+    // format date using native date object
+    function formatMoment(m, format) {
+        if (!m.isValid()) {
+            return m.localeData().invalidDate();
+        }
+
+        format = expandFormat(format, m.localeData());
+
+        if (!formatFunctions[format]) {
+            formatFunctions[format] = makeFormatFunction(format);
+        }
+
+        return formatFunctions[format](m);
+    }
+
+    function expandFormat(format, locale) {
+        var i = 5;
+
+        function replaceLongDateFormatTokens(input) {
+            return locale.longDateFormat(input) || input;
+        }
+
+        localFormattingTokens.lastIndex = 0;
+        while (i >= 0 && localFormattingTokens.test(format)) {
+            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
+            localFormattingTokens.lastIndex = 0;
+            i -= 1;
+        }
+
+        return format;
+    }
+
+
+    /************************************
+        Parsing
+    ************************************/
+
+
+    // get the regex to find the next token
+    function getParseRegexForToken(token, config) {
+        var a, strict = config._strict;
+        switch (token) {
+        case 'Q':
+            return parseTokenOneDigit;
+        case 'DDDD':
+            return parseTokenThreeDigits;
+        case 'YYYY':
+        case 'GGGG':
+        case 'gggg':
+            return strict ? parseTokenFourDigits : parseTokenOneToFourDigits;
+        case 'Y':
+        case 'G':
+        case 'g':
+            return parseTokenSignedNumber;
+        case 'YYYYYY':
+        case 'YYYYY':
+        case 'GGGGG':
+        case 'ggggg':
+            return strict ? parseTokenSixDigits : parseTokenOneToSixDigits;
+        case 'S':
+            if (strict) {
+                return parseTokenOneDigit;
+            }
+            /* falls through */
+        case 'SS':
+            if (strict) {
+                return parseTokenTwoDigits;
+            }
+            /* falls through */
+        case 'SSS':
+            if (strict) {
+                return parseTokenThreeDigits;
+            }
+            /* falls through */
+        case 'DDD':
+            return parseTokenOneToThreeDigits;
+        case 'MMM':
+        case 'MMMM':
+        case 'dd':
+        case 'ddd':
+        case 'dddd':
+            return parseTokenWord;
+        case 'a':
+        case 'A':
+            return config._locale._meridiemParse;
+        case 'x':
+            return parseTokenOffsetMs;
+        case 'X':
+            return parseTokenTimestampMs;
+        case 'Z':
+        case 'ZZ':
+            return parseTokenTimezone;
+        case 'T':
+            return parseTokenT;
+        case 'SSSS':
+            return parseTokenDigits;
+        case 'MM':
+        case 'DD':
+        case 'YY':
+        case 'GG':
+        case 'gg':
+        case 'HH':
+        case 'hh':
+        case 'mm':
+        case 'ss':
+        case 'ww':
+        case 'WW':
+            return strict ? parseTokenTwoDigits : parseTokenOneOrTwoDigits;
+        case 'M':
+        case 'D':
+        case 'd':
+        case 'H':
+        case 'h':
+        case 'm':
+        case 's':
+        case 'w':
+        case 'W':
+        case 'e':
+        case 'E':
+            return parseTokenOneOrTwoDigits;
+        case 'Do':
+            return strict ? config._locale._ordinalParse : config._locale._ordinalParseLenient;
+        default :
+            a = new RegExp(regexpEscape(unescapeFormat(token.replace('\\', '')), 'i'));
+            return a;
+        }
+    }
+
+    function timezoneMinutesFromString(string) {
+        string = string || '';
+        var possibleTzMatches = (string.match(parseTokenTimezone) || []),
+            tzChunk = possibleTzMatches[possibleTzMatches.length - 1] || [],
+            parts = (tzChunk + '').match(parseTimezoneChunker) || ['-', 0, 0],
+            minutes = +(parts[1] * 60) + toInt(parts[2]);
+
+        return parts[0] === '+' ? -minutes : minutes;
+    }
+
+    // function to convert string input to date
+    function addTimeToArrayFromToken(token, input, config) {
+        var a, datePartArray = config._a;
+
+        switch (token) {
+        // QUARTER
+        case 'Q':
+            if (input != null) {
+                datePartArray[MONTH] = (toInt(input) - 1) * 3;
+            }
+            break;
+        // MONTH
+        case 'M' : // fall through to MM
+        case 'MM' :
+            if (input != null) {
+                datePartArray[MONTH] = toInt(input) - 1;
+            }
+            break;
+        case 'MMM' : // fall through to MMMM
+        case 'MMMM' :
+            a = config._locale.monthsParse(input, token, config._strict);
+            // if we didn't find a month name, mark the date as invalid.
+            if (a != null) {
+                datePartArray[MONTH] = a;
+            } else {
+                config._pf.invalidMonth = input;
+            }
+            break;
+        // DAY OF MONTH
+        case 'D' : // fall through to DD
+        case 'DD' :
+            if (input != null) {
+                datePartArray[DATE] = toInt(input);
+            }
+            break;
+        case 'Do' :
+            if (input != null) {
+                datePartArray[DATE] = toInt(parseInt(
+                            input.match(/\d{1,2}/)[0], 10));
+            }
+            break;
+        // DAY OF YEAR
+        case 'DDD' : // fall through to DDDD
+        case 'DDDD' :
+            if (input != null) {
+                config._dayOfYear = toInt(input);
+            }
+
+            break;
+        // YEAR
+        case 'YY' :
+            datePartArray[YEAR] = moment.parseTwoDigitYear(input);
+            break;
+        case 'YYYY' :
+        case 'YYYYY' :
+        case 'YYYYYY' :
+            datePartArray[YEAR] = toInt(input);
+            break;
+        // AM / PM
+        case 'a' : // fall through to A
+        case 'A' :
+            config._isPm = config._locale.isPM(input);
+            break;
+        // HOUR
+        case 'h' : // fall through to hh
+        case 'hh' :
+            config._pf.bigHour = true;
+            /* falls through */
+        case 'H' : // fall through to HH
+        case 'HH' :
+            datePartArray[HOUR] = toInt(input);
+            break;
+        // MINUTE
+        case 'm' : // fall through to mm
+        case 'mm' :
+            datePartArray[MINUTE] = toInt(input);
+            break;
+        // SECOND
+        case 's' : // fall through to ss
+        case 'ss' :
+            datePartArray[SECOND] = toInt(input);
+            break;
+        // MILLISECOND
+        case 'S' :
+        case 'SS' :
+        case 'SSS' :
+        case 'SSSS' :
+            datePartArray[MILLISECOND] = toInt(('0.' + input) * 1000);
+            break;
+        // UNIX OFFSET (MILLISECONDS)
+        case 'x':
+            config._d = new Date(toInt(input));
+            break;
+        // UNIX TIMESTAMP WITH MS
+        case 'X':
+            config._d = new Date(parseFloat(input) * 1000);
+            break;
+        // TIMEZONE
+        case 'Z' : // fall through to ZZ
+        case 'ZZ' :
+            config._useUTC = true;
+            config._tzm = timezoneMinutesFromString(input);
+            break;
+        // WEEKDAY - human
+        case 'dd':
+        case 'ddd':
+        case 'dddd':
+            a = config._locale.weekdaysParse(input);
+            // if we didn't get a weekday name, mark the date as invalid
+            if (a != null) {
+                config._w = config._w || {};
+                config._w['d'] = a;
+            } else {
+                config._pf.invalidWeekday = input;
+            }
+            break;
+        // WEEK, WEEK DAY - numeric
+        case 'w':
+        case 'ww':
+        case 'W':
+        case 'WW':
+        case 'd':
+        case 'e':
+        case 'E':
+            token = token.substr(0, 1);
+            /* falls through */
+        case 'gggg':
+        case 'GGGG':
+        case 'GGGGG':
+            token = token.substr(0, 2);
+            if (input) {
+                config._w = config._w || {};
+                config._w[token] = toInt(input);
+            }
+            break;
+        case 'gg':
+        case 'GG':
+            config._w = config._w || {};
+            config._w[token] = moment.parseTwoDigitYear(input);
+        }
+    }
+
+    function dayOfYearFromWeekInfo(config) {
+        var w, weekYear, week, weekday, dow, doy, temp;
+
+        w = config._w;
+        if (w.GG != null || w.W != null || w.E != null) {
+            dow = 1;
+            doy = 4;
+
+            // TODO: We need to take the current isoWeekYear, but that depends on
+            // how we interpret now (local, utc, fixed offset). So create
+            // a now version of current config (take local/utc/offset flags, and
+            // create now).
+            weekYear = dfl(w.GG, config._a[YEAR], weekOfYear(moment(), 1, 4).year);
+            week = dfl(w.W, 1);
+            weekday = dfl(w.E, 1);
+        } else {
+            dow = config._locale._week.dow;
+            doy = config._locale._week.doy;
+
+            weekYear = dfl(w.gg, config._a[YEAR], weekOfYear(moment(), dow, doy).year);
+            week = dfl(w.w, 1);
+
+            if (w.d != null) {
+                // weekday -- low day numbers are considered next week
+                weekday = w.d;
+                if (weekday < dow) {
+                    ++week;
+                }
+            } else if (w.e != null) {
+                // local weekday -- counting starts from begining of week
+                weekday = w.e + dow;
+            } else {
+                // default to begining of week
+                weekday = dow;
+            }
+        }
+        temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow);
+
+        config._a[YEAR] = temp.year;
+        config._dayOfYear = temp.dayOfYear;
+    }
+
+    // convert an array to a date.
+    // the array should mirror the parameters below
+    // note: all values past the year are optional and will default to the lowest possible value.
+    // [year, month, day , hour, minute, second, millisecond]
+    function dateFromConfig(config) {
+        var i, date, input = [], currentDate, yearToUse;
+
+        if (config._d) {
+            return;
+        }
+
+        currentDate = currentDateArray(config);
+
+        //compute day of the year from weeks and weekdays
+        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
+            dayOfYearFromWeekInfo(config);
+        }
+
+        //if the day of the year is set, figure out what it is
+        if (config._dayOfYear) {
+            yearToUse = dfl(config._a[YEAR], currentDate[YEAR]);
+
+            if (config._dayOfYear > daysInYear(yearToUse)) {
+                config._pf._overflowDayOfYear = true;
+            }
+
+            date = makeUTCDate(yearToUse, 0, config._dayOfYear);
+            config._a[MONTH] = date.getUTCMonth();
+            config._a[DATE] = date.getUTCDate();
+        }
+
+        // Default to current date.
+        // * if no year, month, day of month are given, default to today
+        // * if day of month is given, default month and year
+        // * if month is given, default only year
+        // * if year is given, don't default anything
+        for (i = 0; i < 3 && config._a[i] == null; ++i) {
+            config._a[i] = input[i] = currentDate[i];
+        }
+
+        // Zero out whatever was not defaulted, including time
+        for (; i < 7; i++) {
+            config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
+        }
+
+        // Check for 24:00:00.000
+        if (config._a[HOUR] === 24 &&
+                config._a[MINUTE] === 0 &&
+                config._a[SECOND] === 0 &&
+                config._a[MILLISECOND] === 0) {
+            config._nextDay = true;
+            config._a[HOUR] = 0;
+        }
+
+        config._d = (config._useUTC ? makeUTCDate : makeDate).apply(null, input);
+        // Apply timezone offset from input. The actual zone can be changed
+        // with parseZone.
+        if (config._tzm != null) {
+            config._d.setUTCMinutes(config._d.getUTCMinutes() + config._tzm);
+        }
+
+        if (config._nextDay) {
+            config._a[HOUR] = 24;
+        }
+    }
+
+    function dateFromObject(config) {
+        var normalizedInput;
+
+        if (config._d) {
+            return;
+        }
+
+        normalizedInput = normalizeObjectUnits(config._i);
+        config._a = [
+            normalizedInput.year,
+            normalizedInput.month,
+            normalizedInput.day || normalizedInput.date,
+            normalizedInput.hour,
+            normalizedInput.minute,
+            normalizedInput.second,
+            normalizedInput.millisecond
+        ];
+
+        dateFromConfig(config);
+    }
+
+    function currentDateArray(config) {
+        var now = new Date();
+        if (config._useUTC) {
+            return [
+                now.getUTCFullYear(),
+                now.getUTCMonth(),
+                now.getUTCDate()
+            ];
+        } else {
+            return [now.getFullYear(), now.getMonth(), now.getDate()];
+        }
+    }
+
+    // date from string and format string
+    function makeDateFromStringAndFormat(config) {
+        if (config._f === moment.ISO_8601) {
+            parseISO(config);
+            return;
+        }
+
+        config._a = [];
+        config._pf.empty = true;
+
+        // This array is used to make a Date, either with `new Date` or `Date.UTC`
+        var string = '' + config._i,
+            i, parsedInput, tokens, token, skipped,
+            stringLength = string.length,
+            totalParsedInputLength = 0;
+
+        tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];
+
+        for (i = 0; i < tokens.length; i++) {
+            token = tokens[i];
+            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
+            if (parsedInput) {
+                skipped = string.substr(0, string.indexOf(parsedInput));
+                if (skipped.length > 0) {
+                    config._pf.unusedInput.push(skipped);
+                }
+                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
+                totalParsedInputLength += parsedInput.length;
+            }
+            // don't parse if it's not a known token
+            if (formatTokenFunctions[token]) {
+                if (parsedInput) {
+                    config._pf.empty = false;
+                }
+                else {
+                    config._pf.unusedTokens.push(token);
+                }
+                addTimeToArrayFromToken(token, parsedInput, config);
+            }
+            else if (config._strict && !parsedInput) {
+                config._pf.unusedTokens.push(token);
+            }
+        }
+
+        // add remaining unparsed input length to the string
+        config._pf.charsLeftOver = stringLength - totalParsedInputLength;
+        if (string.length > 0) {
+            config._pf.unusedInput.push(string);
+        }
+
+        // clear _12h flag if hour is <= 12
+        if (config._pf.bigHour === true && config._a[HOUR] <= 12) {
+            config._pf.bigHour = undefined;
+        }
+        // handle am pm
+        if (config._isPm && config._a[HOUR] < 12) {
+            config._a[HOUR] += 12;
+        }
+        // if is 12 am, change hours to 0
+        if (config._isPm === false && config._a[HOUR] === 12) {
+            config._a[HOUR] = 0;
+        }
+        dateFromConfig(config);
+        checkOverflow(config);
+    }
+
+    function unescapeFormat(s) {
+        return s.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
+            return p1 || p2 || p3 || p4;
+        });
+    }
+
+    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
+    function regexpEscape(s) {
+        return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+    }
+
+    // date from string and array of format strings
+    function makeDateFromStringAndArray(config) {
+        var tempConfig,
+            bestMoment,
+
+            scoreToBeat,
+            i,
+            currentScore;
+
+        if (config._f.length === 0) {
+            config._pf.invalidFormat = true;
+            config._d = new Date(NaN);
+            return;
+        }
+
+        for (i = 0; i < config._f.length; i++) {
+            currentScore = 0;
+            tempConfig = copyConfig({}, config);
+            if (config._useUTC != null) {
+                tempConfig._useUTC = config._useUTC;
+            }
+            tempConfig._pf = defaultParsingFlags();
+            tempConfig._f = config._f[i];
+            makeDateFromStringAndFormat(tempConfig);
+
+            if (!isValid(tempConfig)) {
+                continue;
+            }
+
+            // if there is any input that was not parsed add a penalty for that format
+            currentScore += tempConfig._pf.charsLeftOver;
+
+            //or tokens
+            currentScore += tempConfig._pf.unusedTokens.length * 10;
+
+            tempConfig._pf.score = currentScore;
+
+            if (scoreToBeat == null || currentScore < scoreToBeat) {
+                scoreToBeat = currentScore;
+                bestMoment = tempConfig;
+            }
+        }
+
+        extend(config, bestMoment || tempConfig);
+    }
+
+    // date from iso format
+    function parseISO(config) {
+        var i, l,
+            string = config._i,
+            match = isoRegex.exec(string);
+
+        if (match) {
+            config._pf.iso = true;
+            for (i = 0, l = isoDates.length; i < l; i++) {
+                if (isoDates[i][1].exec(string)) {
+                    // match[5] should be 'T' or undefined
+                    config._f = isoDates[i][0] + (match[6] || ' ');
+                    break;
+                }
+            }
+            for (i = 0, l = isoTimes.length; i < l; i++) {
+                if (isoTimes[i][1].exec(string)) {
+                    config._f += isoTimes[i][0];
+                    break;
+                }
+            }
+            if (string.match(parseTokenTimezone)) {
+                config._f += 'Z';
+            }
+            makeDateFromStringAndFormat(config);
+        } else {
+            config._isValid = false;
+        }
+    }
+
+    // date from iso format or fallback
+    function makeDateFromString(config) {
+        parseISO(config);
+        if (config._isValid === false) {
+            delete config._isValid;
+            moment.createFromInputFallback(config);
+        }
+    }
+
+    function map(arr, fn) {
+        var res = [], i;
+        for (i = 0; i < arr.length; ++i) {
+            res.push(fn(arr[i], i));
+        }
+        return res;
+    }
+
+    function makeDateFromInput(config) {
+        var input = config._i, matched;
+        if (input === undefined) {
+            config._d = new Date();
+        } else if (isDate(input)) {
+            config._d = new Date(+input);
+        } else if ((matched = aspNetJsonRegex.exec(input)) !== null) {
+            config._d = new Date(+matched[1]);
+        } else if (typeof input === 'string') {
+            makeDateFromString(config);
+        } else if (isArray(input)) {
+            config._a = map(input.slice(0), function (obj) {
+                return parseInt(obj, 10);
+            });
+            dateFromConfig(config);
+        } else if (typeof(input) === 'object') {
+            dateFromObject(config);
+        } else if (typeof(input) === 'number') {
+            // from milliseconds
+            config._d = new Date(input);
+        } else {
+            moment.createFromInputFallback(config);
+        }
+    }
+
+    function makeDate(y, m, d, h, M, s, ms) {
+        //can't just apply() to create a date:
+        //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
+        var date = new Date(y, m, d, h, M, s, ms);
+
+        //the date constructor doesn't accept years < 1970
+        if (y < 1970) {
+            date.setFullYear(y);
+        }
+        return date;
+    }
+
+    function makeUTCDate(y) {
+        var date = new Date(Date.UTC.apply(null, arguments));
+        if (y < 1970) {
+            date.setUTCFullYear(y);
+        }
+        return date;
+    }
+
+    function parseWeekday(input, locale) {
+        if (typeof input === 'string') {
+            if (!isNaN(input)) {
+                input = parseInt(input, 10);
+            }
+            else {
+                input = locale.weekdaysParse(input);
+                if (typeof input !== 'number') {
+                    return null;
+                }
+            }
+        }
+        return input;
+    }
+
+    /************************************
+        Relative Time
+    ************************************/
+
+
+    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
+    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
+        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
+    }
+
+    function relativeTime(posNegDuration, withoutSuffix, locale) {
+        var duration = moment.duration(posNegDuration).abs(),
+            seconds = round(duration.as('s')),
+            minutes = round(duration.as('m')),
+            hours = round(duration.as('h')),
+            days = round(duration.as('d')),
+            months = round(duration.as('M')),
+            years = round(duration.as('y')),
+
+            args = seconds < relativeTimeThresholds.s && ['s', seconds] ||
+                minutes === 1 && ['m'] ||
+                minutes < relativeTimeThresholds.m && ['mm', minutes] ||
+                hours === 1 && ['h'] ||
+                hours < relativeTimeThresholds.h && ['hh', hours] ||
+                days === 1 && ['d'] ||
+                days < relativeTimeThresholds.d && ['dd', days] ||
+                months === 1 && ['M'] ||
+                months < relativeTimeThresholds.M && ['MM', months] ||
+                years === 1 && ['y'] || ['yy', years];
+
+        args[2] = withoutSuffix;
+        args[3] = +posNegDuration > 0;
+        args[4] = locale;
+        return substituteTimeAgo.apply({}, args);
+    }
+
+
+    /************************************
+        Week of Year
+    ************************************/
+
+
+    // firstDayOfWeek       0 = sun, 6 = sat
+    //                      the day of the week that starts the week
+    //                      (usually sunday or monday)
+    // firstDayOfWeekOfYear 0 = sun, 6 = sat
+    //                      the first week is the week that contains the first
+    //                      of this day of the week
+    //                      (eg. ISO weeks use thursday (4))
+    function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) {
+        var end = firstDayOfWeekOfYear - firstDayOfWeek,
+            daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(),
+            adjustedMoment;
+
+
+        if (daysToDayOfWeek > end) {
+            daysToDayOfWeek -= 7;
+        }
+
+        if (daysToDayOfWeek < end - 7) {
+            daysToDayOfWeek += 7;
+        }
+
+        adjustedMoment = moment(mom).add(daysToDayOfWeek, 'd');
+        return {
+            week: Math.ceil(adjustedMoment.dayOfYear() / 7),
+            year: adjustedMoment.year()
+        };
+    }
+
+    //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
+    function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) {
+        var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear;
+
+        d = d === 0 ? 7 : d;
+        weekday = weekday != null ? weekday : firstDayOfWeek;
+        daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0);
+        dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1;
+
+        return {
+            year: dayOfYear > 0 ? year : year - 1,
+            dayOfYear: dayOfYear > 0 ?  dayOfYear : daysInYear(year - 1) + dayOfYear
+        };
+    }
+
+    /************************************
+        Top Level Functions
+    ************************************/
+
+    function makeMoment(config) {
+        var input = config._i,
+            format = config._f,
+            res;
+
+        config._locale = config._locale || moment.localeData(config._l);
+
+        if (input === null || (format === undefined && input === '')) {
+            return moment.invalid({nullInput: true});
+        }
+
+        if (typeof input === 'string') {
+            config._i = input = config._locale.preparse(input);
+        }
+
+        if (moment.isMoment(input)) {
+            return new Moment(input, true);
+        } else if (format) {
+            if (isArray(format)) {
+                makeDateFromStringAndArray(config);
+            } else {
+                makeDateFromStringAndFormat(config);
+            }
+        } else {
+            makeDateFromInput(config);
+        }
+
+        res = new Moment(config);
+        if (res._nextDay) {
+            // Adding is smart enough around DST
+            res.add(1, 'd');
+            res._nextDay = undefined;
+        }
+
+        return res;
+    }
+
+    moment = function (input, format, locale, strict) {
+        var c;
+
+        if (typeof(locale) === 'boolean') {
+            strict = locale;
+            locale = undefined;
+        }
+        // object construction must be done this way.
+        // https://github.com/moment/moment/issues/1423
+        c = {};
+        c._isAMomentObject = true;
+        c._i = input;
+        c._f = format;
+        c._l = locale;
+        c._strict = strict;
+        c._isUTC = false;
+        c._pf = defaultParsingFlags();
+
+        return makeMoment(c);
+    };
+
+    moment.suppressDeprecationWarnings = false;
+
+    moment.createFromInputFallback = deprecate(
+        'moment construction falls back to js Date. This is ' +
+        'discouraged and will be removed in upcoming major ' +
+        'release. Please refer to ' +
+        'https://github.com/moment/moment/issues/1407 for more info.',
+        function (config) {
+            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
+        }
+    );
+
+    // Pick a moment m from moments so that m[fn](other) is true for all
+    // other. This relies on the function fn to be transitive.
+    //
+    // moments should either be an array of moment objects or an array, whose
+    // first element is an array of moment objects.
+    function pickBy(fn, moments) {
+        var res, i;
+        if (moments.length === 1 && isArray(moments[0])) {
+            moments = moments[0];
+        }
+        if (!moments.length) {
+            return moment();
+        }
+        res = moments[0];
+        for (i = 1; i < moments.length; ++i) {
+            if (moments[i][fn](res)) {
+                res = moments[i];
+            }
+        }
+        return res;
+    }
+
+    moment.min = function () {
+        var args = [].slice.call(arguments, 0);
+
+        return pickBy('isBefore', args);
+    };
+
+    moment.max = function () {
+        var args = [].slice.call(arguments, 0);
+
+        return pickBy('isAfter', args);
+    };
+
+    // creating with utc
+    moment.utc = function (input, format, locale, strict) {
+        var c;
+
+        if (typeof(locale) === 'boolean') {
+            strict = locale;
+            locale = undefined;
+        }
+        // object construction must be done this way.
+        // https://github.com/moment/moment/issues/1423
+        c = {};
+        c._isAMomentObject = true;
+        c._useUTC = true;
+        c._isUTC = true;
+        c._l = locale;
+        c._i = input;
+        c._f = format;
+        c._strict = strict;
+        c._pf = defaultParsingFlags();
+
+        return makeMoment(c).utc();
+    };
+
+    // creating with unix timestamp (in seconds)
+    moment.unix = function (input) {
+        return moment(input * 1000);
+    };
+
+    // duration
+    moment.duration = function (input, key) {
+        var duration = input,
+            // matching against regexp is expensive, do it on demand
+            match = null,
+            sign,
+            ret,
+            parseIso,
+            diffRes;
+
+        if (moment.isDuration(input)) {
+            duration = {
+                ms: input._milliseconds,
+                d: input._days,
+                M: input._months
+            };
+        } else if (typeof input === 'number') {
+            duration = {};
+            if (key) {
+                duration[key] = input;
+            } else {
+                duration.milliseconds = input;
+            }
+        } else if (!!(match = aspNetTimeSpanJsonRegex.exec(input))) {
+            sign = (match[1] === '-') ? -1 : 1;
+            duration = {
+                y: 0,
+                d: toInt(match[DATE]) * sign,
+                h: toInt(match[HOUR]) * sign,
+                m: toInt(match[MINUTE]) * sign,
+                s: toInt(match[SECOND]) * sign,
+                ms: toInt(match[MILLISECOND]) * sign
+            };
+        } else if (!!(match = isoDurationRegex.exec(input))) {
+            sign = (match[1] === '-') ? -1 : 1;
+            parseIso = function (inp) {
+                // We'd normally use ~~inp for this, but unfortunately it also
+                // converts floats to ints.
+                // inp may be undefined, so careful calling replace on it.
+                var res = inp && parseFloat(inp.replace(',', '.'));
+                // apply sign while we're at it
+                return (isNaN(res) ? 0 : res) * sign;
+            };
+            duration = {
+                y: parseIso(match[2]),
+                M: parseIso(match[3]),
+                d: parseIso(match[4]),
+                h: parseIso(match[5]),
+                m: parseIso(match[6]),
+                s: parseIso(match[7]),
+                w: parseIso(match[8])
+            };
+        } else if (typeof duration === 'object' &&
+                ('from' in duration || 'to' in duration)) {
+            diffRes = momentsDifference(moment(duration.from), moment(duration.to));
+
+            duration = {};
+            duration.ms = diffRes.milliseconds;
+            duration.M = diffRes.months;
+        }
+
+        ret = new Duration(duration);
+
+        if (moment.isDuration(input) && hasOwnProp(input, '_locale')) {
+            ret._locale = input._locale;
+        }
+
+        return ret;
+    };
+
+    // version number
+    moment.version = VERSION;
+
+    // default format
+    moment.defaultFormat = isoFormat;
+
+    // constant that refers to the ISO standard
+    moment.ISO_8601 = function () {};
+
+    // Plugins that add properties should also add the key here (null value),
+    // so we can properly clone ourselves.
+    moment.momentProperties = momentProperties;
+
+    // This function will be called whenever a moment is mutated.
+    // It is intended to keep the offset in sync with the timezone.
+    moment.updateOffset = function () {};
+
+    // This function allows you to set a threshold for relative time strings
+    moment.relativeTimeThreshold = function (threshold, limit) {
+        if (relativeTimeThresholds[threshold] === undefined) {
+            return false;
+        }
+        if (limit === undefined) {
+            return relativeTimeThresholds[threshold];
+        }
+        relativeTimeThresholds[threshold] = limit;
+        return true;
+    };
+
+    moment.lang = deprecate(
+        'moment.lang is deprecated. Use moment.locale instead.',
+        function (key, value) {
+            return moment.locale(key, value);
+        }
+    );
+
+    // This function will load locale and then set the global locale.  If
+    // no arguments are passed in, it will simply return the current global
+    // locale key.
+    moment.locale = function (key, values) {
+        var data;
+        if (key) {
+            if (typeof(values) !== 'undefined') {
+                data = moment.defineLocale(key, values);
+            }
+            else {
+                data = moment.localeData(key);
+            }
+
+            if (data) {
+                moment.duration._locale = moment._locale = data;
+            }
+        }
+
+        return moment._locale._abbr;
+    };
+
+    moment.defineLocale = function (name, values) {
+        if (values !== null) {
+            values.abbr = name;
+            if (!locales[name]) {
+                locales[name] = new Locale();
+            }
+            locales[name].set(values);
+
+            // backwards compat for now: also set the locale
+            moment.locale(name);
+
+            return locales[name];
+        } else {
+            // useful for testing
+            delete locales[name];
+            return null;
+        }
+    };
+
+    moment.langData = deprecate(
+        'moment.langData is deprecated. Use moment.localeData instead.',
+        function (key) {
+            return moment.localeData(key);
+        }
+    );
+
+    // returns locale data
+    moment.localeData = function (key) {
+        var locale;
+
+        if (key && key._locale && key._locale._abbr) {
+            key = key._locale._abbr;
+        }
+
+        if (!key) {
+            return moment._locale;
+        }
+
+        if (!isArray(key)) {
+            //short-circuit everything else
+            locale = loadLocale(key);
+            if (locale) {
+                return locale;
+            }
+            key = [key];
+        }
+
+        return chooseLocale(key);
+    };
+
+    // compare moment object
+    moment.isMoment = function (obj) {
+        return obj instanceof Moment ||
+            (obj != null && hasOwnProp(obj, '_isAMomentObject'));
+    };
+
+    // for typechecking Duration objects
+    moment.isDuration = function (obj) {
+        return obj instanceof Duration;
+    };
+
+    for (i = lists.length - 1; i >= 0; --i) {
+        makeList(lists[i]);
+    }
+
+    moment.normalizeUnits = function (units) {
+        return normalizeUnits(units);
+    };
+
+    moment.invalid = function (flags) {
+        var m = moment.utc(NaN);
+        if (flags != null) {
+            extend(m._pf, flags);
+        }
+        else {
+            m._pf.userInvalidated = true;
+        }
+
+        return m;
+    };
+
+    moment.parseZone = function () {
+        return moment.apply(null, arguments).parseZone();
+    };
+
+    moment.parseTwoDigitYear = function (input) {
+        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
+    };
+
+    /************************************
+        Moment Prototype
+    ************************************/
+
+
+    extend(moment.fn = Moment.prototype, {
+
+        clone : function () {
+            return moment(this);
+        },
+
+        valueOf : function () {
+            return +this._d + ((this._offset || 0) * 60000);
+        },
+
+        unix : function () {
+            return Math.floor(+this / 1000);
+        },
+
+        toString : function () {
+            return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
+        },
+
+        toDate : function () {
+            return this._offset ? new Date(+this) : this._d;
+        },
+
+        toISOString : function () {
+            var m = moment(this).utc();
+            if (0 < m.year() && m.year() <= 9999) {
+                if ('function' === typeof Date.prototype.toISOString) {
+                    // native implementation is ~50x faster, use it when we can
+                    return this.toDate().toISOString();
+                } else {
+                    return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+                }
+            } else {
+                return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+            }
+        },
+
+        toArray : function () {
+            var m = this;
+            return [
+                m.year(),
+                m.month(),
+                m.date(),
+                m.hours(),
+                m.minutes(),
+                m.seconds(),
+                m.milliseconds()
+            ];
+        },
+
+        isValid : function () {
+            return isValid(this);
+        },
+
+        isDSTShifted : function () {
+            if (this._a) {
+                return this.isValid() && compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()) > 0;
+            }
+
+            return false;
+        },
+
+        parsingFlags : function () {
+            return extend({}, this._pf);
+        },
+
+        invalidAt: function () {
+            return this._pf.overflow;
+        },
+
+        utc : function (keepLocalTime) {
+            return this.zone(0, keepLocalTime);
+        },
+
+        local : function (keepLocalTime) {
+            if (this._isUTC) {
+                this.zone(0, keepLocalTime);
+                this._isUTC = false;
+
+                if (keepLocalTime) {
+                    this.add(this._dateTzOffset(), 'm');
+                }
+            }
+            return this;
+        },
+
+        format : function (inputString) {
+            var output = formatMoment(this, inputString || moment.defaultFormat);
+            return this.localeData().postformat(output);
+        },
+
+        add : createAdder(1, 'add'),
+
+        subtract : createAdder(-1, 'subtract'),
+
+        diff : function (input, units, asFloat) {
+            var that = makeAs(input, this),
+                zoneDiff = (this.zone() - that.zone()) * 6e4,
+                diff, output, daysAdjust;
+
+            units = normalizeUnits(units);
+
+            if (units === 'year' || units === 'month') {
+                // average number of days in the months in the given dates
+                diff = (this.daysInMonth() + that.daysInMonth()) * 432e5; // 24 * 60 * 60 * 1000 / 2
+                // difference in months
+                output = ((this.year() - that.year()) * 12) + (this.month() - that.month());
+                // adjust by taking difference in days, average number of days
+                // and dst in the given months.
+                daysAdjust = (this - moment(this).startOf('month')) -
+                    (that - moment(that).startOf('month'));
+                // same as above but with zones, to negate all dst
+                daysAdjust -= ((this.zone() - moment(this).startOf('month').zone()) -
+                        (that.zone() - moment(that).startOf('month').zone())) * 6e4;
+                output += daysAdjust / diff;
+                if (units === 'year') {
+                    output = output / 12;
+                }
+            } else {
+                diff = (this - that);
+                output = units === 'second' ? diff / 1e3 : // 1000
+                    units === 'minute' ? diff / 6e4 : // 1000 * 60
+                    units === 'hour' ? diff / 36e5 : // 1000 * 60 * 60
+                    units === 'day' ? (diff - zoneDiff) / 864e5 : // 1000 * 60 * 60 * 24, negate dst
+                    units === 'week' ? (diff - zoneDiff) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst
+                    diff;
+            }
+            return asFloat ? output : absRound(output);
+        },
+
+        from : function (time, withoutSuffix) {
+            return moment.duration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
+        },
+
+        fromNow : function (withoutSuffix) {
+            return this.from(moment(), withoutSuffix);
+        },
+
+        calendar : function (time) {
+            // We want to compare the start of today, vs this.
+            // Getting start-of-today depends on whether we're zone'd or not.
+            var now = time || moment(),
+                sod = makeAs(now, this).startOf('day'),
+                diff = this.diff(sod, 'days', true),
+                format = diff < -6 ? 'sameElse' :
+                    diff < -1 ? 'lastWeek' :
+                    diff < 0 ? 'lastDay' :
+                    diff < 1 ? 'sameDay' :
+                    diff < 2 ? 'nextDay' :
+                    diff < 7 ? 'nextWeek' : 'sameElse';
+            return this.format(this.localeData().calendar(format, this, moment(now)));
+        },
+
+        isLeapYear : function () {
+            return isLeapYear(this.year());
+        },
+
+        isDST : function () {
+            return (this.zone() < this.clone().month(0).zone() ||
+                this.zone() < this.clone().month(5).zone());
+        },
+
+        day : function (input) {
+            var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
+            if (input != null) {
+                input = parseWeekday(input, this.localeData());
+                return this.add(input - day, 'd');
+            } else {
+                return day;
+            }
+        },
+
+        month : makeAccessor('Month', true),
+
+        startOf : function (units) {
+            units = normalizeUnits(units);
+            // the following switch intentionally omits break keywords
+            // to utilize falling through the cases.
+            switch (units) {
+            case 'year':
+                this.month(0);
+                /* falls through */
+            case 'quarter':
+            case 'month':
+                this.date(1);
+                /* falls through */
+            case 'week':
+            case 'isoWeek':
+            case 'day':
+                this.hours(0);
+                /* falls through */
+            case 'hour':
+                this.minutes(0);
+                /* falls through */
+            case 'minute':
+                this.seconds(0);
+                /* falls through */
+            case 'second':
+                this.milliseconds(0);
+                /* falls through */
+            }
+
+            // weeks are a special case
+            if (units === 'week') {
+                this.weekday(0);
+            } else if (units === 'isoWeek') {
+                this.isoWeekday(1);
+            }
+
+            // quarters are also special
+            if (units === 'quarter') {
+                this.month(Math.floor(this.month() / 3) * 3);
+            }
+
+            return this;
+        },
+
+        endOf: function (units) {
+            units = normalizeUnits(units);
+            if (units === undefined || units === 'millisecond') {
+                return this;
+            }
+            return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');
+        },
+
+        isAfter: function (input, units) {
+            var inputMs;
+            units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');
+            if (units === 'millisecond') {
+                input = moment.isMoment(input) ? input : moment(input);
+                return +this > +input;
+            } else {
+                inputMs = moment.isMoment(input) ? +input : +moment(input);
+                return inputMs < +this.clone().startOf(units);
+            }
+        },
+
+        isBefore: function (input, units) {
+            var inputMs;
+            units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');
+            if (units === 'millisecond') {
+                input = moment.isMoment(input) ? input : moment(input);
+                return +this < +input;
+            } else {
+                inputMs = moment.isMoment(input) ? +input : +moment(input);
+                return +this.clone().endOf(units) < inputMs;
+            }
+        },
+
+        isSame: function (input, units) {
+            var inputMs;
+            units = normalizeUnits(units || 'millisecond');
+            if (units === 'millisecond') {
+                input = moment.isMoment(input) ? input : moment(input);
+                return +this === +input;
+            } else {
+                inputMs = +moment(input);
+                return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units));
+            }
+        },
+
+        min: deprecate(
+                 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548',
+                 function (other) {
+                     other = moment.apply(null, arguments);
+                     return other < this ? this : other;
+                 }
+         ),
+
+        max: deprecate(
+                'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548',
+                function (other) {
+                    other = moment.apply(null, arguments);
+                    return other > this ? this : other;
+                }
+        ),
+
+        // keepLocalTime = true means only change the timezone, without
+        // affecting the local hour. So 5:31:26 +0300 --[zone(2, true)]-->
+        // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist int zone
+        // +0200, so we adjust the time as needed, to be valid.
+        //
+        // Keeping the time actually adds/subtracts (one hour)
+        // from the actual represented time. That is why we call updateOffset
+        // a second time. In case it wants us to change the offset again
+        // _changeInProgress == true case, then we have to adjust, because
+        // there is no such time in the given timezone.
+        zone : function (input, keepLocalTime) {
+            var offset = this._offset || 0,
+                localAdjust;
+            if (input != null) {
+                if (typeof input === 'string') {
+                    input = timezoneMinutesFromString(input);
+                }
+                if (Math.abs(input) < 16) {
+                    input = input * 60;
+                }
+                if (!this._isUTC && keepLocalTime) {
+                    localAdjust = this._dateTzOffset();
+                }
+                this._offset = input;
+                this._isUTC = true;
+                if (localAdjust != null) {
+                    this.subtract(localAdjust, 'm');
+                }
+                if (offset !== input) {
+                    if (!keepLocalTime || this._changeInProgress) {
+                        addOrSubtractDurationFromMoment(this,
+                                moment.duration(offset - input, 'm'), 1, false);
+                    } else if (!this._changeInProgress) {
+                        this._changeInProgress = true;
+                        moment.updateOffset(this, true);
+                        this._changeInProgress = null;
+                    }
+                }
+            } else {
+                return this._isUTC ? offset : this._dateTzOffset();
+            }
+            return this;
+        },
+
+        zoneAbbr : function () {
+            return this._isUTC ? 'UTC' : '';
+        },
+
+        zoneName : function () {
+            return this._isUTC ? 'Coordinated Universal Time' : '';
+        },
+
+        parseZone : function () {
+            if (this._tzm) {
+                this.zone(this._tzm);
+            } else if (typeof this._i === 'string') {
+                this.zone(this._i);
+            }
+            return this;
+        },
+
+        hasAlignedHourOffset : function (input) {
+            if (!input) {
+                input = 0;
+            }
+            else {
+                input = moment(input).zone();
+            }
+
+            return (this.zone() - input) % 60 === 0;
+        },
+
+        daysInMonth : function () {
+            return daysInMonth(this.year(), this.month());
+        },
+
+        dayOfYear : function (input) {
+            var dayOfYear = round((moment(this).startOf('day') - moment(this).startOf('year')) / 864e5) + 1;
+            return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
+        },
+
+        quarter : function (input) {
+            return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
+        },
+
+        weekYear : function (input) {
+            var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year;
+            return input == null ? year : this.add((input - year), 'y');
+        },
+
+        isoWeekYear : function (input) {
+            var year = weekOfYear(this, 1, 4).year;
+            return input == null ? year : this.add((input - year), 'y');
+        },
+
+        week : function (input) {
+            var week = this.localeData().week(this);
+            return input == null ? week : this.add((input - week) * 7, 'd');
+        },
+
+        isoWeek : function (input) {
+            var week = weekOfYear(this, 1, 4).week;
+            return input == null ? week : this.add((input - week) * 7, 'd');
+        },
+
+        weekday : function (input) {
+            var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
+            return input == null ? weekday : this.add(input - weekday, 'd');
+        },
+
+        isoWeekday : function (input) {
+            // behaves the same as moment#day except
+            // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
+            // as a setter, sunday should belong to the previous week.
+            return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7);
+        },
+
+        isoWeeksInYear : function () {
+            return weeksInYear(this.year(), 1, 4);
+        },
+
+        weeksInYear : function () {
+            var weekInfo = this.localeData()._week;
+            return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
+        },
+
+        get : function (units) {
+            units = normalizeUnits(units);
+            return this[units]();
+        },
+
+        set : function (units, value) {
+            units = normalizeUnits(units);
+            if (typeof this[units] === 'function') {
+                this[units](value);
+            }
+            return this;
+        },
+
+        // If passed a locale key, it will set the locale for this
+        // instance.  Otherwise, it will return the locale configuration
+        // variables for this instance.
+        locale : function (key) {
+            var newLocaleData;
+
+            if (key === undefined) {
+                return this._locale._abbr;
+            } else {
+                newLocaleData = moment.localeData(key);
+                if (newLocaleData != null) {
+                    this._locale = newLocaleData;
+                }
+                return this;
+            }
+        },
+
+        lang : deprecate(
+            'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
+            function (key) {
+                if (key === undefined) {
+                    return this.localeData();
+                } else {
+                    return this.locale(key);
+                }
+            }
+        ),
+
+        localeData : function () {
+            return this._locale;
+        },
+
+        _dateTzOffset : function () {
+            // On Firefox.24 Date#getTimezoneOffset returns a floating point.
+            // https://github.com/moment/moment/pull/1871
+            return Math.round(this._d.getTimezoneOffset() / 15) * 15;
+        }
+    });
+
+    function rawMonthSetter(mom, value) {
+        var dayOfMonth;
+
+        // TODO: Move this out of here!
+        if (typeof value === 'string') {
+            value = mom.localeData().monthsParse(value);
+            // TODO: Another silent failure?
+            if (typeof value !== 'number') {
+                return mom;
+            }
+        }
+
+        dayOfMonth = Math.min(mom.date(),
+                daysInMonth(mom.year(), value));
+        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
+        return mom;
+    }
+
+    function rawGetter(mom, unit) {
+        return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]();
+    }
+
+    function rawSetter(mom, unit, value) {
+        if (unit === 'Month') {
+            return rawMonthSetter(mom, value);
+        } else {
+            return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
+        }
+    }
+
+    function makeAccessor(unit, keepTime) {
+        return function (value) {
+            if (value != null) {
+                rawSetter(this, unit, value);
+                moment.updateOffset(this, keepTime);
+                return this;
+            } else {
+                return rawGetter(this, unit);
+            }
+        };
+    }
+
+    moment.fn.millisecond = moment.fn.milliseconds = makeAccessor('Milliseconds', false);
+    moment.fn.second = moment.fn.seconds = makeAccessor('Seconds', false);
+    moment.fn.minute = moment.fn.minutes = makeAccessor('Minutes', false);
+    // Setting the hour should keep the time, because the user explicitly
+    // specified which hour he wants. So trying to maintain the same hour (in
+    // a new timezone) makes sense. Adding/subtracting hours does not follow
+    // this rule.
+    moment.fn.hour = moment.fn.hours = makeAccessor('Hours', true);
+    // moment.fn.month is defined separately
+    moment.fn.date = makeAccessor('Date', true);
+    moment.fn.dates = deprecate('dates accessor is deprecated. Use date instead.', makeAccessor('Date', true));
+    moment.fn.year = makeAccessor('FullYear', true)

<TRUNCATED>

[15/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php
new file mode 100755
index 0000000..24fd428
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php
@@ -0,0 +1,224 @@
+<?php namespace Illuminate\Database\Query\Grammars;
+
+use Illuminate\Database\Query\Builder;
+
+class SqlServerGrammar extends Grammar {
+
+	/**
+	 * All of the available clause operators.
+	 *
+	 * @var array
+	 */
+	protected $operators = array(
+		'=', '<', '>', '<=', '>=', '!<', '!>', '<>', '!=',
+		'like', 'not like', 'between', 'ilike',
+		'&', '&=', '|', '|=', '^', '^=',
+	);
+
+	/**
+	 * Compile a select query into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder
+	 * @return string
+	 */
+	public function compileSelect(Builder $query)
+	{
+		$components = $this->compileComponents($query);
+
+		// If an offset is present on the query, we will need to wrap the query in
+		// a big "ANSI" offset syntax block. This is very nasty compared to the
+		// other database systems but is necessary for implementing features.
+		if ($query->offset > 0)
+		{
+			return $this->compileAnsiOffset($query, $components);
+		}
+
+		return $this->concatenate($components);
+	}
+
+	/**
+	 * Compile the "select *" portion of the query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $columns
+	 * @return string
+	 */
+	protected function compileColumns(Builder $query, $columns)
+	{
+		if ( ! is_null($query->aggregate)) return;
+
+		$select = $query->distinct ? 'select distinct ' : 'select ';
+
+		// If there is a limit on the query, but not an offset, we will add the top
+		// clause to the query, which serves as a "limit" type clause within the
+		// SQL Server system similar to the limit keywords available in MySQL.
+		if ($query->limit > 0 && $query->offset <= 0)
+		{
+			$select .= 'top '.$query->limit.' ';
+		}
+
+		return $select.$this->columnize($columns);
+	}
+
+	/**
+	 * Compile the "from" portion of the query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  string  $table
+	 * @return string
+	 */
+	protected function compileFrom(Builder $query, $table)
+	{
+		$from = parent::compileFrom($query, $table);
+
+		if (is_string($query->lock)) return $from.' '.$query->lock;
+
+		if ( ! is_null($query->lock))
+		{
+			return $from.' with(rowlock,'.($query->lock ? 'updlock,' : '').'holdlock)';
+		}
+
+		return $from;
+	}
+
+	/**
+	 * Create a full ANSI offset clause for the query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $components
+	 * @return string
+	 */
+	protected function compileAnsiOffset(Builder $query, $components)
+	{
+		// An ORDER BY clause is required to make this offset query work, so if one does
+		// not exist we'll just create a dummy clause to trick the database and so it
+		// does not complain about the queries for not having an "order by" clause.
+		if ( ! isset($components['orders']))
+		{
+			$components['orders'] = 'order by (select 0)';
+		}
+
+		// We need to add the row number to the query so we can compare it to the offset
+		// and limit values given for the statements. So we will add an expression to
+		// the "select" that will give back the row numbers on each of the records.
+		$orderings = $components['orders'];
+
+		$components['columns'] .= $this->compileOver($orderings);
+
+		unset($components['orders']);
+
+		// Next we need to calculate the constraints that should be placed on the query
+		// to get the right offset and limit from our query but if there is no limit
+		// set we will just handle the offset only since that is all that matters.
+		$constraint = $this->compileRowConstraint($query);
+
+		$sql = $this->concatenate($components);
+
+		// We are now ready to build the final SQL query so we'll create a common table
+		// expression from the query and get the records with row numbers within our
+		// given limit and offset value that we just put on as a query constraint.
+		return $this->compileTableExpression($sql, $constraint);
+	}
+
+	/**
+	 * Compile the over statement for a table expression.
+	 *
+	 * @param  string  $orderings
+	 * @return string
+	 */
+	protected function compileOver($orderings)
+	{
+		return ", row_number() over ({$orderings}) as row_num";
+	}
+
+	/**
+	 * Compile the limit / offset row constraint for a query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @return string
+	 */
+	protected function compileRowConstraint($query)
+	{
+		$start = $query->offset + 1;
+
+		if ($query->limit > 0)
+		{
+			$finish = $query->offset + $query->limit;
+
+			return "between {$start} and {$finish}";
+		}
+
+		return ">= {$start}";
+	}
+
+	/**
+	 * Compile a common table expression for a query.
+	 *
+	 * @param  string  $sql
+	 * @param  string  $constraint
+	 * @return string
+	 */
+	protected function compileTableExpression($sql, $constraint)
+	{
+		return "select * from ({$sql}) as temp_table where row_num {$constraint}";
+	}
+
+	/**
+	 * Compile the "limit" portions of the query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  int  $limit
+	 * @return string
+	 */
+	protected function compileLimit(Builder $query, $limit)
+	{
+		return '';
+	}
+
+	/**
+	 * Compile the "offset" portions of the query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  int  $offset
+	 * @return string
+	 */
+	protected function compileOffset(Builder $query, $offset)
+	{
+		return '';
+	}
+
+	/**
+	 * Compile a truncate table statement into SQL.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @return array
+	 */
+	public function compileTruncate(Builder $query)
+	{
+		return array('truncate table '.$this->wrapTable($query->from) => array());
+	}
+
+	/**
+	 * Get the format for database stored dates.
+	 *
+	 * @return string
+	 */
+	public function getDateFormat()
+	{
+		return 'Y-m-d H:i:s.000';
+	}
+
+	/**
+	 * Wrap a single string in keyword identifiers.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected function wrapValue($value)
+	{
+		if ($value === '*') return $value;
+
+		return '['.str_replace(']', ']]', $value).']';
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Query/JoinClause.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/JoinClause.php b/vendor/laravel/framework/src/Illuminate/Database/Query/JoinClause.php
new file mode 100755
index 0000000..cea79ed
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Query/JoinClause.php
@@ -0,0 +1,117 @@
+<?php namespace Illuminate\Database\Query;
+
+class JoinClause {
+
+	/**
+	 * The type of join being performed.
+	 *
+	 * @var string
+	 */
+	public $type;
+
+	/**
+	 * The table the join clause is joining to.
+	 *
+	 * @var string
+	 */
+	public $table;
+
+	/**
+	 * The "on" clauses for the join.
+	 *
+	 * @var array
+	 */
+	public $clauses = array();
+
+	/**
+	* The "on" bindings for the join.
+	*
+	* @var array
+	*/
+	public $bindings = array();
+
+	/**
+	 * Create a new join clause instance.
+	 *
+	 * @param  string  $type
+	 * @param  string  $table
+	 * @return void
+	 */
+	public function __construct($type, $table)
+	{
+		$this->type = $type;
+		$this->table = $table;
+	}
+
+	/**
+	 * Add an "on" clause to the join.
+	 *
+	 * @param  string  $first
+	 * @param  string  $operator
+	 * @param  string  $second
+	 * @param  string  $boolean
+	 * @param  bool  $where
+	 * @return $this
+	 */
+	public function on($first, $operator, $second, $boolean = 'and', $where = false)
+	{
+		$this->clauses[] = compact('first', 'operator', 'second', 'boolean', 'where');
+
+		if ($where) $this->bindings[] = $second;
+
+		return $this;
+	}
+
+	/**
+	 * Add an "or on" clause to the join.
+	 *
+	 * @param  string  $first
+	 * @param  string  $operator
+	 * @param  string  $second
+	 * @return \Illuminate\Database\Query\JoinClause
+	 */
+	public function orOn($first, $operator, $second)
+	{
+		return $this->on($first, $operator, $second, 'or');
+	}
+
+	/**
+	 * Add an "on where" clause to the join.
+	 *
+	 * @param  string  $first
+	 * @param  string  $operator
+	 * @param  string  $second
+	 * @param  string  $boolean
+	 * @return \Illuminate\Database\Query\JoinClause
+	 */
+	public function where($first, $operator, $second, $boolean = 'and')
+	{
+		return $this->on($first, $operator, $second, $boolean, true);
+	}
+
+	/**
+	 * Add an "or on where" clause to the join.
+	 *
+	 * @param  string  $first
+	 * @param  string  $operator
+	 * @param  string  $second
+	 * @return \Illuminate\Database\Query\JoinClause
+	 */
+	public function orWhere($first, $operator, $second)
+	{
+		return $this->on($first, $operator, $second, 'or', true);
+	}
+
+	/**
+	 * Add an "on where is null" clause to the join
+	 *
+	 * @param  string  $column
+	 * @param  string  $boolean
+	 * @return \Illuminate\Database\Query\JoinClause
+	 */
+	public function whereNull($column, $boolean = 'and')
+	{
+		return $this->on($column, 'is', new Expression('null'), $boolean, false);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/MySqlProcessor.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/MySqlProcessor.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/MySqlProcessor.php
new file mode 100644
index 0000000..f77b41d
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/MySqlProcessor.php
@@ -0,0 +1,16 @@
+<?php namespace Illuminate\Database\Query\Processors;
+
+class MySqlProcessor extends Processor {
+
+	/**
+	 * Process the results of a column listing query.
+	 *
+	 * @param  array  $results
+	 * @return array
+	 */
+	public function processColumnListing($results)
+	{
+		return array_map(function($r) { $r = (object) $r; return $r->column_name; }, $results);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/PostgresProcessor.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/PostgresProcessor.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/PostgresProcessor.php
new file mode 100755
index 0000000..665379d
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/PostgresProcessor.php
@@ -0,0 +1,40 @@
+<?php namespace Illuminate\Database\Query\Processors;
+
+use Illuminate\Database\Query\Builder;
+
+class PostgresProcessor extends Processor {
+
+	/**
+	 * Process an "insert get ID" query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  string  $sql
+	 * @param  array   $values
+	 * @param  string  $sequence
+	 * @return int
+	 */
+	public function processInsertGetId(Builder $query, $sql, $values, $sequence = null)
+	{
+		$results = $query->getConnection()->selectFromWriteConnection($sql, $values);
+
+		$sequence = $sequence ?: 'id';
+
+		$result = (array) $results[0];
+
+		$id = $result[$sequence];
+
+		return is_numeric($id) ? (int) $id : $id;
+	}
+
+	/**
+	 * Process the results of a column listing query.
+	 *
+	 * @param  array  $results
+	 * @return array
+	 */
+	public function processColumnListing($results)
+	{
+		return array_values(array_map(function($r) { $r = (object) $r; return $r->column_name; }, $results));
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php
new file mode 100755
index 0000000..b960092
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php
@@ -0,0 +1,48 @@
+<?php namespace Illuminate\Database\Query\Processors;
+
+use Illuminate\Database\Query\Builder;
+
+class Processor {
+
+	/**
+	 * Process the results of a "select" query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  array  $results
+	 * @return array
+	 */
+	public function processSelect(Builder $query, $results)
+	{
+		return $results;
+	}
+
+	/**
+	 * Process an  "insert get ID" query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  string  $sql
+	 * @param  array   $values
+	 * @param  string  $sequence
+	 * @return int
+	 */
+	public function processInsertGetId(Builder $query, $sql, $values, $sequence = null)
+	{
+		$query->getConnection()->insert($sql, $values);
+
+		$id = $query->getConnection()->getPdo()->lastInsertId($sequence);
+
+		return is_numeric($id) ? (int) $id : $id;
+	}
+
+	/**
+	 * Process the results of a column listing query.
+	 *
+	 * @param  array  $results
+	 * @return array
+	 */
+	public function processColumnListing($results)
+	{
+		return $results;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/SQLiteProcessor.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/SQLiteProcessor.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/SQLiteProcessor.php
new file mode 100644
index 0000000..34493bf
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/SQLiteProcessor.php
@@ -0,0 +1,16 @@
+<?php namespace Illuminate\Database\Query\Processors;
+
+class SQLiteProcessor extends Processor {
+
+	/**
+	 * Process the results of a column listing query.
+	 *
+	 * @param  array  $results
+	 * @return array
+	 */
+	public function processColumnListing($results)
+	{
+		return array_values(array_map(function($r) { $r = (object) $r; return $r->name; }, $results));
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/SqlServerProcessor.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/SqlServerProcessor.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/SqlServerProcessor.php
new file mode 100755
index 0000000..cfdb432
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/SqlServerProcessor.php
@@ -0,0 +1,36 @@
+<?php namespace Illuminate\Database\Query\Processors;
+
+use Illuminate\Database\Query\Builder;
+
+class SqlServerProcessor extends Processor {
+
+	/**
+	 * Process an "insert get ID" query.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @param  string  $sql
+	 * @param  array   $values
+	 * @param  string  $sequence
+	 * @return int
+	 */
+	public function processInsertGetId(Builder $query, $sql, $values, $sequence = null)
+	{
+		$query->getConnection()->insert($sql, $values);
+
+		$id = $query->getConnection()->getPdo()->lastInsertId();
+
+		return is_numeric($id) ? (int) $id : $id;
+	}
+
+	/**
+	 * Process the results of a column listing query.
+	 *
+	 * @param  array  $results
+	 * @return array
+	 */
+	public function processColumnListing($results)
+	{
+		return array_values(array_map(function($r) { return $r->name; }, $results));
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/QueryException.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/QueryException.php b/vendor/laravel/framework/src/Illuminate/Database/QueryException.php
new file mode 100644
index 0000000..e3f9cf2
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/QueryException.php
@@ -0,0 +1,78 @@
+<?php namespace Illuminate\Database;
+
+use PDOException;
+
+class QueryException extends PDOException {
+
+	/**
+	 * The SQL for the query.
+	 *
+	 * @var string
+	 */
+	protected $sql;
+
+	/**
+	 * The bindings for the query.
+	 *
+	 * @var array
+	 */
+	protected $bindings;
+
+	/**
+	 * Create a new query exception instance.
+	 *
+	 * @param  string  $sql
+	 * @param  array  $bindings
+	 * @param  \Exception $previous
+	 * @return void
+	 */
+	public function __construct($sql, array $bindings, $previous)
+	{
+		parent::__construct('', 0, $previous);
+
+		$this->sql = $sql;
+		$this->bindings = $bindings;
+		$this->previous = $previous;
+		$this->code = $previous->getCode();
+		$this->message = $this->formatMessage($sql, $bindings, $previous);
+
+		if ($previous instanceof PDOException)
+		{
+			$this->errorInfo = $previous->errorInfo;
+		}
+	}
+
+	/**
+	 * Format the SQL error message.
+	 *
+	 * @param  string  $sql
+	 * @param  array  $bindings
+	 * @param  \Exception $previous
+	 * @return string
+	 */
+	protected function formatMessage($sql, $bindings, $previous)
+	{
+		return $previous->getMessage().' (SQL: '.str_replace_array('\?', $bindings, $sql).')';
+	}
+
+	/**
+	 * Get the SQL for the query.
+	 *
+	 * @return string
+	 */
+	public function getSql()
+	{
+		return $this->sql;
+	}
+
+	/**
+	 * Get the bindings for the query.
+	 *
+	 * @return array
+	 */
+	public function getBindings()
+	{
+		return $this->bindings;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/README.md
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/README.md b/vendor/laravel/framework/src/Illuminate/Database/README.md
new file mode 100755
index 0000000..5009fc0
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/README.md
@@ -0,0 +1,71 @@
+## Illuminate Database
+
+The Illuminate Database component is a full database toolkit for PHP, providing an expressive query builder, ActiveRecord style ORM, and schema builder. It currently supports MySQL, Postgres, SQL Server, and SQLite. It also serves as the database layer of the Laravel PHP framework.
+
+### Usage Instructions
+
+First, create a new "Capsule" manager instance. Capsule aims to make configuring the library for usage outside of the Laravel framework as easy as possible.
+
+```PHP
+use Illuminate\Database\Capsule\Manager as Capsule;
+
+$capsule = new Capsule;
+
+$capsule->addConnection([
+	'driver'    => 'mysql',
+	'host'      => 'localhost',
+	'database'  => 'database',
+	'username'  => 'root',
+	'password'  => 'password',
+	'charset'   => 'utf8',
+	'collation' => 'utf8_unicode_ci',
+	'prefix'    => '',
+]);
+
+// Set the event dispatcher used by Eloquent models... (optional)
+use Illuminate\Events\Dispatcher;
+use Illuminate\Container\Container;
+$capsule->setEventDispatcher(new Dispatcher(new Container));
+
+// Set the cache manager instance used by connections... (optional)
+$capsule->setCacheManager(...);
+
+// Make this Capsule instance available globally via static methods... (optional)
+$capsule->setAsGlobal();
+
+// Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher())
+$capsule->bootEloquent();
+```
+
+Once the Capsule instance has been registered. You may use it like so:
+
+**Using The Query Builder**
+
+```PHP
+$users = Capsule::table('users')->where('votes', '>', 100)->get();
+```
+Other core methods may be accessed directly from the Capsule in the same manner as from the DB facade:
+```PHP
+$results = Capsule::select('select * from users where id = ?', array(1));
+```
+
+**Using The Schema Builder**
+
+```PHP
+Capsule::schema()->create('users', function($table)
+{
+	$table->increments('id');
+	$table->string('email')->unique();
+	$table->timestamps();
+});
+```
+
+**Using The Eloquent ORM**
+
+```PHP
+class User extends Illuminate\Database\Eloquent\Model {}
+
+$users = User::where('votes', '>', 1)->get();
+```
+
+For further documentation on using the various database facilities this library provides, consult the [Laravel framework documentation](http://laravel.com/docs).

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/SQLiteConnection.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/SQLiteConnection.php b/vendor/laravel/framework/src/Illuminate/Database/SQLiteConnection.php
new file mode 100755
index 0000000..86603fc
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/SQLiteConnection.php
@@ -0,0 +1,49 @@
+<?php namespace Illuminate\Database;
+
+use Doctrine\DBAL\Driver\PDOSqlite\Driver as DoctrineDriver;
+use Illuminate\Database\Query\Grammars\SQLiteGrammar as QueryGrammar;
+use Illuminate\Database\Schema\Grammars\SQLiteGrammar as SchemaGrammar;
+
+class SQLiteConnection extends Connection {
+
+	/**
+	 * Get the default query grammar instance.
+	 *
+	 * @return \Illuminate\Database\Query\Grammars\SQLiteGrammar
+	 */
+	protected function getDefaultQueryGrammar()
+	{
+		return $this->withTablePrefix(new QueryGrammar);
+	}
+
+	/**
+	 * Get the default schema grammar instance.
+	 *
+	 * @return \Illuminate\Database\Schema\Grammars\SQLiteGrammar
+	 */
+	protected function getDefaultSchemaGrammar()
+	{
+		return $this->withTablePrefix(new SchemaGrammar);
+	}
+
+	/**
+	 * Get the default post processor instance.
+	 *
+	 * @return \Illuminate\Database\Query\Processors\Processor
+	 */
+	protected function getDefaultPostProcessor()
+	{
+		return new Query\Processors\SQLiteProcessor;
+	}
+
+	/**
+	 * Get the Doctrine DBAL driver.
+	 *
+	 * @return \Doctrine\DBAL\Driver\PDOSqlite\Driver
+	 */
+	protected function getDoctrineDriver()
+	{
+		return new DoctrineDriver;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php
new file mode 100755
index 0000000..33453ab
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php
@@ -0,0 +1,837 @@
+<?php namespace Illuminate\Database\Schema;
+
+use Closure;
+use Illuminate\Support\Fluent;
+use Illuminate\Database\Connection;
+use Illuminate\Database\Schema\Grammars\Grammar;
+
+class Blueprint {
+
+	/**
+	 * The table the blueprint describes.
+	 *
+	 * @var string
+	 */
+	protected $table;
+
+	/**
+	 * The columns that should be added to the table.
+	 *
+	 * @var array
+	 */
+	protected $columns = array();
+
+	/**
+	 * The commands that should be run for the table.
+	 *
+	 * @var array
+	 */
+	protected $commands = array();
+
+	/**
+	 * The storage engine that should be used for the table.
+	 *
+	 * @var string
+	 */
+	public $engine;
+
+	/**
+	 * Create a new schema blueprint.
+	 *
+	 * @param  string   $table
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function __construct($table, Closure $callback = null)
+	{
+		$this->table = $table;
+
+		if ( ! is_null($callback)) $callback($this);
+	}
+
+	/**
+	 * Execute the blueprint against the database.
+	 *
+	 * @param  \Illuminate\Database\Connection  $connection
+	 * @param  \Illuminate\Database\Schema\Grammars\Grammar $grammar
+	 * @return void
+	 */
+	public function build(Connection $connection, Grammar $grammar)
+	{
+		foreach ($this->toSql($connection, $grammar) as $statement)
+		{
+			$connection->statement($statement);
+		}
+	}
+
+	/**
+	 * Get the raw SQL statements for the blueprint.
+	 *
+	 * @param  \Illuminate\Database\Connection  $connection
+	 * @param  \Illuminate\Database\Schema\Grammars\Grammar  $grammar
+	 * @return array
+	 */
+	public function toSql(Connection $connection, Grammar $grammar)
+	{
+		$this->addImpliedCommands();
+
+		$statements = array();
+
+		// Each type of command has a corresponding compiler function on the schema
+		// grammar which is used to build the necessary SQL statements to build
+		// the blueprint element, so we'll just call that compilers function.
+		foreach ($this->commands as $command)
+		{
+			$method = 'compile'.ucfirst($command->name);
+
+			if (method_exists($grammar, $method))
+			{
+				if ( ! is_null($sql = $grammar->$method($this, $command, $connection)))
+				{
+					$statements = array_merge($statements, (array) $sql);
+				}
+			}
+		}
+
+		return $statements;
+	}
+
+	/**
+	 * Add the commands that are implied by the blueprint.
+	 *
+	 * @return void
+	 */
+	protected function addImpliedCommands()
+	{
+		if (count($this->columns) > 0 && ! $this->creating())
+		{
+			array_unshift($this->commands, $this->createCommand('add'));
+		}
+
+		$this->addFluentIndexes();
+	}
+
+	/**
+	 * Add the index commands fluently specified on columns.
+	 *
+	 * @return void
+	 */
+	protected function addFluentIndexes()
+	{
+		foreach ($this->columns as $column)
+		{
+			foreach (array('primary', 'unique', 'index') as $index)
+			{
+				// If the index has been specified on the given column, but is simply
+				// equal to "true" (boolean), no name has been specified for this
+				// index, so we will simply call the index methods without one.
+				if ($column->$index === true)
+				{
+					$this->$index($column->name);
+
+					continue 2;
+				}
+
+				// If the index has been specified on the column and it is something
+				// other than boolean true, we will assume a name was provided on
+				// the index specification, and pass in the name to the method.
+				elseif (isset($column->$index))
+				{
+					$this->$index($column->name, $column->$index);
+
+					continue 2;
+				}
+			}
+		}
+	}
+
+	/**
+	 * Determine if the blueprint has a create command.
+	 *
+	 * @return bool
+	 */
+	protected function creating()
+	{
+		foreach ($this->commands as $command)
+		{
+			if ($command->name == 'create') return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Indicate that the table needs to be created.
+	 *
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function create()
+	{
+		return $this->addCommand('create');
+	}
+
+	/**
+	 * Indicate that the table should be dropped.
+	 *
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function drop()
+	{
+		return $this->addCommand('drop');
+	}
+
+	/**
+	 * Indicate that the table should be dropped if it exists.
+	 *
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function dropIfExists()
+	{
+		return $this->addCommand('dropIfExists');
+	}
+
+	/**
+	 * Indicate that the given columns should be dropped.
+	 *
+	 * @param  string|array  $columns
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function dropColumn($columns)
+	{
+		$columns = is_array($columns) ? $columns : (array) func_get_args();
+
+		return $this->addCommand('dropColumn', compact('columns'));
+	}
+
+	/**
+	 * Indicate that the given columns should be renamed.
+	 *
+	 * @param  string  $from
+	 * @param  string  $to
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function renameColumn($from, $to)
+	{
+		return $this->addCommand('renameColumn', compact('from', 'to'));
+	}
+
+	/**
+	 * Indicate that the given primary key should be dropped.
+	 *
+	 * @param  string|array  $index
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function dropPrimary($index = null)
+	{
+		return $this->dropIndexCommand('dropPrimary', 'primary', $index);
+	}
+
+	/**
+	 * Indicate that the given unique key should be dropped.
+	 *
+	 * @param  string|array  $index
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function dropUnique($index)
+	{
+		return $this->dropIndexCommand('dropUnique', 'unique', $index);
+	}
+
+	/**
+	 * Indicate that the given index should be dropped.
+	 *
+	 * @param  string|array  $index
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function dropIndex($index)
+	{
+		return $this->dropIndexCommand('dropIndex', 'index', $index);
+	}
+
+	/**
+	 * Indicate that the given foreign key should be dropped.
+	 *
+	 * @param  string  $index
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function dropForeign($index)
+	{
+		return $this->dropIndexCommand('dropForeign', 'foreign', $index);
+	}
+
+	/**
+	 * Indicate that the timestamp columns should be dropped.
+	 *
+	 * @return void
+	 */
+	public function dropTimestamps()
+	{
+		$this->dropColumn('created_at', 'updated_at');
+	}
+
+	/**
+	* Indicate that the soft delete column should be dropped.
+	*
+	* @return void
+	*/
+	public function dropSoftDeletes()
+	{
+		$this->dropColumn('deleted_at');
+	}
+
+	/**
+	 * Rename the table to a given name.
+	 *
+	 * @param  string  $to
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function rename($to)
+	{
+		return $this->addCommand('rename', compact('to'));
+	}
+
+	/**
+	 * Specify the primary key(s) for the table.
+	 *
+	 * @param  string|array  $columns
+	 * @param  string  $name
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function primary($columns, $name = null)
+	{
+		return $this->indexCommand('primary', $columns, $name);
+	}
+
+	/**
+	 * Specify a unique index for the table.
+	 *
+	 * @param  string|array  $columns
+	 * @param  string  $name
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function unique($columns, $name = null)
+	{
+		return $this->indexCommand('unique', $columns, $name);
+	}
+
+	/**
+	 * Specify an index for the table.
+	 *
+	 * @param  string|array  $columns
+	 * @param  string  $name
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function index($columns, $name = null)
+	{
+		return $this->indexCommand('index', $columns, $name);
+	}
+
+	/**
+	 * Specify a foreign key for the table.
+	 *
+	 * @param  string|array  $columns
+	 * @param  string  $name
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function foreign($columns, $name = null)
+	{
+		return $this->indexCommand('foreign', $columns, $name);
+	}
+
+	/**
+	 * Create a new auto-incrementing integer column on the table.
+	 *
+	 * @param  string  $column
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function increments($column)
+	{
+		return $this->unsignedInteger($column, true);
+	}
+
+	/**
+	 * Create a new auto-incrementing big integer column on the table.
+	 *
+	 * @param  string  $column
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function bigIncrements($column)
+	{
+		return $this->unsignedBigInteger($column, true);
+	}
+
+	/**
+	 * Create a new char column on the table.
+	 *
+	 * @param  string  $column
+	 * @param  int  $length
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function char($column, $length = 255)
+	{
+		return $this->addColumn('char', $column, compact('length'));
+	}
+
+	/**
+	 * Create a new string column on the table.
+	 *
+	 * @param  string  $column
+	 * @param  int  $length
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function string($column, $length = 255)
+	{
+		return $this->addColumn('string', $column, compact('length'));
+	}
+
+	/**
+	 * Create a new text column on the table.
+	 *
+	 * @param  string  $column
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function text($column)
+	{
+		return $this->addColumn('text', $column);
+	}
+
+	/**
+	 * Create a new medium text column on the table.
+	 *
+	 * @param  string  $column
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function mediumText($column)
+	{
+		return $this->addColumn('mediumText', $column);
+	}
+
+	/**
+	 * Create a new long text column on the table.
+	 *
+	 * @param  string  $column
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function longText($column)
+	{
+		return $this->addColumn('longText', $column);
+	}
+
+	/**
+	 * Create a new integer column on the table.
+	 *
+	 * @param  string  $column
+	 * @param  bool  $autoIncrement
+	 * @param  bool  $unsigned
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function integer($column, $autoIncrement = false, $unsigned = false)
+	{
+		return $this->addColumn('integer', $column, compact('autoIncrement', 'unsigned'));
+	}
+
+	/**
+	 * Create a new big integer column on the table.
+	 *
+	 * @param  string  $column
+	 * @param  bool  $autoIncrement
+	 * @param  bool  $unsigned
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function bigInteger($column, $autoIncrement = false, $unsigned = false)
+	{
+		return $this->addColumn('bigInteger', $column, compact('autoIncrement', 'unsigned'));
+	}
+
+	/**
+	 * Create a new medium integer column on the table.
+	 *
+	 * @param  string  $column
+	 * @param  bool  $autoIncrement
+	 * @param  bool  $unsigned
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function mediumInteger($column, $autoIncrement = false, $unsigned = false)
+	{
+		return $this->addColumn('mediumInteger', $column, compact('autoIncrement', 'unsigned'));
+	}
+
+	/**
+	 * Create a new tiny integer column on the table.
+	 *
+	 * @param  string  $column
+	 * @param  bool  $autoIncrement
+	 * @param  bool  $unsigned
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function tinyInteger($column, $autoIncrement = false, $unsigned = false)
+	{
+		return $this->addColumn('tinyInteger', $column, compact('autoIncrement', 'unsigned'));
+	}
+
+	/**
+	 * Create a new small integer column on the table.
+	 *
+	 * @param  string  $column
+	 * @param  bool  $autoIncrement
+	 * @param  bool  $unsigned
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function smallInteger($column, $autoIncrement = false, $unsigned = false)
+	{
+		return $this->addColumn('smallInteger', $column, compact('autoIncrement', 'unsigned'));
+	}
+
+	/**
+	 * Create a new unsigned integer column on the table.
+	 *
+	 * @param  string  $column
+	 * @param  bool  $autoIncrement
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function unsignedInteger($column, $autoIncrement = false)
+	{
+		return $this->integer($column, $autoIncrement, true);
+	}
+
+	/**
+	 * Create a new unsigned big integer column on the table.
+	 *
+	 * @param  string  $column
+	 * @param  bool  $autoIncrement
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function unsignedBigInteger($column, $autoIncrement = false)
+	{
+		return $this->bigInteger($column, $autoIncrement, true);
+	}
+
+	/**
+	 * Create a new float column on the table.
+	 *
+	 * @param  string  $column
+	 * @param  int     $total
+	 * @param  int     $places
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function float($column, $total = 8, $places = 2)
+	{
+		return $this->addColumn('float', $column, compact('total', 'places'));
+	}
+
+	/**
+	 * Create a new double column on the table.
+	 *
+	 * @param  string   $column
+	 * @param  int|null	$total
+	 * @param  int|null $places
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function double($column, $total = null, $places = null)
+	{
+		return $this->addColumn('double', $column, compact('total', 'places'));
+	}
+
+	/**
+	 * Create a new decimal column on the table.
+	 *
+	 * @param  string  $column
+	 * @param  int     $total
+	 * @param  int     $places
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function decimal($column, $total = 8, $places = 2)
+	{
+		return $this->addColumn('decimal', $column, compact('total', 'places'));
+	}
+
+	/**
+	 * Create a new boolean column on the table.
+	 *
+	 * @param  string  $column
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function boolean($column)
+	{
+		return $this->addColumn('boolean', $column);
+	}
+
+	/**
+	 * Create a new enum column on the table.
+	 *
+	 * @param  string  $column
+	 * @param  array   $allowed
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function enum($column, array $allowed)
+	{
+		return $this->addColumn('enum', $column, compact('allowed'));
+	}
+
+	/**
+	 * Create a new date column on the table.
+	 *
+	 * @param  string  $column
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function date($column)
+	{
+		return $this->addColumn('date', $column);
+	}
+
+	/**
+	 * Create a new date-time column on the table.
+	 *
+	 * @param  string  $column
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function dateTime($column)
+	{
+		return $this->addColumn('dateTime', $column);
+	}
+
+	/**
+	 * Create a new time column on the table.
+	 *
+	 * @param  string  $column
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function time($column)
+	{
+		return $this->addColumn('time', $column);
+	}
+
+	/**
+	 * Create a new timestamp column on the table.
+	 *
+	 * @param  string  $column
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function timestamp($column)
+	{
+		return $this->addColumn('timestamp', $column);
+	}
+
+	/**
+	 * Add nullable creation and update timestamps to the table.
+	 *
+	 * @return void
+	 */
+	public function nullableTimestamps()
+	{
+		$this->timestamp('created_at')->nullable();
+
+		$this->timestamp('updated_at')->nullable();
+	}
+
+	/**
+	 * Add creation and update timestamps to the table.
+	 *
+	 * @return void
+	 */
+	public function timestamps()
+	{
+		$this->timestamp('created_at');
+
+		$this->timestamp('updated_at');
+	}
+
+	/**
+	 * Add a "deleted at" timestamp for the table.
+	 *
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function softDeletes()
+	{
+		return $this->timestamp('deleted_at')->nullable();
+	}
+
+	/**
+	 * Create a new binary column on the table.
+	 *
+	 * @param  string  $column
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function binary($column)
+	{
+		return $this->addColumn('binary', $column);
+	}
+
+	/**
+	 * Add the proper columns for a polymorphic table.
+	 *
+	 * @param  string  $name
+	 * @param  string|null  $indexName
+	 * @return void
+	 */
+	public function morphs($name, $indexName = null)
+	{
+		$this->unsignedInteger("{$name}_id");
+
+		$this->string("{$name}_type");
+
+		$this->index(array("{$name}_id", "{$name}_type"), $indexName);
+	}
+
+	/**
+	 * Adds the `remember_token` column to the table.
+	 *
+	 * @return \Illuminate\Support\Fluent
+	 */
+	public function rememberToken()
+	{
+		return $this->string('remember_token', 100)->nullable();
+	}
+
+	/**
+	 * Create a new drop index command on the blueprint.
+	 *
+	 * @param  string  $command
+	 * @param  string  $type
+	 * @param  string|array  $index
+	 * @return \Illuminate\Support\Fluent
+	 */
+	protected function dropIndexCommand($command, $type, $index)
+	{
+		$columns = array();
+
+		// If the given "index" is actually an array of columns, the developer means
+		// to drop an index merely by specifying the columns involved without the
+		// conventional name, so we will build the index name from the columns.
+		if (is_array($index))
+		{
+			$columns = $index;
+
+			$index = $this->createIndexName($type, $columns);
+		}
+
+		return $this->indexCommand($command, $columns, $index);
+	}
+
+	/**
+	 * Add a new index command to the blueprint.
+	 *
+	 * @param  string        $type
+	 * @param  string|array  $columns
+	 * @param  string        $index
+	 * @return \Illuminate\Support\Fluent
+	 */
+	protected function indexCommand($type, $columns, $index)
+	{
+		$columns = (array) $columns;
+
+		// If no name was specified for this index, we will create one using a basic
+		// convention of the table name, followed by the columns, followed by an
+		// index type, such as primary or index, which makes the index unique.
+		if (is_null($index))
+		{
+			$index = $this->createIndexName($type, $columns);
+		}
+
+		return $this->addCommand($type, compact('index', 'columns'));
+	}
+
+	/**
+	 * Create a default index name for the table.
+	 *
+	 * @param  string  $type
+	 * @param  array   $columns
+	 * @return string
+	 */
+	protected function createIndexName($type, array $columns)
+	{
+		$index = strtolower($this->table.'_'.implode('_', $columns).'_'.$type);
+
+		return str_replace(array('-', '.'), '_', $index);
+	}
+
+	/**
+	 * Add a new column to the blueprint.
+	 *
+	 * @param  string  $type
+	 * @param  string  $name
+	 * @param  array   $parameters
+	 * @return \Illuminate\Support\Fluent
+	 */
+	protected function addColumn($type, $name, array $parameters = array())
+	{
+		$attributes = array_merge(compact('type', 'name'), $parameters);
+
+		$this->columns[] = $column = new Fluent($attributes);
+
+		return $column;
+	}
+
+	/**
+	 * Remove a column from the schema blueprint.
+	 *
+	 * @param  string  $name
+	 * @return $this
+	 */
+	public function removeColumn($name)
+	{
+		$this->columns = array_values(array_filter($this->columns, function($c) use ($name)
+		{
+			return $c['attributes']['name'] != $name;
+		}));
+
+		return $this;
+	}
+
+	/**
+	 * Add a new command to the blueprint.
+	 *
+	 * @param  string  $name
+	 * @param  array  $parameters
+	 * @return \Illuminate\Support\Fluent
+	 */
+	protected function addCommand($name, array $parameters = array())
+	{
+		$this->commands[] = $command = $this->createCommand($name, $parameters);
+
+		return $command;
+	}
+
+	/**
+	 * Create a new Fluent command.
+	 *
+	 * @param  string  $name
+	 * @param  array   $parameters
+	 * @return \Illuminate\Support\Fluent
+	 */
+	protected function createCommand($name, array $parameters = array())
+	{
+		return new Fluent(array_merge(compact('name'), $parameters));
+	}
+
+	/**
+	 * Get the table the blueprint describes.
+	 *
+	 * @return string
+	 */
+	public function getTable()
+	{
+		return $this->table;
+	}
+
+	/**
+	 * Get the columns that should be added.
+	 *
+	 * @return array
+	 */
+	public function getColumns()
+	{
+		return $this->columns;
+	}
+
+	/**
+	 * Get the commands on the blueprint.
+	 *
+	 * @return array
+	 */
+	public function getCommands()
+	{
+		return $this->commands;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Schema/Builder.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/Builder.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/Builder.php
new file mode 100755
index 0000000..707909b
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/Builder.php
@@ -0,0 +1,223 @@
+<?php namespace Illuminate\Database\Schema;
+
+use Closure;
+use Illuminate\Database\Connection;
+
+class Builder {
+
+	/**
+	 * The database connection instance.
+	 *
+	 * @var \Illuminate\Database\Connection
+	 */
+	protected $connection;
+
+	/**
+	 * The schema grammar instance.
+	 *
+	 * @var \Illuminate\Database\Schema\Grammars\Grammar
+	 */
+	protected $grammar;
+
+	/**
+	 * The Blueprint resolver callback.
+	 *
+	 * @var \Closure
+	 */
+	protected $resolver;
+
+	/**
+	 * Create a new database Schema manager.
+	 *
+	 * @param  \Illuminate\Database\Connection  $connection
+	 * @return void
+	 */
+	public function __construct(Connection $connection)
+	{
+		$this->connection = $connection;
+		$this->grammar = $connection->getSchemaGrammar();
+	}
+
+	/**
+	 * Determine if the given table exists.
+	 *
+	 * @param  string  $table
+	 * @return bool
+	 */
+	public function hasTable($table)
+	{
+		$sql = $this->grammar->compileTableExists();
+
+		$table = $this->connection->getTablePrefix().$table;
+
+		return count($this->connection->select($sql, array($table))) > 0;
+	}
+
+	/**
+	 * Determine if the given table has a given column.
+	 *
+	 * @param  string  $table
+	 * @param  string  $column
+	 * @return bool
+	 */
+	public function hasColumn($table, $column)
+	{
+		$column = strtolower($column);
+
+		return in_array($column, array_map('strtolower', $this->getColumnListing($table)));
+	}
+
+	/**
+	 * Get the column listing for a given table.
+	 *
+	 * @param  string  $table
+	 * @return array
+	 */
+	public function getColumnListing($table)
+	{
+		$table = $this->connection->getTablePrefix().$table;
+
+		$results = $this->connection->select($this->grammar->compileColumnExists($table));
+
+		return $this->connection->getPostProcessor()->processColumnListing($results);
+	}
+
+	/**
+	 * Modify a table on the schema.
+	 *
+	 * @param  string    $table
+	 * @param  \Closure  $callback
+	 * @return \Illuminate\Database\Schema\Blueprint
+	 */
+	public function table($table, Closure $callback)
+	{
+		$this->build($this->createBlueprint($table, $callback));
+	}
+
+	/**
+	 * Create a new table on the schema.
+	 *
+	 * @param  string    $table
+	 * @param  \Closure  $callback
+	 * @return \Illuminate\Database\Schema\Blueprint
+	 */
+	public function create($table, Closure $callback)
+	{
+		$blueprint = $this->createBlueprint($table);
+
+		$blueprint->create();
+
+		$callback($blueprint);
+
+		$this->build($blueprint);
+	}
+
+	/**
+	 * Drop a table from the schema.
+	 *
+	 * @param  string  $table
+	 * @return \Illuminate\Database\Schema\Blueprint
+	 */
+	public function drop($table)
+	{
+		$blueprint = $this->createBlueprint($table);
+
+		$blueprint->drop();
+
+		$this->build($blueprint);
+	}
+
+	/**
+	 * Drop a table from the schema if it exists.
+	 *
+	 * @param  string  $table
+	 * @return \Illuminate\Database\Schema\Blueprint
+	 */
+	public function dropIfExists($table)
+	{
+		$blueprint = $this->createBlueprint($table);
+
+		$blueprint->dropIfExists();
+
+		$this->build($blueprint);
+	}
+
+	/**
+	 * Rename a table on the schema.
+	 *
+	 * @param  string  $from
+	 * @param  string  $to
+	 * @return \Illuminate\Database\Schema\Blueprint
+	 */
+	public function rename($from, $to)
+	{
+		$blueprint = $this->createBlueprint($from);
+
+		$blueprint->rename($to);
+
+		$this->build($blueprint);
+	}
+
+	/**
+	 * Execute the blueprint to build / modify the table.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @return void
+	 */
+	protected function build(Blueprint $blueprint)
+	{
+		$blueprint->build($this->connection, $this->grammar);
+	}
+
+	/**
+	 * Create a new command set with a Closure.
+	 *
+	 * @param  string    $table
+	 * @param  \Closure  $callback
+	 * @return \Illuminate\Database\Schema\Blueprint
+	 */
+	protected function createBlueprint($table, Closure $callback = null)
+	{
+		if (isset($this->resolver))
+		{
+			return call_user_func($this->resolver, $table, $callback);
+		}
+
+		return new Blueprint($table, $callback);
+	}
+
+	/**
+	 * Get the database connection instance.
+	 *
+	 * @return \Illuminate\Database\Connection
+	 */
+	public function getConnection()
+	{
+		return $this->connection;
+	}
+
+	/**
+	 * Set the database connection instance.
+	 *
+	 * @param  \Illuminate\Database\Connection
+	 * @return $this
+	 */
+	public function setConnection(Connection $connection)
+	{
+		$this->connection = $connection;
+
+		return $this;
+	}
+
+	/**
+	 * Set the Schema Blueprint resolver callback.
+	 *
+	 * @param  \Closure  $resolver
+	 * @return void
+	 */
+	public function blueprintResolver(Closure $resolver)
+	{
+		$this->resolver = $resolver;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/Grammar.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/Grammar.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/Grammar.php
new file mode 100755
index 0000000..b45d095
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/Grammar.php
@@ -0,0 +1,270 @@
+<?php namespace Illuminate\Database\Schema\Grammars;
+
+use Illuminate\Support\Fluent;
+use Doctrine\DBAL\Schema\Column;
+use Doctrine\DBAL\Schema\TableDiff;
+use Illuminate\Database\Connection;
+use Illuminate\Database\Query\Expression;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Grammar as BaseGrammar;
+use Doctrine\DBAL\Schema\AbstractSchemaManager as SchemaManager;
+
+abstract class Grammar extends BaseGrammar {
+
+	/**
+	 * Compile a rename column command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @param  \Illuminate\Database\Connection  $connection
+	 * @return array
+	 */
+	public function compileRenameColumn(Blueprint $blueprint, Fluent $command, Connection $connection)
+	{
+		$schema = $connection->getDoctrineSchemaManager();
+
+		$table = $this->getTablePrefix().$blueprint->getTable();
+
+		$column = $connection->getDoctrineColumn($table, $command->from);
+
+		$tableDiff = $this->getRenamedDiff($blueprint, $command, $column, $schema);
+
+		return (array) $schema->getDatabasePlatform()->getAlterTableSQL($tableDiff);
+	}
+
+	/**
+	 * Get a new column instance with the new column name.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @param  \Doctrine\DBAL\Schema\Column  $column
+	 * @param  \Doctrine\DBAL\Schema\AbstractSchemaManager  $schema
+	 * @return \Doctrine\DBAL\Schema\TableDiff
+	 */
+	protected function getRenamedDiff(Blueprint $blueprint, Fluent $command, Column $column, SchemaManager $schema)
+	{
+		$tableDiff = $this->getDoctrineTableDiff($blueprint, $schema);
+
+		return $this->setRenamedColumns($tableDiff, $command, $column);
+	}
+
+	/**
+	 * Set the renamed columns on the table diff.
+	 *
+	 * @param  \Doctrine\DBAL\Schema\TableDiff  $tableDiff
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @param  \Doctrine\DBAL\Schema\Column  $column
+	 * @return \Doctrine\DBAL\Schema\TableDiff
+	 */
+	protected function setRenamedColumns(TableDiff $tableDiff, Fluent $command, Column $column)
+	{
+		$newColumn = new Column($command->to, $column->getType(), $column->toArray());
+
+		$tableDiff->renamedColumns = array($command->from => $newColumn);
+
+		return $tableDiff;
+	}
+
+	/**
+	 * Compile a foreign key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileForeign(Blueprint $blueprint, Fluent $command)
+	{
+		$table = $this->wrapTable($blueprint);
+
+		$on = $this->wrapTable($command->on);
+
+		// We need to prepare several of the elements of the foreign key definition
+		// before we can create the SQL, such as wrapping the tables and convert
+		// an array of columns to comma-delimited strings for the SQL queries.
+		$columns = $this->columnize($command->columns);
+
+		$onColumns = $this->columnize((array) $command->references);
+
+		$sql = "alter table {$table} add constraint {$command->index} ";
+
+		$sql .= "foreign key ({$columns}) references {$on} ({$onColumns})";
+
+		// Once we have the basic foreign key creation statement constructed we can
+		// build out the syntax for what should happen on an update or delete of
+		// the affected columns, which will get something like "cascade", etc.
+		if ( ! is_null($command->onDelete))
+		{
+			$sql .= " on delete {$command->onDelete}";
+		}
+
+		if ( ! is_null($command->onUpdate))
+		{
+			$sql .= " on update {$command->onUpdate}";
+		}
+
+		return $sql;
+	}
+
+	/**
+	 * Compile the blueprint's column definitions.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @return array
+	 */
+	protected function getColumns(Blueprint $blueprint)
+	{
+		$columns = array();
+
+		foreach ($blueprint->getColumns() as $column)
+		{
+			// Each of the column types have their own compiler functions which are tasked
+			// with turning the column definition into its SQL format for this platform
+			// used by the connection. The column's modifiers are compiled and added.
+			$sql = $this->wrap($column).' '.$this->getType($column);
+
+			$columns[] = $this->addModifiers($sql, $blueprint, $column);
+		}
+
+		return $columns;
+	}
+
+	/**
+	 * Add the column modifiers to the definition.
+	 *
+	 * @param  string  $sql
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function addModifiers($sql, Blueprint $blueprint, Fluent $column)
+	{
+		foreach ($this->modifiers as $modifier)
+		{
+			if (method_exists($this, $method = "modify{$modifier}"))
+			{
+				$sql .= $this->{$method}($blueprint, $column);
+			}
+		}
+
+		return $sql;
+	}
+
+	/**
+	 * Get the primary key command if it exists on the blueprint.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  string  $name
+	 * @return \Illuminate\Support\Fluent|null
+	 */
+	protected function getCommandByName(Blueprint $blueprint, $name)
+	{
+		$commands = $this->getCommandsByName($blueprint, $name);
+
+		if (count($commands) > 0)
+		{
+			return reset($commands);
+		}
+	}
+
+	/**
+	 * Get all of the commands with a given name.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  string  $name
+	 * @return array
+	 */
+	protected function getCommandsByName(Blueprint $blueprint, $name)
+	{
+		return array_filter($blueprint->getCommands(), function($value) use ($name)
+		{
+			return $value->name == $name;
+		});
+	}
+
+	/**
+	 * Get the SQL for the column data type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function getType(Fluent $column)
+	{
+		return $this->{"type".ucfirst($column->type)}($column);
+	}
+
+	/**
+	 * Add a prefix to an array of values.
+	 *
+	 * @param  string  $prefix
+	 * @param  array   $values
+	 * @return array
+	 */
+	public function prefixArray($prefix, array $values)
+	{
+		return array_map(function($value) use ($prefix)
+		{
+			return $prefix.' '.$value;
+
+		}, $values);
+	}
+
+	/**
+	 * Wrap a table in keyword identifiers.
+	 *
+	 * @param  mixed   $table
+	 * @return string
+	 */
+	public function wrapTable($table)
+	{
+		if ($table instanceof Blueprint) $table = $table->getTable();
+
+		return parent::wrapTable($table);
+	}
+
+	/**
+	 * Wrap a value in keyword identifiers.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	public function wrap($value)
+	{
+		if ($value instanceof Fluent) $value = $value->name;
+
+		return parent::wrap($value);
+	}
+
+	/**
+	 * Format a value so that it can be used in "default" clauses.
+	 *
+	 * @param  mixed   $value
+	 * @return string
+	 */
+	protected function getDefaultValue($value)
+	{
+		if ($value instanceof Expression) return $value;
+
+		if (is_bool($value)) return "'".(int) $value."'";
+
+		return "'".strval($value)."'";
+	}
+
+	/**
+	 * Create an empty Doctrine DBAL TableDiff from the Blueprint.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Doctrine\DBAL\Schema\AbstractSchemaManager  $schema
+	 * @return \Doctrine\DBAL\Schema\TableDiff
+	 */
+	protected function getDoctrineTableDiff(Blueprint $blueprint, SchemaManager $schema)
+	{
+		$table = $this->getTablePrefix().$blueprint->getTable();
+
+		$tableDiff = new TableDiff($table);
+
+		$tableDiff->fromTable = $schema->listTableDetails($table);
+
+		return $tableDiff;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php
new file mode 100755
index 0000000..c4ef6a5
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php
@@ -0,0 +1,595 @@
+<?php namespace Illuminate\Database\Schema\Grammars;
+
+use Illuminate\Support\Fluent;
+use Illuminate\Database\Connection;
+use Illuminate\Database\Schema\Blueprint;
+
+class MySqlGrammar extends Grammar {
+
+	/**
+	 * The possible column modifiers.
+	 *
+	 * @var array
+	 */
+	protected $modifiers = array('Unsigned', 'Nullable', 'Default', 'Increment', 'Comment', 'After');
+
+	/**
+	 * The possible column serials
+	 *
+	 * @var array
+	 */
+	protected $serials = array('bigInteger', 'integer', 'mediumInteger', 'smallInteger', 'tinyInteger');
+
+	/**
+	 * Compile the query to determine the list of tables.
+	 *
+	 * @return string
+	 */
+	public function compileTableExists()
+	{
+		return 'select * from information_schema.tables where table_schema = ? and table_name = ?';
+	}
+
+	/**
+	 * Compile the query to determine the list of columns.
+	 *
+	 * @return string
+	 */
+	public function compileColumnExists()
+	{
+		return "select column_name from information_schema.columns where table_schema = ? and table_name = ?";
+	}
+
+	/**
+	 * Compile a create table command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @param  \Illuminate\Database\Connection  $connection
+	 * @return string
+	 */
+	public function compileCreate(Blueprint $blueprint, Fluent $command, Connection $connection)
+	{
+		$columns = implode(', ', $this->getColumns($blueprint));
+
+		$sql = 'create table '.$this->wrapTable($blueprint)." ($columns)";
+
+		// Once we have the primary SQL, we can add the encoding option to the SQL for
+		// the table.  Then, we can check if a storage engine has been supplied for
+		// the table. If so, we will add the engine declaration to the SQL query.
+		$sql = $this->compileCreateEncoding($sql, $connection);
+
+		if (isset($blueprint->engine))
+		{
+			$sql .= ' engine = '.$blueprint->engine;
+		}
+
+		return $sql;
+	}
+
+	/**
+	 * Append the character set specifications to a command.
+	 *
+	 * @param  string  $sql
+	 * @param  \Illuminate\Database\Connection  $connection
+	 * @return string
+	 */
+	protected function compileCreateEncoding($sql, Connection $connection)
+	{
+		if ( ! is_null($charset = $connection->getConfig('charset')))
+		{
+			$sql .= ' default character set '.$charset;
+		}
+
+		if ( ! is_null($collation = $connection->getConfig('collation')))
+		{
+			$sql .= ' collate '.$collation;
+		}
+
+		return $sql;
+	}
+
+	/**
+	 * Compile an add column command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileAdd(Blueprint $blueprint, Fluent $command)
+	{
+		$table = $this->wrapTable($blueprint);
+
+		$columns = $this->prefixArray('add', $this->getColumns($blueprint));
+
+		return 'alter table '.$table.' '.implode(', ', $columns);
+	}
+
+	/**
+	 * Compile a primary key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compilePrimary(Blueprint $blueprint, Fluent $command)
+	{
+		$command->name(null);
+
+		return $this->compileKey($blueprint, $command, 'primary key');
+	}
+
+	/**
+	 * Compile a unique key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileUnique(Blueprint $blueprint, Fluent $command)
+	{
+		return $this->compileKey($blueprint, $command, 'unique');
+	}
+
+	/**
+	 * Compile a plain index key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileIndex(Blueprint $blueprint, Fluent $command)
+	{
+		return $this->compileKey($blueprint, $command, 'index');
+	}
+
+	/**
+	 * Compile an index creation command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @param  string  $type
+	 * @return string
+	 */
+	protected function compileKey(Blueprint $blueprint, Fluent $command, $type)
+	{
+		$columns = $this->columnize($command->columns);
+
+		$table = $this->wrapTable($blueprint);
+
+		return "alter table {$table} add {$type} {$command->index}($columns)";
+	}
+
+	/**
+	 * Compile a drop table command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDrop(Blueprint $blueprint, Fluent $command)
+	{
+		return 'drop table '.$this->wrapTable($blueprint);
+	}
+
+	/**
+	 * Compile a drop table (if exists) command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropIfExists(Blueprint $blueprint, Fluent $command)
+	{
+		return 'drop table if exists '.$this->wrapTable($blueprint);
+	}
+
+	/**
+	 * Compile a drop column command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropColumn(Blueprint $blueprint, Fluent $command)
+	{
+		$columns = $this->prefixArray('drop', $this->wrapArray($command->columns));
+
+		$table = $this->wrapTable($blueprint);
+
+		return 'alter table '.$table.' '.implode(', ', $columns);
+	}
+
+	/**
+	 * Compile a drop primary key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropPrimary(Blueprint $blueprint, Fluent $command)
+	{
+		return 'alter table '.$this->wrapTable($blueprint).' drop primary key';
+	}
+
+	/**
+	 * Compile a drop unique key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropUnique(Blueprint $blueprint, Fluent $command)
+	{
+		$table = $this->wrapTable($blueprint);
+
+		return "alter table {$table} drop index {$command->index}";
+	}
+
+	/**
+	 * Compile a drop index command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropIndex(Blueprint $blueprint, Fluent $command)
+	{
+		$table = $this->wrapTable($blueprint);
+
+		return "alter table {$table} drop index {$command->index}";
+	}
+
+	/**
+	 * Compile a drop foreign key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropForeign(Blueprint $blueprint, Fluent $command)
+	{
+		$table = $this->wrapTable($blueprint);
+
+		return "alter table {$table} drop foreign key {$command->index}";
+	}
+
+	/**
+	 * Compile a rename table command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileRename(Blueprint $blueprint, Fluent $command)
+	{
+		$from = $this->wrapTable($blueprint);
+
+		return "rename table {$from} to ".$this->wrapTable($command->to);
+	}
+
+	/**
+	 * Create the column definition for a char type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeChar(Fluent $column)
+	{
+		return "char({$column->length})";
+	}
+
+	/**
+	 * Create the column definition for a string type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeString(Fluent $column)
+	{
+		return "varchar({$column->length})";
+	}
+
+	/**
+	 * Create the column definition for a text type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeText(Fluent $column)
+	{
+		return 'text';
+	}
+
+	/**
+	 * Create the column definition for a medium text type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeMediumText(Fluent $column)
+	{
+		return 'mediumtext';
+	}
+
+	/**
+	 * Create the column definition for a long text type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeLongText(Fluent $column)
+	{
+		return 'longtext';
+	}
+
+	/**
+	 * Create the column definition for a big integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeBigInteger(Fluent $column)
+	{
+		return 'bigint';
+	}
+
+	/**
+	 * Create the column definition for a integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeInteger(Fluent $column)
+	{
+		return 'int';
+	}
+
+	/**
+	 * Create the column definition for a medium integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeMediumInteger(Fluent $column)
+	{
+		return 'mediumint';
+	}
+
+	/**
+	 * Create the column definition for a tiny integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeTinyInteger(Fluent $column)
+	{
+		return 'tinyint';
+	}
+
+	/**
+	 * Create the column definition for a small integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeSmallInteger(Fluent $column)
+	{
+		return 'smallint';
+	}
+
+	/**
+	 * Create the column definition for a float type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeFloat(Fluent $column)
+	{
+		return "float({$column->total}, {$column->places})";
+	}
+
+	/**
+	 * Create the column definition for a double type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeDouble(Fluent $column)
+	{
+		if ($column->total && $column->places)
+		{
+			return "double({$column->total}, {$column->places})";
+		}
+
+		return 'double';
+	}
+
+	/**
+	 * Create the column definition for a decimal type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeDecimal(Fluent $column)
+	{
+		return "decimal({$column->total}, {$column->places})";
+	}
+
+	/**
+	 * Create the column definition for a boolean type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeBoolean(Fluent $column)
+	{
+		return 'tinyint(1)';
+	}
+
+	/**
+	 * Create the column definition for an enum type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeEnum(Fluent $column)
+	{
+		return "enum('".implode("', '", $column->allowed)."')";
+	}
+
+	/**
+	 * Create the column definition for a date type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeDate(Fluent $column)
+	{
+		return 'date';
+	}
+
+	/**
+	 * Create the column definition for a date-time type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeDateTime(Fluent $column)
+	{
+		return 'datetime';
+	}
+
+	/**
+	 * Create the column definition for a time type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeTime(Fluent $column)
+	{
+		return 'time';
+	}
+
+	/**
+	 * Create the column definition for a timestamp type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeTimestamp(Fluent $column)
+	{
+		if ( ! $column->nullable) return 'timestamp default 0';
+
+		return 'timestamp';
+	}
+
+	/**
+	 * Create the column definition for a binary type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeBinary(Fluent $column)
+	{
+		return 'blob';
+	}
+
+	/**
+	 * Get the SQL for an unsigned column modifier.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string|null
+	 */
+	protected function modifyUnsigned(Blueprint $blueprint, Fluent $column)
+	{
+		if ($column->unsigned) return ' unsigned';
+	}
+
+	/**
+	 * Get the SQL for a nullable column modifier.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string|null
+	 */
+	protected function modifyNullable(Blueprint $blueprint, Fluent $column)
+	{
+		return $column->nullable ? ' null' : ' not null';
+	}
+
+	/**
+	 * Get the SQL for a default column modifier.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string|null
+	 */
+	protected function modifyDefault(Blueprint $blueprint, Fluent $column)
+	{
+		if ( ! is_null($column->default))
+		{
+			return " default ".$this->getDefaultValue($column->default);
+		}
+	}
+
+	/**
+	 * Get the SQL for an auto-increment column modifier.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string|null
+	 */
+	protected function modifyIncrement(Blueprint $blueprint, Fluent $column)
+	{
+		if (in_array($column->type, $this->serials) && $column->autoIncrement)
+		{
+			return ' auto_increment primary key';
+		}
+	}
+
+	/**
+	 * Get the SQL for an "after" column modifier.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string|null
+	 */
+	protected function modifyAfter(Blueprint $blueprint, Fluent $column)
+	{
+		if ( ! is_null($column->after))
+		{
+			return ' after '.$this->wrap($column->after);
+		}
+	}
+
+	/**
+	 * Get the SQL for an "comment" column modifier.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string|null
+	 */
+	protected function modifyComment(Blueprint $blueprint, Fluent $column)
+	{
+		if ( ! is_null($column->comment))
+		{
+			return ' comment "'.$column->comment.'"';
+		}
+	}
+
+	/**
+	 * Wrap a single string in keyword identifiers.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected function wrapValue($value)
+	{
+		if ($value === '*') return $value;
+
+		return '`'.str_replace('`', '``', $value).'`';
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php
new file mode 100755
index 0000000..7691617
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php
@@ -0,0 +1,489 @@
+<?php namespace Illuminate\Database\Schema\Grammars;
+
+use Illuminate\Support\Fluent;
+use Illuminate\Database\Schema\Blueprint;
+
+class PostgresGrammar extends Grammar {
+
+	/**
+	 * The possible column modifiers.
+	 *
+	 * @var array
+	 */
+	protected $modifiers = array('Increment', 'Nullable', 'Default');
+
+	/**
+	 * The columns available as serials.
+	 *
+	 * @var array
+	 */
+	protected $serials = array('bigInteger', 'integer');
+
+	/**
+	 * Compile the query to determine if a table exists.
+	 *
+	 * @return string
+	 */
+	public function compileTableExists()
+	{
+		return 'select * from information_schema.tables where table_name = ?';
+	}
+
+	/**
+	 * Compile the query to determine the list of columns.
+	 *
+	 * @param  string  $table
+	 * @return string
+	 */
+	public function compileColumnExists($table)
+	{
+		return "select column_name from information_schema.columns where table_name = '$table'";
+	}
+
+	/**
+	 * Compile a create table command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileCreate(Blueprint $blueprint, Fluent $command)
+	{
+		$columns = implode(', ', $this->getColumns($blueprint));
+
+		return 'create table '.$this->wrapTable($blueprint)." ($columns)";
+	}
+
+	/**
+	 * Compile a create table command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileAdd(Blueprint $blueprint, Fluent $command)
+	{
+		$table = $this->wrapTable($blueprint);
+
+		$columns = $this->prefixArray('add column', $this->getColumns($blueprint));
+
+		return 'alter table '.$table.' '.implode(', ', $columns);
+	}
+
+	/**
+	 * Compile a primary key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compilePrimary(Blueprint $blueprint, Fluent $command)
+	{
+		$columns = $this->columnize($command->columns);
+
+		return 'alter table '.$this->wrapTable($blueprint)." add primary key ({$columns})";
+	}
+
+	/**
+	 * Compile a unique key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileUnique(Blueprint $blueprint, Fluent $command)
+	{
+		$table = $this->wrapTable($blueprint);
+
+		$columns = $this->columnize($command->columns);
+
+		return "alter table $table add constraint {$command->index} unique ($columns)";
+	}
+
+	/**
+	 * Compile a plain index key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileIndex(Blueprint $blueprint, Fluent $command)
+	{
+		$columns = $this->columnize($command->columns);
+
+		return "create index {$command->index} on ".$this->wrapTable($blueprint)." ({$columns})";
+	}
+
+	/**
+	 * Compile a drop table command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDrop(Blueprint $blueprint, Fluent $command)
+	{
+		return 'drop table '.$this->wrapTable($blueprint);
+	}
+
+	/**
+	 * Compile a drop table (if exists) command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropIfExists(Blueprint $blueprint, Fluent $command)
+	{
+		return 'drop table if exists '.$this->wrapTable($blueprint);
+	}
+
+	/**
+	 * Compile a drop column command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropColumn(Blueprint $blueprint, Fluent $command)
+	{
+		$columns = $this->prefixArray('drop column', $this->wrapArray($command->columns));
+
+		$table = $this->wrapTable($blueprint);
+
+		return 'alter table '.$table.' '.implode(', ', $columns);
+	}
+
+	/**
+	 * Compile a drop primary key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropPrimary(Blueprint $blueprint, Fluent $command)
+	{
+		$table = $blueprint->getTable();
+
+		return 'alter table '.$this->wrapTable($blueprint)." drop constraint {$table}_pkey";
+	}
+
+	/**
+	 * Compile a drop unique key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropUnique(Blueprint $blueprint, Fluent $command)
+	{
+		$table = $this->wrapTable($blueprint);
+
+		return "alter table {$table} drop constraint {$command->index}";
+	}
+
+	/**
+	 * Compile a drop index command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropIndex(Blueprint $blueprint, Fluent $command)
+	{
+		return "drop index {$command->index}";
+	}
+
+	/**
+	 * Compile a drop foreign key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropForeign(Blueprint $blueprint, Fluent $command)
+	{
+		$table = $this->wrapTable($blueprint);
+
+		return "alter table {$table} drop constraint {$command->index}";
+	}
+
+	/**
+	 * Compile a rename table command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileRename(Blueprint $blueprint, Fluent $command)
+	{
+		$from = $this->wrapTable($blueprint);
+
+		return "alter table {$from} rename to ".$this->wrapTable($command->to);
+	}
+
+	/**
+	 * Create the column definition for a char type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeChar(Fluent $column)
+	{
+		return "char({$column->length})";
+	}
+
+	/**
+	 * Create the column definition for a string type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeString(Fluent $column)
+	{
+		return "varchar({$column->length})";
+	}
+
+	/**
+	 * Create the column definition for a text type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeText(Fluent $column)
+	{
+		return 'text';
+	}
+
+	/**
+	 * Create the column definition for a medium text type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeMediumText(Fluent $column)
+	{
+		return 'text';
+	}
+
+	/**
+	 * Create the column definition for a long text type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeLongText(Fluent $column)
+	{
+		return 'text';
+	}
+
+	/**
+	 * Create the column definition for a integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeInteger(Fluent $column)
+	{
+		return $column->autoIncrement ? 'serial' : 'integer';
+	}
+
+	/**
+	 * Create the column definition for a big integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeBigInteger(Fluent $column)
+	{
+		return $column->autoIncrement ? 'bigserial' : 'bigint';
+	}
+
+	/**
+	 * Create the column definition for a medium integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeMediumInteger(Fluent $column)
+	{
+		return 'integer';
+	}
+
+	/**
+	 * Create the column definition for a tiny integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeTinyInteger(Fluent $column)
+	{
+		return 'smallint';
+	}
+
+	/**
+	 * Create the column definition for a small integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeSmallInteger(Fluent $column)
+	{
+		return 'smallint';
+	}
+
+	/**
+	 * Create the column definition for a float type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeFloat(Fluent $column)
+	{
+		return 'real';
+	}
+
+	/**
+	 * Create the column definition for a double type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeDouble(Fluent $column)
+	{
+		return 'double precision';
+	}
+
+	/**
+	 * Create the column definition for a decimal type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeDecimal(Fluent $column)
+	{
+		return "decimal({$column->total}, {$column->places})";
+	}
+
+	/**
+	 * Create the column definition for a boolean type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeBoolean(Fluent $column)
+	{
+		return 'boolean';
+	}
+
+	/**
+	 * Create the column definition for an enum type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeEnum(Fluent $column)
+	{
+		$allowed = array_map(function($a) { return "'".$a."'"; }, $column->allowed);
+
+		return "varchar(255) check (\"{$column->name}\" in (".implode(', ', $allowed)."))";
+	}
+
+	/**
+	 * Create the column definition for a date type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeDate(Fluent $column)
+	{
+		return 'date';
+	}
+
+	/**
+	 * Create the column definition for a date-time type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeDateTime(Fluent $column)
+	{
+		return 'timestamp';
+	}
+
+	/**
+	 * Create the column definition for a time type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeTime(Fluent $column)
+	{
+		return 'time';
+	}
+
+	/**
+	 * Create the column definition for a timestamp type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeTimestamp(Fluent $column)
+	{
+		return 'timestamp';
+	}
+
+	/**
+	 * Create the column definition for a binary type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeBinary(Fluent $column)
+	{
+		return 'bytea';
+	}
+
+	/**
+	 * Get the SQL for a nullable column modifier.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string|null
+	 */
+	protected function modifyNullable(Blueprint $blueprint, Fluent $column)
+	{
+		return $column->nullable ? ' null' : ' not null';
+	}
+
+	/**
+	 * Get the SQL for a default column modifier.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string|null
+	 */
+	protected function modifyDefault(Blueprint $blueprint, Fluent $column)
+	{
+		if ( ! is_null($column->default))
+		{
+			return " default ".$this->getDefaultValue($column->default);
+		}
+	}
+
+	/**
+	 * Get the SQL for an auto-increment column modifier.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string|null
+	 */
+	protected function modifyIncrement(Blueprint $blueprint, Fluent $column)
+	{
+		if (in_array($column->type, $this->serials) && $column->autoIncrement)
+		{
+			return ' primary key';
+		}
+	}
+
+}


[39/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/UserStoreManager/TenantManager.php
----------------------------------------------------------------------
diff --git a/app/libraries/UserStoreManager/TenantManager.php b/app/libraries/UserStoreManager/TenantManager.php
new file mode 100755
index 0000000..1cdef20
--- /dev/null
+++ b/app/libraries/UserStoreManager/TenantManager.php
@@ -0,0 +1,138 @@
+<?php
+
+require_once 'TenantMgtAdmin.stub.php';
+
+/**
+ * TenantManager class
+ * 
+ * This class provide an easy to use interface for
+ * WSO2 IS 5.0.0 TenantMgtAdmin service.
+ */
+class TenantManager {
+    /**
+     * @var TenantMgtAdminStub $serviceStub
+     * @access private
+     */
+    private $serviceStub;
+
+    public function __construct($server_url, $options) {
+        $this->serviceStub = new TenantMgtAdminStub(
+                $server_url . "TenantMgtAdminService?wsdl", $options
+        );
+    }
+    
+    /**
+     * Function to get the soap client
+     * 
+     * @return SoapClient
+     */
+    public function getSoapClient(){
+        return $this->serviceStub;
+    }
+
+    /**
+     * Method to retrieve all  tenant information. Some tenant information
+     * such as admin name are not returned by wso2 IS
+     * @return mixed
+     */
+    public function retrieveTenants(){
+        $parameters = new retrieveTenants();
+        return $this->serviceStub->retrieveTenants($parameters)->return;
+    }
+
+    /**
+     * Method to get tenant information giving tenant domain
+     * @param $domain domain of the tenant
+     * @return mixed
+     */
+    public function getTenant($domain){
+        $parameters = new getTenant();
+        $parameters->tenantDomain = $domain;
+        return $this->serviceStub->getTenant($parameters)->return;
+    }
+
+    /**
+     * Method to create a new tenant
+     * @param $active whether tenant active or not
+     * @param $adminUsername
+     * @param $adminPassword
+     * @param $email
+     * @param $firstName Admin's first name
+     * @param $lastName Admin's last name
+     * @param $tenantDomain
+     */
+    public function addTenant($active, $adminUsername, $adminPassword, $email,
+                              $firstName, $lastName, $tenantDomain){
+        $tenantInfoBean = new TenantInfoBean();
+        $tenantInfoBean->active = $active;
+        $tenantInfoBean->admin = $adminUsername;
+        $tenantInfoBean->adminPassword = $adminPassword;
+        $tenantInfoBean->email = $email;
+        $tenantInfoBean->firstName = $firstName;
+        $tenantInfoBean->lastName = $lastName;
+        $tenantInfoBean->tenantDomain = $tenantDomain;
+
+        $addTenant  = new addTenant();
+        $addTenant->tenantInfoBean = $tenantInfoBean;
+        $this->serviceStub->addTenant($addTenant);
+    }
+
+    /**
+     * Method to remove an existing tenant giving tenant domain
+     * @param $tenantDomain
+     */
+    public function deleteTenant($tenantDomain){
+        $parameters = new deleteTenant();
+        $parameters->tenantDomain = $tenantDomain;
+        $this->serviceStub->deleteTenant($parameters);
+    }
+
+    /**
+     * Method to activate a tenant
+     * @param $tenantDomain
+     */
+    public function activateTenant($tenantDomain){
+        $parameters = new activateTenant();
+        $parameters->tenantDomain = $tenantDomain;
+        $this->serviceStub->activateTenant($parameters);
+    }
+
+    /**
+     * Method to deactivate a tenant
+     * @param $tenantDomain
+     */
+    public function deactivateTenant($tenantDomain){
+        $parameters = new deactivateTenant();
+        $parameters->tenantDomain = $tenantDomain;
+        $this->serviceStub->deactivateTenant($parameters);
+    }
+
+    /**
+     * Method to update an existing tenant
+     * @param $tenantId
+     * @param $active
+     * @param $adminUsername
+     * @param $adminPassword
+     * @param $email
+     * @param $firstName
+     * @param $lastName
+     * @param $tenantDomain
+     */
+    public function updateTenant($tenantId, $active, $adminUsername, $adminPassword, $email,
+                              $firstName, $lastName, $tenantDomain){
+        $tenantInfoBean = new TenantInfoBean();
+        $tenantInfoBean->tenantId = $tenantId;
+        $tenantInfoBean->active = $active;
+        $tenantInfoBean->admin = $adminUsername;
+        $tenantInfoBean->adminPassword = $adminPassword;
+        $tenantInfoBean->email = $email;
+        $tenantInfoBean->firstName = $firstName;
+        $tenantInfoBean->lastName = $lastName;
+        $tenantInfoBean->tenantDomain = $tenantDomain;
+
+        $updateTenant  = new updateTenant();
+        $updateTenant->tenantInfoBean = $tenantInfoBean;
+        $this->serviceStub->updateTenant($updateTenant);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/UserStoreManager/TenantMgtAdmin.stub.php
----------------------------------------------------------------------
diff --git a/app/libraries/UserStoreManager/TenantMgtAdmin.stub.php b/app/libraries/UserStoreManager/TenantMgtAdmin.stub.php
new file mode 100644
index 0000000..247687f
--- /dev/null
+++ b/app/libraries/UserStoreManager/TenantMgtAdmin.stub.php
@@ -0,0 +1,304 @@
+<?php
+/**
+ * This file contains the DTOs and the method stubs for
+ * WSO2 IS 5.0.0 TenantMgtAdmin service.
+ */
+class TenantMgtAdminServiceException {
+  public $TenantMgtAdminServiceException; // Exception
+}
+
+
+class deleteTenant {
+  public $tenantDomain; // string
+}
+
+class updateTenant {
+  public $tenantInfoBean; // TenantInfoBean
+}
+
+class addTenant {
+  public $tenantInfoBean; // TenantInfoBean
+}
+
+class addTenantResponse {
+  public $return; // string
+}
+
+class activateTenant {
+  public $tenantDomain; // string
+}
+
+class deactivateTenant {
+  public $tenantDomain; // string
+}
+
+class getTenant {
+  public $tenantDomain; // string
+}
+
+class getTenantResponse {
+  public $return; // TenantInfoBean
+}
+
+class retrievePaginatedTenants {
+  public $pageNumber; // int
+}
+
+class retrievePaginatedTenantsResponse {
+  public $return; // PaginatedTenantInfoBean
+}
+
+class retrieveTenants {
+}
+
+class retrieveTenantsResponse {
+  public $return; // TenantInfoBean
+}
+
+class retrievePartialSearchTenants {
+  public $domain; // string
+}
+
+class retrievePartialSearchTenantsResponse {
+  public $return; // TenantInfoBean
+}
+
+class addSkeletonTenant {
+  public $tenantInfoBean; // TenantInfoBean
+}
+
+class addSkeletonTenantResponse {
+  public $return; // string
+}
+
+class retrievePaginatedPartialSearchTenants {
+  public $domain; // string
+  public $pageNumber; // int
+}
+
+class retrievePaginatedPartialSearchTenantsResponse {
+  public $return; // PaginatedTenantInfoBean
+}
+
+class TenantInfoBean {
+  public $active; // boolean
+  public $admin; // string
+  public $adminPassword; // string
+  public $createdDate; // dateTime
+  public $email; // string
+  public $firstname; // string
+  public $lastname; // string
+  public $originatedService; // string
+  public $successKey; // string
+  public $tenantDomain; // string
+  public $tenantId; // int
+  public $usagePlan; // string
+}
+
+class PaginatedTenantInfoBean {
+  public $numberOfPages; // int
+  public $tenantInfoBeans; // TenantInfoBean
+}
+
+
+/**
+ * TenantMgtAdminStub class
+ * 
+ *  
+ * 
+ * @author    {author}
+ * @copyright {copyright}
+ * @package   {package}
+ */
+class TenantMgtAdminStub extends SoapClient {
+
+  private static $classmap = array(
+                                    'TenantMgtAdminServiceException' => 'TenantMgtAdminServiceException',
+                                    'deleteTenant' => 'deleteTenant',
+                                    'updateTenant' => 'updateTenant',
+                                    'addTenant' => 'addTenant',
+                                    'addTenantResponse' => 'addTenantResponse',
+                                    'activateTenant' => 'activateTenant',
+                                    'deactivateTenant' => 'deactivateTenant',
+                                    'getTenant' => 'getTenant',
+                                    'getTenantResponse' => 'getTenantResponse',
+                                    'retrievePaginatedTenants' => 'retrievePaginatedTenants',
+                                    'retrievePaginatedTenantsResponse' => 'retrievePaginatedTenantsResponse',
+                                    'retrieveTenants' => 'retrieveTenants',
+                                    'retrieveTenantsResponse' => 'retrieveTenantsResponse',
+                                    'retrievePartialSearchTenants' => 'retrievePartialSearchTenants',
+                                    'retrievePartialSearchTenantsResponse' => 'retrievePartialSearchTenantsResponse',
+                                    'addSkeletonTenant' => 'addSkeletonTenant',
+                                    'addSkeletonTenantResponse' => 'addSkeletonTenantResponse',
+                                    'retrievePaginatedPartialSearchTenants' => 'retrievePaginatedPartialSearchTenants',
+                                    'retrievePaginatedPartialSearchTenantsResponse' => 'retrievePaginatedPartialSearchTenantsResponse',
+                                    'TenantInfoBean' => 'TenantInfoBean',
+                                    'PaginatedTenantInfoBean' => 'PaginatedTenantInfoBean',
+                                   );
+
+  public function TenantMgtAdminStub($wsdl, $options = array()) {
+    foreach(self::$classmap as $key => $value) {
+      if(!isset($options['classmap'][$key])) {
+        $options['classmap'][$key] = $value;
+      }
+    }
+    parent::__construct($wsdl, $options);
+  }
+
+  /**
+   *  
+   *
+   * @param retrieveTenants $parameters
+   * @return retrieveTenantsResponse
+   */
+  public function retrieveTenants(retrieveTenants $parameters) {
+    return $this->__soapCall('retrieveTenants', array($parameters),       array(
+            'uri' => 'http://services.mgt.tenant.carbon.wso2.org',
+            'soapaction' => ''
+           )
+      );
+  }
+
+  /**
+   *  
+   *
+   * @param getTenant $parameters
+   * @return getTenantResponse
+   */
+  public function getTenant(getTenant $parameters) {
+    return $this->__soapCall('getTenant', array($parameters),       array(
+            'uri' => 'http://services.mgt.tenant.carbon.wso2.org',
+            'soapaction' => ''
+           )
+      );
+  }
+
+  /**
+   *  
+   *
+   * @param deactivateTenant $parameters
+   * @return void
+   */
+  public function deactivateTenant(deactivateTenant $parameters) {
+    return $this->__soapCall('deactivateTenant', array($parameters),       array(
+            'uri' => 'http://services.mgt.tenant.carbon.wso2.org',
+            'soapaction' => ''
+           )
+      );
+  }
+
+  /**
+   *  
+   *
+   * @param retrievePartialSearchTenants $parameters
+   * @return retrievePartialSearchTenantsResponse
+   */
+  public function retrievePartialSearchTenants(retrievePartialSearchTenants $parameters) {
+    return $this->__soapCall('retrievePartialSearchTenants', array($parameters),       array(
+            'uri' => 'http://services.mgt.tenant.carbon.wso2.org',
+            'soapaction' => ''
+           )
+      );
+  }
+
+  /**
+   *  
+   *
+   * @param retrievePaginatedTenants $parameters
+   * @return retrievePaginatedTenantsResponse
+   */
+  public function retrievePaginatedTenants(retrievePaginatedTenants $parameters) {
+    return $this->__soapCall('retrievePaginatedTenants', array($parameters),       array(
+            'uri' => 'http://services.mgt.tenant.carbon.wso2.org',
+            'soapaction' => ''
+           )
+      );
+  }
+
+  /**
+   *  
+   *
+   * @param updateTenant $parameters
+   * @return void
+   */
+  public function updateTenant(updateTenant $parameters) {
+    return $this->__soapCall('updateTenant', array($parameters),       array(
+            'uri' => 'http://services.mgt.tenant.carbon.wso2.org',
+            'soapaction' => ''
+           )
+      );
+  }
+
+  /**
+   *  
+   *
+   * @param addSkeletonTenant $parameters
+   * @return addSkeletonTenantResponse
+   */
+  public function addSkeletonTenant(addSkeletonTenant $parameters) {
+    return $this->__soapCall('addSkeletonTenant', array($parameters),       array(
+            'uri' => 'http://services.mgt.tenant.carbon.wso2.org',
+            'soapaction' => ''
+           )
+      );
+  }
+
+  /**
+   *  
+   *
+   * @param addTenant $parameters
+   * @return addTenantResponse
+   */
+  public function addTenant(addTenant $parameters) {
+    return $this->__soapCall('addTenant', array($parameters),       array(
+            'uri' => 'http://services.mgt.tenant.carbon.wso2.org',
+            'soapaction' => ''
+           )
+      );
+  }
+
+  /**
+   *  
+   *
+   * @param retrievePaginatedPartialSearchTenants $parameters
+   * @return retrievePaginatedPartialSearchTenantsResponse
+   */
+  public function retrievePaginatedPartialSearchTenants(retrievePaginatedPartialSearchTenants $parameters) {
+    return $this->__soapCall('retrievePaginatedPartialSearchTenants', array($parameters),       array(
+            'uri' => 'http://services.mgt.tenant.carbon.wso2.org',
+            'soapaction' => ''
+           )
+      );
+  }
+
+  /**
+   *  
+   *
+   * @param activateTenant $parameters
+   * @return void
+   */
+  public function activateTenant(activateTenant $parameters) {
+    return $this->__soapCall('activateTenant', array($parameters),       array(
+            'uri' => 'http://services.mgt.tenant.carbon.wso2.org',
+            'soapaction' => ''
+           )
+      );
+  }
+
+  /**
+   *  
+   *
+   * @param deleteTenant $parameters
+   * @return void
+   */
+  public function deleteTenant(deleteTenant $parameters) {
+    return $this->__soapCall('deleteTenant', array($parameters),       array(
+            'uri' => 'http://services.mgt.tenant.carbon.wso2.org',
+            'soapaction' => ''
+           )
+      );
+  }
+
+}
+
+?>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/UserStoreManager/UserStoreManager.php
----------------------------------------------------------------------
diff --git a/app/libraries/UserStoreManager/UserStoreManager.php b/app/libraries/UserStoreManager/UserStoreManager.php
new file mode 100755
index 0000000..7da0ae0
--- /dev/null
+++ b/app/libraries/UserStoreManager/UserStoreManager.php
@@ -0,0 +1,202 @@
+<?php
+
+require_once 'UserStoreManager.stub.php';
+
+/**
+ * UsersStoreManager class
+ * 
+ * This class provide an easy to use interface for
+ * WSO2 IS 5.0.0 RemoteUserStoreManager service.
+ */
+class UserStoreManager {
+    /**
+     * @var RemoteUserManagerStub $serviceStub
+     * @access private
+     */
+    private $serviceStub;
+
+    public function __construct($server_url, $options) {
+        $this->serviceStub = new UserStoreManagerStub(
+                $server_url . "RemoteUserStoreManagerService?wsdl", $options
+        );
+    }
+    
+    /**
+     * Function to get the soap client
+     * 
+     * @return SoapClient
+     */
+    public function getSoapClient(){
+        return $this->serviceStub;
+    }
+    
+    /**
+     * Function to authenticate the user with RemoteUserStoreManager Service
+     * @param type $username
+     * @param type $password
+     */
+    public function authenticate($username, $password){
+        $parameters = new Authenticate();
+        $parameters->userName = $username;
+        $parameters->credential = $password;        
+        return $this->serviceStub->authenticate($parameters)->return;
+    }
+    
+    /**
+     * Function to add new user by providing username and password
+     * 
+     * @param type $userName
+     * @param type $password
+     */
+    public function addUser($userName, $password, $fullName){
+        $parameters = new AddUser();
+        $parameters->userName = $userName;
+        $parameters->credential = $password;
+        $parameters->claims = null;
+        $parameters->profileName = $fullName;
+        $parameters->requirePasswordChange = false;
+        $parameters->roleList = null;
+        $this->serviceStub->addUser($parameters);
+    }
+    /**
+     * Function to delete existing user by providing the username.
+     * 
+     * @param string $username
+     */
+    public function deleteUser($username){
+        $parameters = new DeleteUser();
+        $parameters->userName = $username;
+        $this->serviceStub->deleteUser($parameters);
+    }
+    
+    /**
+     * Function to check whether a role is existing 
+     *
+     * @param string $roleName 
+     * @return IsExistingRoleResponse
+     */
+    public function isExistingRole( $roleName) {
+        $parameters = new IsExistingRole();
+        $parameters->roleName = $roleName;
+        $this->serviceStub->isExistingRole( $parameters)->return;
+    }
+    /**
+     * Function to add new role by providing the role name.
+     * 
+     * @param string $roleName
+     */
+    public function addRole($roleName){
+        $paramerters = new AddRole();
+        $paramerters->roleName=$roleName;
+        $paramerters->userList=null;
+        $paramerters->permissions=null;
+        $this->serviceStub->addRole($paramerters);
+    }
+    
+    /**
+     * Function to delete an existing role
+     * 
+     * @param string $roleName
+     */
+    public function deleteRole($roleName){
+        $parameters = new DeleteRole();
+        $parameters->roleName = $roleName;
+        $this->serviceStub->deleteRole($parameters);
+    }
+    
+    /**
+     * Function to get a list of users
+     * 
+     * @return username list
+     */
+    public function listUsers(){
+        $parameters = new ListUsers();
+        $parameters->filter = "*";
+        $parameters->maxItemLimit = -1;
+        
+        return $this->serviceStub->listUsers($parameters)->return;
+    }
+
+     /**
+     * Function get user list
+     *
+     * @param GetUserList $parameters
+     * @return GetUserListResponse
+     */
+     public function getUserList(){
+        $parameters = new GetUserList();
+    }
+
+        
+    /**
+     * Function to check whether the given username already exists
+     * 
+     * @param string $username
+     * @return boolean
+     */
+    public function isExistingUser($username) {
+        $parameters = new IsExistingUser();
+        $parameters->userName = $username;
+        
+        return $this->serviceStub->isExistingUser($parameters)->return;
+    }
+
+    /**
+    * Function to get the list of all existing roles
+    *
+    * @return roles list
+    */
+    public function getRoleNames( $parameters = null){
+        $parameters = new GetRoleNames();
+        return $this->serviceStub->getRoleNames( $parameters)->return;
+    }
+
+    /**
+    * Function to get role of a user
+    *
+    * @return User Role
+    */
+    public function getRoleListOfUser( $username){
+        $parameters = new GetRoleListOfUser();
+        $parameters->userName = $username;
+        return $this->serviceStub->GetRoleListOfUser( $parameters)->return;
+    }
+
+    /**
+     * Function to get the user list of role
+     *
+     * @param GetUserListOfRole $parameters
+     * @return GetUserListOfRoleResponse
+     */
+    public function getUserListOfRole( $roleName){
+        $parameters = new GetUserListOfRole();
+        $parameters->roleName = $roleName;
+        return $this->serviceStub->getUserListOfRole( $parameters);
+    }
+    
+    /**
+     * Function to update role list of user 
+     *
+     * @param UpdateRoleListOfUser $parameters
+     * @return void
+     */
+    public function updateRoleListOfUser( $username, $roles){
+        $parameters = new UpdateRoleListOfUser();
+        $parameters->userName = $username;
+        $parameters->deletedRoles = $roles["deleted"];
+        $parameters->newRoles = $roles["new"];
+        return $this->serviceStub->updateRoleListOfUser( $parameters);
+    }
+
+    /**
+     * Function to get the tenant id
+     *
+     * @param GetTenantId $parameters
+     * @return GetTenantIdResponse
+     */
+    public function getTenantId(){
+        $parameters = new GetTenantId();
+
+        return $this->serviceStub->getTenantId( $parameters);
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/UserStoreManager/UserStoreManager.stub.php
----------------------------------------------------------------------
diff --git a/app/libraries/UserStoreManager/UserStoreManager.stub.php b/app/libraries/UserStoreManager/UserStoreManager.stub.php
new file mode 100755
index 0000000..d92ccb9
--- /dev/null
+++ b/app/libraries/UserStoreManager/UserStoreManager.stub.php
@@ -0,0 +1,1568 @@
+<?php
+
+/**
+ * This file contains the DTOs and the method stubs for
+ * WSO2 IS 4.6.0 RemoteUserStoreManger service.
+ */
+
+class ClaimDTO {
+
+    /**
+     * @var string $claimUri
+     * @access public
+     */
+    public $claimUri;
+
+    /**
+     * @var string $description
+     * @access public
+     */
+    public $description;
+
+    /**
+     * @var string $dialectURI
+     * @access public
+     */
+    public $dialectURI;
+
+    /**
+     * @var int $displayOrder
+     * @access public
+     */
+    public $displayOrder;
+
+    /**
+     * @var string $displayTag
+     * @access public
+     */
+    public $displayTag;
+
+    /**
+     * @var string $regEx
+     * @access public
+     */
+    public $regEx;
+
+    /**
+     * @var boolean $required
+     * @access public
+     */
+    public $required;
+
+    /**
+     * @var boolean $supportedByDefault
+     * @access public
+     */
+    public $supportedByDefault;
+
+    /**
+     * @var string $value
+     * @access public
+     */
+    public $value;
+
+}
+
+class PermissionDTO {
+
+    /**
+     * @var string $action
+     * @access public
+     */
+    public $action;
+
+    /**
+     * @var string $resourceId
+     * @access public
+     */
+    public $resourceId;
+
+}
+
+class Tenant {
+
+    /**
+     * @var boolean $active
+     * @access public
+     */
+    public $active;
+
+    /**
+     * @var string $adminFirstName
+     * @access public
+     */
+    public $adminFirstName;
+
+    /**
+     * @var string $adminFullName
+     * @access public
+     */
+    public $adminFullName;
+
+    /**
+     * @var string $adminLastName
+     * @access public
+     */
+    public $adminLastName;
+
+    /**
+     * @var string $adminName
+     * @access public
+     */
+    public $adminName;
+
+    /**
+     * @var string $adminPassword
+     * @access public
+     */
+    public $adminPassword;
+
+    /**
+     * @var string $createdDate YYYY-MM-DD
+     * @access public
+     */
+    public $createdDate;
+
+    /**
+     * @var string $domain
+     * @access public
+     */
+    public $domain;
+
+    /**
+     * @var string $email
+     * @access public
+     */
+    public $email;
+
+    /**
+     * @var int $id
+     * @access public
+     */
+    public $id;
+
+    /**
+     * @var RealmConfiguration $realmConfig
+     * @access public
+     */
+    public $realmConfig;
+
+}
+
+class RealmConfiguration {
+
+    /**
+     * @var string $addAdmin
+     * @access public
+     */
+    public $addAdmin;
+
+    /**
+     * @var string $adminPassword
+     * @access public
+     */
+    public $adminPassword;
+
+    /**
+     * @var string $adminRoleName
+     * @access public
+     */
+    public $adminRoleName;
+
+    /**
+     * @var string $adminUserName
+     * @access public
+     */
+    public $adminUserName;
+
+    /**
+     * @var string $authorizationManagerClass
+     * @access public
+     */
+    public $authorizationManagerClass;
+
+    /**
+     * @var string $authzProperties
+     * @access public
+     */
+    public $authzProperties;
+
+    /**
+     * @var string $description
+     * @access public
+     */
+    public $description;
+
+    /**
+     * @var string $everyOneRoleName
+     * @access public
+     */
+    public $everyOneRoleName;
+
+    /**
+     * @var string $multipleCredentialProps
+     * @access public
+     */
+    public $multipleCredentialProps;
+
+    /**
+     * @var boolean $passwordsExternallyManaged
+     * @access public
+     */
+    public $passwordsExternallyManaged;
+
+    /**
+     * @var string $persistedTimestamp YYYY-MM-DD
+     * @access public
+     */
+    public $persistedTimestamp;
+
+    /**
+     * @var boolean $primary
+     * @access public
+     */
+    public $primary;
+
+    /**
+     * @var string $realmClassName
+     * @access public
+     */
+    public $realmClassName;
+
+    /**
+     * @var string $realmProperties
+     * @access public
+     */
+    public $realmProperties;
+
+    /**
+     * @var RealmConfiguration $secondaryRealmConfig
+     * @access public
+     */
+    public $secondaryRealmConfig;
+
+    /**
+     * @var int $tenantId
+     * @access public
+     */
+    public $tenantId;
+
+    /**
+     * @var string $userStoreClass
+     * @access public
+     */
+    public $userStoreClass;
+
+    /**
+     * @var string $userStoreProperties
+     * @access public
+     */
+    public $userStoreProperties;
+
+}
+
+class ClaimValue {
+
+    /**
+     * @var string $claimURI
+     * @access public
+     */
+    public $claimURI;
+
+    /**
+     * @var string $value
+     * @access public
+     */
+    public $value;
+
+}
+
+class AddUserClaimValues {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $userName;
+
+    /**
+     * @var ClaimValue $claims
+     * @access public
+     */
+    public $claims;
+
+    /**
+     * @var string $profileName
+     * @access public
+     */
+    public $profileName;
+
+}
+
+class GetUserClaimValuesForClaims {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $userName;
+
+    /**
+     * @var string $claims
+     * @access public
+     */
+    public $claims;
+
+    /**
+     * @var string $profileName
+     * @access public
+     */
+    public $profileName;
+
+}
+
+class GetUserClaimValuesForClaimsResponse {
+
+    /**
+     * @var ClaimValue $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class GetTenantIdofUser {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $username;
+
+}
+
+class GetTenantIdofUserResponse {
+
+    /**
+     * @var int $return
+     * @access public
+     */
+    public $return; // int
+
+}
+
+class AddUserClaimValue {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $userName;
+
+    /**
+     * @var string $claimURI
+     * @access public
+     */
+    public $claimURI;
+
+    /**
+     * @var string $claimValue
+     * @access public
+     */
+    public $claimValue;
+
+    /**
+     * @var string $profileName
+     * @access public
+     */
+    public $profileName;
+
+}
+
+class GetUserClaimValues {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $userName;
+
+    /**
+     * @var string $profileName
+     * @access public
+     */
+    public $profileName;
+
+}
+
+class GetUserClaimValuesResponse {
+
+    /**
+     * @var ClaimDTO $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class GetTenantId {
+    
+}
+
+class GetTenantIdResponse {
+
+    /**
+     * @var int $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class AddUser {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $userName;
+
+    /**
+     * @var string $credential
+     * @access public
+     */
+    public $credential;
+
+    /**
+     * @var string $roleList
+     * @access public
+     */
+    public $roleList;
+
+    /**
+     * @var ClaimValue $claims
+     * @access public
+     */
+    public $claims;
+
+    /**
+     * @var string $profileName
+     * @access public
+     */
+    public $profileName;
+
+    /**
+     * @var boolean $requiredPasswordChange
+     * @access public
+     */
+    public $requirePasswordChange;
+
+}
+
+class AddRole {
+
+    /**
+     * @var string $roleName
+     * @access public
+     */
+    public $roleName;
+
+    /**
+     * @var string $userList
+     * @access public
+     */
+    public $userList;
+
+    /**
+     * @var PermissionDTO $permissions
+     * @access public
+     */
+    public $permissions;
+
+}
+
+class GetUserList {
+
+    /**
+     * @var string $claimUri
+     * @access public
+     */
+    public $claimUri;
+
+    /**
+     * @var string $claimValue
+     * @access public
+     */
+    public $claimValue;
+
+    /**
+     * @var string $profile
+     * @access public
+     */
+    public $profile;
+
+}
+
+class GetUserListResponse {
+
+    /**
+     * @var string $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class UpdateCredential {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $userName;
+
+    /**
+     * @var string $newCredential
+     * @access public
+     */
+    public $newCredential;
+
+    /**
+     * @var string $oldCredential
+     * @access public
+     */
+    public $oldCredential;
+
+}
+
+class UpdateUserListOfRole {
+
+    /**
+     * @var string $roleName
+     * @access public
+     */
+    public $roleName;
+
+    /**
+     * @var string $deletedUsers
+     * @access public
+     */
+    public $deletedUsers;
+
+    /**
+     * @var string $newUsers
+     * @access public
+     */
+    public $newUsers;
+
+}
+
+class UpdateRoleListOfUser {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $userName;
+
+    /**
+     * @var string $deletedRoles
+     * @access public
+     */
+    public $deletedRoles;
+
+    /**
+     * @var string $newRoles
+     * @access public
+     */
+    public $newRoles;
+
+}
+
+class SetUserClaimValue {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $userName;
+
+    /**
+     * @var string $claimURI
+     * @access public
+     */
+    public $claimURI;
+
+    /**
+     * @var string $claimValue
+     * @access public
+     */
+    public $claimValue;
+
+    /**
+     * @var string $profileName
+     * @access public
+     */
+    public $profileName;
+
+}
+
+class SetUserClaimValues {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $userName;
+
+    /**
+     * @var ClaimValue $claims
+     * @access public
+     */
+    public $claims;
+
+    /**
+     * @var string $profileName
+     * @access public
+     */
+    public $profileName;
+
+}
+
+class DeleteUserClaimValue {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $userName;
+
+    /**
+     * @var string $claimURI
+     * @access public
+     */
+    public $claimURI;
+
+    /**
+     * @var string $profileName
+     * @access public
+     */
+    public $profileName;
+
+}
+
+class DeleteUserClaimValues {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $userName;
+
+    /**
+     * @var string $claims
+     * @access public
+     */
+    public $claims;
+
+    /**
+     * @var string $profileName
+     * @access public
+     */
+    public $profileName;
+
+}
+
+class GetHybridRoles {
+    
+}
+
+class GetHybridRolesResponse {
+
+    /**
+     * @var string $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class GetPasswordExpirationTime {
+
+    /**
+     * @var string $username
+     * @access public
+     */
+    public $username;
+
+}
+
+class GetPasswordExpirationTimeResponse {
+
+    /**
+     * @var long $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class UpdateRoleName {
+
+    /**
+     * @var string $roleName
+     * @access public
+     */
+    public $roleName;
+
+    /**
+     * @var string $newRoleName
+     * @access public
+     */
+    public $newRoleName;
+
+}
+
+class ListUsers {
+
+    /**
+     * @var string $filter
+     * @access public
+     */
+    public $filter;
+
+    /**
+     * @var int $maxItemLimit
+     * @access public
+     */
+    public $maxItemLimit;
+
+}
+
+class ListUsersResponse {
+
+    /**
+     * @var string $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class IsExistingUser {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $userName;
+
+}
+
+class IsExistingUserResponse {
+
+    /**
+     * @var boolean $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class IsExistingRole {
+
+    /**
+     * @var string $roleName
+     * @access public
+     */
+    public $roleName;
+
+}
+
+class IsExistingRoleResponse {
+
+    /**
+     * @var boolean $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class GetRoleNames {
+    
+}
+
+class GetRoleNamesResponse {
+
+    /**
+     * @var string $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class GetProfileNames {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $userName;
+
+}
+
+class GetProfileNamesResponse {
+
+    /**
+     * @var string $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class GetUserListOfRole {
+
+    /**
+     * @var string $roleName
+     * @access public
+     */
+    public $roleName;
+
+}
+
+class GetUserListOfRoleResponse {
+
+    /**
+     * @var string $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class GetUserClaimValue {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $userName;
+
+    /**
+     * @var string $claim
+     * @access public
+     */
+    public $claim;
+
+    /**
+     * @var string $profileName
+     * @access public
+     */
+    public $profileName;
+
+}
+
+class GetUserClaimValueResponse {
+
+    /**
+     * @var string $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class GetAllProfileNames {
+    
+}
+
+class GetAllProfileNamesResponse {
+
+    /**
+     * @var string $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class UpdateCredentialByAdmin {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $userName;
+
+    /**
+     * @var string $newCredential
+     * @access public
+     */
+    public $newCredential;
+
+}
+
+class DeleteUser {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $userName;
+
+}
+
+class DeleteRole {
+
+    /**
+     * @var string $roleName
+     * @access public
+     */
+    public $roleName;
+
+}
+
+class GetUserId {
+
+    /**
+     * @var string $username
+     * @access public
+     */
+    public $username;
+
+}
+
+class GetUserIdResponse {
+
+    /**
+     * @var int $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class GetRoleListOfUser {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $userName;
+
+}
+
+class getRoleListOfUserResponse {
+
+    /**
+     * @var string $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class GetProperties {
+
+    /**
+     * @var Tenant $tenant
+     * @access public
+     */
+    public $tenant;
+
+}
+
+class GetPropertiesResponse {
+
+    /**
+     * @var Array<string> $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class IsReadOnly {
+    
+}
+
+class IsReadOnlyResponse {
+
+    /**
+     * @var boolean $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class Authenticate {
+
+    /**
+     * @var string $userName
+     * @access public
+     */
+    public $userName;
+
+    /**
+     * @var string $credential
+     * @access public
+     */
+    public $credential;
+
+}
+
+class AuthenticateResponse {
+
+    /**
+     * @var boolean $return
+     * @access public
+     */
+    public $return;
+
+}
+
+class UserStoreException {
+    
+}
+
+/**
+ * UserStoreManagerService class
+ * 
+ */
+class UserStoreManagerStub extends SoapClient {
+
+    private static $classmap = array(
+        'ClaimDTO' => 'ClaimDTO',
+        'PermissionDTO' => 'PermissionDTO',
+        'Tenant' => 'Tenant',
+        'RealmConfiguration' => 'RealmConfiguration',
+        'ClaimValue' => 'ClaimValue',
+        'addUserClaimValues' => 'AddUserClaimValues',
+        'getUserClaimValuesForClaims' => 'GetUserClaimValuesForClaims',
+        'getUserClaimValuesForClaimsResponse' => 'GetUserClaimValuesForClaimsResponse',
+        'getTenantIdofUser' => 'GetTenantIdofUser',
+        'getTenantIdofUserResponse' => 'GetTenantIdofUserResponse',
+        'addUserClaimValue' => 'AddUserClaimValue',
+        'getUserClaimValues' => 'GetUserClaimValues',
+        'getUserClaimValuesResponse' => 'GetUserClaimValuesResponse',
+        'getTenantId' => 'GetTenantId',
+        'getTenantIdResponse' => 'GetTenantIdResponse',
+        'addUser' => 'AddUser',
+        'addRole' => 'AddRole',
+        'getUserList' => 'GetUserList',
+        'getUserListResponse' => 'GetUserListResponse',
+        'updateCredential' => 'UpdateCredential',
+        'updateUserListOfRole' => 'UpdateUserListOfRole',
+        'updateRoleListOfUser' => 'UpdateRoleListOfUser',
+        'setUserClaimValue' => 'SetUserClaimValue',
+        'setUserClaimValues' => 'SetUserClaimValues',
+        'deleteUserClaimValue' => 'DeleteUserClaimValue',
+        'deleteUserClaimValues' => 'DeleteUserClaimValues',
+        'getHybridRoles' => 'GetHybridRoles',
+        'getHybridRolesResponse' => 'GetHybridRolesResponse',
+        'getPasswordExpirationTime' => 'GetPasswordExpirationTime',
+        'getPasswordExpirationTimeResponse' => 'GetPasswordExpirationTimeResponse',
+        'updateRoleName' => 'UpdateRoleName',
+        'listUsers' => 'ListUsers',
+        'listUsersResponse' => 'ListUsersResponse',
+        'isExistingUser' => 'IsExistingUser',
+        'isExistingUserResponse' => 'IsExistingUserResponse',
+        'isExistingRole' => 'IsExistingRole',
+        'isExistingRoleResponse' => 'IsExistingRoleResponse',
+        'getRoleNames' => 'GetRoleNames',
+        'getRoleNamesResponse' => 'GetRoleNamesResponse',
+        'getProfileNames' => 'GetProfileNames',
+        'getProfileNamesResponse' => 'GetProfileNamesResponse',
+        'getUserListOfRole' => 'GetUserListOfRole',
+        'getUserListOfRoleResponse' => 'GetUserListOfRoleResponse',
+        'getUserClaimValue' => 'GetUserClaimValue',
+        'getUserClaimValueResponse' => 'GetUserClaimValueResponse',
+        'getAllProfileNames' => 'GetAllProfileNames',
+        'getAllProfileNamesResponse' => 'GetAllProfileNamesResponse',
+        'updateCredentialByAdmin' => 'UpdateCredentialByAdmin',
+        'deleteUser' => 'DeleteUser',
+        'deleteRole' => 'DeleteRole',
+        'getUserId' => 'GetUserId',
+        'getUserIdResponse' => 'GetUserIdResponse',
+        'getRoleListOfUser' => 'GetRoleListOfUser',
+        'getRoleListOfUserResponse' => 'GetRoleListOfUserResponse',
+        'getProperties' => 'GetProperties',
+        'getPropertiesResponse' => 'GetPropertiesResponse',
+        'isReadOnly' => 'IsReadOnly',
+        'isReadOnlyResponse' => 'IsReadOnlyResponse',
+        'authenticate' => 'Authenticate',
+        'authenticateResponse' => 'AuthenticateResponse',
+        'Tenant' => 'Tenant'
+    );
+
+    public function RemoteUserStoreManagerStub($wsdl, $options = array()) {
+        foreach (self::$classmap as $key => $value) {
+            if (!isset($options['classmap'][$key])) {
+                $options['classmap'][$key] = $value;
+            }
+        }
+        parent::__construct($wsdl, $options);
+    }
+
+    /**
+     * Function to authenticate 
+     *
+     * @param Authenticate $parameters
+     * @return AuthenticateResponse
+     */
+    public function authenticate(Authenticate $parameters) {
+        return $this->__soapCall('authenticate', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function get user list
+     *
+     * @param GetUserList $parameters
+     * @return GetUserListResponse
+     */
+    public function getUserList(GetUserList $parameters) {
+        return $this->__soapCall('getUserList', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to get the user claim value
+     *
+     * @param GetUserClaimValue $parameters
+     * @return GetUserClaimValueResponse
+     */
+    public function getUserClaimValue(GetUserClaimValue $parameters) {
+        return $this->__soapCall('getUserClaimValue', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to get the user list of role
+     *
+     * @param GetUserListOfRole $parameters
+     * @return GetUserListOfRoleResponse
+     */
+    public function getUserListOfRole(GetUserListOfRole $parameters) {
+        return $this->__soapCall('getUserListOfRole', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to check whether the service is read only 
+     *
+     * @param IsReadOnly $parameters
+     * @return IsReadOnlyResponse
+     */
+    public function isReadOnly(IsReadOnly $parameters) {
+        return $this->__soapCall('isReadOnly', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to update the credentials
+     *
+     * @param UpdateCredential $parameters
+     * @return void
+     */
+    public function updateCredential(UpdateCredential $parameters) {
+        return $this->__soapCall('updateCredential', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to set user claim value 
+     *
+     * @param SetUserClaimValue $parameters
+     * @return void
+     */
+    public function setUserClaimValue(setUserClaimValue $parameters) {
+        return $this->__soapCall('setUserClaimValue', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to get the claim values for claims
+     *
+     * @param GetUserClaimValuesForClaims $parameters
+     * @return GetUserClaimValuesForClaimsResponse
+     */
+    public function getUserClaimValuesForClaims(GetUserClaimValuesForClaims $parameters) {
+        return $this->__soapCall('getUserClaimValuesForClaims', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to delete user claim values 
+     *
+     * @param DeleteUserClaimValues $parameters
+     * @return void
+     */
+    public function deleteUserClaimValues(DeleteUserClaimValues $parameters) {
+        return $this->__soapCall('deleteUserClaimValues', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to delete user claim value 
+     *
+     * @param DeleteUserClaimValue $parameters
+     * @return void
+     */
+    public function deleteUserClaimValue(DeleteUserClaimValue $parameters) {
+        return $this->__soapCall('deleteUserClaimValue', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to check whether use is existing 
+     *
+     * @param IsExistingUser $parameters
+     * @return IsExistingUserResponse
+     */
+    public function isExistingUser(IsExistingUser $parameters) {
+        return $this->__soapCall('isExistingUser', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to update credential by admin
+     *
+     * @param UpdateCredentialByAdmin $parameters
+     * @return void
+     */
+    public function updateCredentialByAdmin(UpdateCredentialByAdmin $parameters) {
+        return $this->__soapCall('updateCredentialByAdmin', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to get the tenant id
+     *
+     * @param GetTenantId $parameters
+     * @return GetTenantIdResponse
+     */
+    public function getTenantId(GetTenantId $parameters) {
+        return $this->__soapCall('getTenantId', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to get role names 
+     *
+     * @param GetRoleNames $parameters
+     * @return GetRoleNamesResponse
+     */
+    public function getRoleNames(GetRoleNames $parameters) {
+        return $this->__soapCall('getRoleNames', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Funtion to get properties
+     *
+     * @param GetProperties $parameters
+     * @return GetPropertiesResponse
+     */
+    public function getProperties(GetProperties $parameters) {
+        return $this->__soapCall('getProperties', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to get user id
+     *
+     * @param GetUserId $parameters
+     * @return GetUserIdResponse
+     */
+    public function getUserId(GetUserId $parameters) {
+        return $this->__soapCall('getUserId', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to get all the profile names  
+     *
+     * @param GetAllProfileNames $parameters
+     * @return GetAllProfileNamesResponse
+     */
+    public function getAllProfileNames(GetAllProfileNames $parameters) {
+        return $this->__soapCall('getAllProfileNames', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to get the password expiration time 
+     *
+     * @param GetPasswordExpirationTime $parameters
+     * @return GetPasswordExpirationTimeResponse
+     */
+    public function getPasswordExpirationTime(GetPasswordExpirationTime $parameters) {
+        return $this->__soapCall('getPasswordExpirationTime', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to list users
+     *
+     * @param ListUsers $parameters
+     * @return ListUsersResponse
+     */
+    public function listUsers(ListUsers $parameters) {
+        return $this->__soapCall('listUsers', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to delete role 
+     *
+     * @param DeleteRole $parameters
+     * @return void
+     */
+    public function deleteRole(DeleteRole $parameters) {
+        return $this->__soapCall('deleteRole', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to delete user 
+     *
+     * @param DeleteUser $parameters
+     * @return void
+     */
+    public function deleteUser(DeleteUser $parameters) {
+        return $this->__soapCall('deleteUser', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function get the role list of the user 
+     *
+     * @param GetRoleListOfUser $parameters
+     * @return GetRoleListOfUserResponse
+     */
+    public function getRoleListOfUser(GetRoleListOfUser $parameters) {
+        return $this->__soapCall('getRoleListOfUser', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to update the role name
+     *
+     * @param UpdateRoleName $parameters
+     * @return void
+     */
+    public function updateRoleName(UpdateRoleName $parameters) {
+        return $this->__soapCall('updateRoleName', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to check whether a role is existing 
+     *
+     * @param IsExistingRole $parameters
+     * @return IsExistingRoleResponse
+     */
+    public function isExistingRole(IsExistingRole $parameters) {
+        return $this->__soapCall('isExistingRole', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to update role list of user 
+     *
+     * @param UpdateRoleListOfUser $parameters
+     * @return void
+     */
+    public function updateRoleListOfUser(UpdateRoleListOfUser $parameters) {
+        return $this->__soapCall('updateRoleListOfUser', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to get user claim values 
+     *
+     * @param GetUserClaimValues $parameters
+     * @return GetUserClaimValuesResponse
+     */
+    public function getUserClaimValues(GetUserClaimValues $parameters) {
+        return $this->__soapCall('getUserClaimValues', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to get hybrid roles
+     *
+     * @param GetHybridRoles $parameters
+     * @return GetHybridRolesResponse
+     */
+    public function getHybridRoles(GetHybridRoles $parameters) {
+        return $this->__soapCall('getHybridRoles', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to add user claim values 
+     *
+     * @param AddUserClaimValues $parameters
+     * @return void
+     */
+    public function addUserClaimValues(AddUserClaimValues $parameters) {
+        return $this->__soapCall('addUserClaimValues', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to add user 
+     *
+     * @param AddUser $parameters
+     * @return void
+     */
+    public function addUser(AddUser $parameters) {
+        return $this->__soapCall('addUser', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to add role 
+     *
+     * @param AddRole $parameters
+     * @return void
+     */
+    public function addRole(AddRole $parameters) {
+        return $this->__soapCall('addRole', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to update user list of roles 
+     *
+     * @param UpdateUserListOfRole $parameters
+     * @return void
+     */
+    public function updateUserListOfRole(UpdateUserListOfRole $parameters) {
+        return $this->__soapCall('updateUserListOfRole', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to get the tenant Id 
+     *
+     * @param GetTenantIdofUser $parameters
+     * @return GetTenantIdofUserResponse
+     */
+    public function getTenantIdofUser(GetTenantIdofUser $parameters) {
+        return $this->__soapCall('getTenantIdofUser', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to set user claim values 
+     *
+     * @param SetUserClaimValues $parameters
+     * @return void
+     */
+    public function setUserClaimValues(SetUserClaimValues $parameters) {
+        return $this->__soapCall('setUserClaimValues', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to add user claim value 
+     *
+     * @param AddUserClaimValue $parameters
+     * @return void
+     */
+    public function addUserClaimValue(AddUserClaimValue $parameters) {
+        return $this->__soapCall('addUserClaimValue', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+    /**
+     * Function to get the profile names
+     *
+     * @param GetProfileNames $parameters
+     * @return GetProfileNamesResponse
+     */
+    public function getProfileNames(GetProfileNames $parameters) {
+        return $this->__soapCall('getProfileNames', array($parameters), array(
+                    'uri' => 'http://service.ws.um.carbon.wso2.org',
+                    'soapaction' => ''
+        ));
+    }
+
+}
+
+?>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/WSISClient.php
----------------------------------------------------------------------
diff --git a/app/libraries/WSISClient.php b/app/libraries/WSISClient.php
new file mode 100755
index 0000000..47e242d
--- /dev/null
+++ b/app/libraries/WSISClient.php
@@ -0,0 +1,282 @@
+<?php
+
+require_once 'UserStoreManager/UserStoreManager.php';
+
+/**
+ * WSISClient class
+ * 
+ * This class provides a unified interface for the
+ * WSO2 IS 4.6.0 service APIs.
+ */
+class WSISClient {
+
+    /**
+     * @var UserStoreManager
+     * @access private
+     */
+    private $userStoreManager;
+
+    /**
+     * @var string
+     * @access private
+     */
+    private $server;
+    
+    /**
+     * @var string
+     * @access private
+     */
+    private $service_url;
+
+
+    /**
+     * Constructor
+     * 
+     * @param string $admin_username
+     * @param string $admin_password
+     * @param string $server
+     * @param string $service_url
+     * @param string $cafile_path
+     * @param bool   $verify_peer
+     * @param bool   $allow_selfsigned_cer
+     * @throws Exception
+     */
+    public function __construct($admin_username, $admin_password = null, $server,
+            $service_url,$cafile_path, $verify_peer, $allow_selfsigned_cert) {
+        
+        $context = stream_context_create(array(
+            'ssl' => array(
+                'verify_peer' => $verify_peer,
+                "allow_self_signed"=> $allow_selfsigned_cert,
+                'cafile' => $cafile_path,
+                'CN_match' => $server,
+        )));
+
+        $parameters = array(
+            'login' => $admin_username,
+            'password' => $admin_password,
+            'stream_context' => $context,
+            'trace' => 1,
+            'features' => SOAP_WAIT_ONE_WAY_CALLS
+        );
+
+        $this->server = $server;
+        $this->service_url = $service_url;
+        
+        try {
+            $this->userStoreManager = new UserStoreManager($service_url, $parameters);
+        } catch (Exception $ex) {
+            print_r( $ex); exit;
+            throw new Exception("Unable to instantiate client", 0, $ex);
+        }
+    }
+
+    
+    /**
+     * Function to add new user
+     * 
+     * @param string $userName
+     * @param string $password
+     * @return void
+     * @throws Exception
+     */
+    public function addUser($userName, $password, $fullName) {
+        try {
+            $this->userStoreManager->addUser($userName, $password, $fullName);
+        } catch (Exception $ex) {
+            throw new Exception("Unable to add new user", 0, $ex);
+        }
+    }
+    
+    /**
+     * Function to delete existing user
+     * 
+     * @param string $username
+     * @return void
+     * @throws Exception
+     */
+    public function deleteUser($username) {
+        try {
+            $this->userStoreManager->deleteUser($username);
+        } catch (Exception $ex) {
+            throw new Exception("Unable to delete user", 0, $ex);
+        }
+    }
+
+    
+    /**
+     * Function to authenticate user
+     * 
+     * @param string $username
+     * @param string $password
+     * @return boolean
+     * @throws Exception
+     */
+    public function authenticate($username, $password){
+        try {
+            return $this->userStoreManager->authenticate($username, $password);
+        } catch (Exception $ex) {
+            var_dump( $ex); exit;
+            throw new Exception("Unable to authenticate user", 0, $ex);
+        }
+    }
+    
+    /**
+     * Function to check whether username exists
+     * 
+     * @param string $username
+     * @return boolean
+     * @throws Exception
+     */
+    public function username_exists($username){
+        try {
+            return $this->userStoreManager->isExistingUser($username);
+        } catch (Exception $ex) {
+            throw new Exception("Unable to verify username exists", 0, $ex);
+        }
+    }
+
+    /**
+     * Function to check whether a role is existing 
+     *
+     * @param string $roleName 
+     * @return IsExistingRoleResponse
+     */
+    public function is_existing_role( $roleName){
+        try {
+            return $this->userStoreManager->isExistingRole( $roleName);
+        } catch (Exception $ex) {
+            throw new Exception("Unable to check if the role exists", 0, $ex);
+        }
+    }
+
+    /**
+     * Function to add new role by providing the role name.
+     * 
+     * @param string $roleName
+     */
+    public function add_role($roleName){
+        try {
+            return $this->userStoreManager->addRole( $roleName);
+        } catch (Exception $ex) {
+            throw new Exception("Unable to add this role", 0, $ex);
+        }
+    }
+
+    /**
+     * Function to delete existing role
+     * 
+     * @param string $roleName
+     * @return void
+     * @throws Exception
+     */
+    public function delete_role($roleName) {
+        try {
+            $this->userStoreManager->deleteRole($roleName);
+        } catch (Exception $ex) {
+                        var_dump( $ex); exit;
+
+            throw new Exception("Unable to delete role", 0, $ex);
+        }
+    }
+    
+    /**
+    * Function to get the list of all existing roles
+    *
+    * @return roles list
+    */
+    public function get_all_roles(){
+        try {
+            return $this->userStoreManager->getRoleNames();
+        } catch (Exception $ex) {
+            throw new Exception("Unable to get all roles", 0, $ex);
+        }
+    }
+
+    /**
+    * Function to get role of a user
+    *
+    * @return user role
+    */
+    public function get_user_roles( $username){
+        try {
+            return $this->userStoreManager->getRoleListOfUser( $username);
+        } catch (Exception $ex) {
+            throw new Exception("Unable to get User roles.", 0, $ex);
+        }
+    }
+
+    /**
+     * Function to get the user list of role
+     *
+     * @param GetUserListOfRole $parameters
+     * @return GetUserListOfRoleResponse
+     */
+    public function get_userlist_of_role( $role){
+        try {
+            return $this->userStoreManager->getUserListOfRole( $role);
+        } catch (Exception $ex) {
+            var_dump( $ex); exit;
+            throw new Exception("Unable to get user list of roles.", 0, $ex);
+        }   
+    }
+
+    /**
+     * Function to update role list of user 
+     *
+     * @param UpdateRoleListOfUser $parameters
+     * @return void
+     */
+    public function update_user_roles( $username, $roles){
+        try {
+            return $this->userStoreManager->updateRoleListOfUser( $username, $roles);
+        } catch (Exception $ex) {
+            throw new Exception("Unable to update role of the user.", 0, $ex);
+        }
+    }
+
+    /**
+     * Function to list users
+     *
+     * @param void
+     * @return void
+     */
+    public function list_users(){
+        try {
+            return $this->userStoreManager->listUsers();
+        } catch (Exception $ex) {
+            var_dump( $ex->debug_message); 
+            throw new Exception("Unable to list users.", 0, $ex);
+        }
+    }
+
+    /**
+     * Function to get the tenant id
+     *
+     * @param GetTenantId $parameters
+     * @return GetTenantIdResponse
+     */
+    public function get_tenant_id(){
+        try {
+            return $this->userStoreManager->getTenantId();
+        } catch (Exception $ex) {
+            var_dump( $ex->debug_message); 
+            throw new Exception("Unable to get the tenant Id.", 0, $ex);
+        }
+    }
+
+    /**
+    * Function create a new Tenant
+    *
+    * @param Tenant $parameters
+    * @return void
+    */
+    public function create_tenant( $inputs){
+        try {
+            return $this->userStoreManager->createTenant( $inputs);
+        } catch (Exception $ex) {
+            var_dump( $ex); 
+            throw new Exception("Unable to create Tenant.", 0, $ex);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/id_utilities.php
----------------------------------------------------------------------
diff --git a/app/libraries/id_utilities.php b/app/libraries/id_utilities.php
new file mode 100755
index 0000000..9db7450
--- /dev/null
+++ b/app/libraries/id_utilities.php
@@ -0,0 +1,172 @@
+<?php
+/**
+ * Interface for ID management
+ */
+
+interface IdUtilities
+{
+    /**
+     * Connect to the user database.
+     * @return mixed|void
+     */
+    public function connect();
+
+    /**
+     * Return true if the given username exists in the database.
+     * @param $username
+     * @return bool
+     */
+    public function username_exists($username);
+
+    /**
+     * Authenticate user given username and password.
+     * @param $username
+     * @param $password
+     * @return int|mixed
+     */
+    public function authenticate($username, $password);
+
+    /**
+     * Create new user
+     *
+     * @param $username
+     * @param $password
+     * @param $first_name
+     * @param $last_name
+     * @param $email
+     * @param $organization
+     * @param $address
+     * @param $country
+     * @param $telephone
+     * @param $mobile
+     * @param $im
+     * @param $url
+     * @return mixed
+     */
+    public function add_user($username, $password, $first_name, $last_name, $email, $organization,
+            $address, $country,$telephone, $mobile, $im, $url);
+
+    /**
+     * Function to remove an existing user
+     *
+     * @param $username
+     * @return void
+     */
+    public function remove_user($username);
+
+    /**
+     * Get the user profile
+     * @param $username
+     * @return mixed|void
+     */
+    public function get_user_profile($username);
+
+    /**
+     * Update the user profile
+     *
+     * @param $username
+     * @param $first_name
+     * @param $last_name
+     * @param $email
+     * @param $organization
+     * @param $address
+     * @param $country
+     * @param $telephone
+     * @param $mobile
+     * @param $im
+     * @param $url
+     * @return mixed
+     */
+    public function update_user_profile($username, $first_name, $last_name, $email, $organization, $address,
+        $country, $telephone, $mobile, $im, $url);
+
+    /**
+     * Function to update user password
+     *
+     * @param $username
+     * @param $current_password
+     * @param $new_password
+     * @return mixed
+     */
+    public function change_password($username, $current_password, $new_password);
+
+    /**
+     * Function to check whether a user has permission for a particular permission string(api method).
+     *
+     * @param $username
+     * @param $permission_string
+     * @return bool
+     */
+    public function checkPermissionForUser($username, $permission_string);
+
+    /**
+     * Function to get all the permissions that a particular user has.
+     *
+     * @param $username
+     * @return mixed
+     */
+    public function getUserPermissions($username);
+
+    /**
+     * Function to get the entire list of roles in the application
+     *
+     * @return mixed
+     */
+    public function getRoleNames();
+    
+    /**
+     * Function to check whether a role is existing 
+     *
+     * @param string $roleName 
+     * @return IsExistingRoleResponse
+     */
+    public function isExistingRole( $roleName);
+
+    /**
+     * Function to add new role by providing the role name.
+     * 
+     * @param string $roleName
+     */
+    public function addRole($roleName);
+
+    /**
+     * Function to get the role list of a user
+     *
+     * @param $username
+     * @return mixed
+     */
+    public function getRoleListOfUser($username);
+    /**
+     * Function to update role list of user 
+     *
+     * @param UpdateRoleListOfUser $parameters
+     * @return void
+     */
+    public function updateRoleListOfUser( $username, $roles);
+
+    /**
+     * Function to get the user list of a particular role
+     *
+     * @param $role
+     * @return mixed
+     */
+    public function getUserListOfRole($role);
+
+    /**
+     * Function to add a role to a user
+     *
+     * @param $username
+     * @param $role
+     * @return void
+     */
+    public function addUserToRole($username, $role);
+
+    /**
+     * Function to role from user
+     *
+     * @param $username
+     * @param $role
+     * @return void
+     */
+    public function removeUserFromRole($username, $role);
+} 
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/userapi_config.ini
----------------------------------------------------------------------
diff --git a/app/libraries/userapi_config.ini b/app/libraries/userapi_config.ini
new file mode 100755
index 0000000..ad96b5d
--- /dev/null
+++ b/app/libraries/userapi_config.ini
@@ -0,0 +1,14 @@
+;Tenant admin's username
+admin-username = "admin@phprg.scigap.org"
+
+;Tenant admin's password
+admin-password = "prodphprgadmin@scigap.org"
+
+;user api server host
+server-host = "gw127.iu.xsede.org"
+
+;user api server port
+server-port = "9930"
+
+;thrift transport timeout
+thrift-timeout = "5000"

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/libraries/userapi_utilities.php
----------------------------------------------------------------------
diff --git a/app/libraries/userapi_utilities.php b/app/libraries/userapi_utilities.php
new file mode 100755
index 0000000..31cf1f7
--- /dev/null
+++ b/app/libraries/userapi_utilities.php
@@ -0,0 +1,394 @@
+<?php
+/**
+ * Basic Airavata UserAPI utility functions
+ */
+/**
+ * Import Thrift and Airavata
+ */
+/*$GLOBALS['THRIFT_ROOT'] = './lib/Thrift/';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Transport/TTransport.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Transport/TSocket.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Protocol/TProtocol.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Protocol/TBinaryProtocol.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Exception/TException.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Exception/TApplicationException.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Exception/TProtocolException.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Base/TBase.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Type/TType.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Type/TMessageType.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'Factory/TStringFuncFactory.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'StringFunc/TStringFunc.php';
+require_once $GLOBALS['THRIFT_ROOT'] . 'StringFunc/Core.php';
+
+$GLOBALS['AIRAVATA_ROOT'] = './lib/Airavata/';
+require_once $GLOBALS['AIRAVATA_ROOT'] . 'UserAPI/UserAPI.php';
+require_once $GLOBALS['AIRAVATA_ROOT'] . 'UserAPI/Models/Types.php';
+require_once $GLOBALS['AIRAVATA_ROOT'] . 'UserAPI/Error/Types.php';
+require_once $GLOBALS['AIRAVATA_ROOT'] . 'UserAPI/Types.php';
+
+require_once './lib/UserAPIClientFactory.php';
+require_once './id_utilities.php';
+require_once './wsis_utilities.php';
+
+use \Airavata\UserAPI\UserAPIClient;
+use \Airavata\UserAPI\UserAPIClientFactory;
+use \Airavata\UserAPI\Models\UserProfile;
+use \Airavata\UserAPI\Models\APIPermissions;
+use \Airavata\UserAPI\Models\AuthenticationResponse;
+
+/**
+ * Utilities for ID management with Airavata UserAPI*/
+ */
+
+class UserAPIUtilities implements IdUtilities{
+
+    const USER_API_CONFIG_PATH = 'userapi_config.ini';
+
+    /**
+     * UserAPI client
+     *
+     * @var UserAPIClient
+     * @access private
+     */
+    private $userapi_client;
+
+
+    /**
+     * UserAPI client factory
+     *
+     * @var UserAPIClientFactory
+     * @access private
+     */
+    private $userapi_client_factory;
+
+    /**
+     * Path to the user api token file
+     */
+    const USERAPI_TOKEN_DB_PATH = 'userapi_tokens.xml';
+
+    /**
+     * Connect to the identity store.
+     * @return mixed|void
+     */
+    public function connect() {
+        try {
+            global $userapi_config;
+
+            if (file_exists(self::USER_API_CONFIG_PATH)) {
+                $userapi_config = parse_ini_file(self::USER_API_CONFIG_PATH);
+            } else {
+                throw new Exception("Error: Cannot open userapi_config.xml file!");
+            }
+
+            if (!$userapi_config) {
+                throw new Exception('Error: Unable to read userapi_config.xml!');
+            }
+
+            $properties = array();
+            $properties['userapiServerHost'] = $userapi_config['server-host'];
+            $properties['userapiServerPort'] = $userapi_config['server-port'];
+            $properties['thriftTimeout'] = $userapi_config['thrift-timeout'];
+
+            $this->userapi_client_factory = new UserAPIClientFactory($properties);
+            $this->userapi_client = $this->userapi_client_factory->getUserAPIClient();
+            //testing the API
+            $this->userapi_client->getAPIVersion();
+        } catch (Exception $ex) {
+            print_r( $ex); exit;
+            throw new Exception('Unable to instantiate UserAPI client.', 0, NULL);
+        }
+    }
+
+    /**
+     * Return true if the given username exists in the identity server.
+     * @param $username
+     * @return bool
+     */
+    public function username_exists($username) {
+        try{
+            return $this->userapi_client->checkUsernameExists($username,$this->getAPIToken());
+        } catch (Exception $ex) {
+            throw new Exception("Unable to check whether username exists", 0, NULL);
+        }
+
+    }
+
+    /**
+     * authenticate a given user
+     * @param $username
+     * @param $password
+     * @return boolean
+     */
+    public function authenticate($username, $password) {
+        try{
+            $apiPermissions = $this->userapi_client->authenticateUser($username, $password, $this->getAPIToken());
+            return true;
+        } catch (Exception $ex) {
+            throw new Exception("Unable to authenticate user", 0, NULL);
+        }
+    }
+
+    /**
+     * Add a new user to the identity server.
+     * @param $username
+     * @param $password
+     * @return void
+     */
+    public function add_user($username, $password, $first_name, $last_name, $email, $organization,
+                             $address, $country,$telephone, $mobile, $im, $url) {
+        try{
+            $profile = new UserProfile();
+            $profile->firstName = $first_name;
+            $profile->lastName = $last_name;
+            $profile->emailAddress = $email;
+            $profile->organization = $organization;
+            $profile->address = $address;
+            $profile->country = $country;
+            $profile->telephone = $telephone;
+            $profile->mobile = $mobile;
+            $profile->im = $im;
+            $profile->url = $url;
+
+            $this->userapi_client->createNewUser($username, $password, $profile, $this->getAPIToken());
+        } catch (Exception $ex) {
+            throw new Exception("Unable to add new user", 0, NULL);
+        }
+    }
+
+    /**
+     * Get the user profile
+     * @param $username
+     * @return mixed|void
+     */
+    public function get_user_profile($username)
+    {
+        try{
+            $profile_obj = $this->userapi_client->getUserProfile($username, $this->getAPIToken());
+            $profile_arr = array();
+            $profile_arr['first_name'] = $profile_obj->firstName;
+            $profile_arr['last_name'] = $profile_obj->lastName;
+            $profile_arr['email_address'] = $profile_obj->emailAddress;
+            $profile_arr['organization'] = $profile_obj->organization;
+            $profile_arr['address'] = $profile_obj->address;
+            $profile_arr['country'] = $profile_obj->country;
+            $profile_arr['telephone'] = $profile_obj->telephone;
+            $profile_arr['mobile'] = $profile_obj->mobile;
+            $profile_arr['im'] = $profile_obj->im;
+            $profile_arr['url'] = $profile_obj->url;
+            return $profile_arr;
+        } catch (Exception $ex) {
+            throw new Exception("Unable to get user profile", 0, NULL);
+        }
+    }
+
+    /**
+     * Update the user profile
+     *
+     * @param $username
+     * @param $first_name
+     * @param $last_name
+     * @param $email
+     * @param $organization
+     * @param $address
+     * @param $country
+     * @param $telephone
+     * @param $mobile
+     * @param $im
+     * @param $url
+     * @return mixed
+     */
+    public function update_user_profile($username, $first_name, $last_name, $email, $organization, $address,
+                                        $country, $telephone, $mobile, $im, $url)
+    {
+        try{
+            $profile = new UserProfile();
+            $profile->firstName = $first_name;
+            $profile->lastName = $last_name;
+            $profile->emailAddress = $email;
+            $profile->organization = $organization;
+            $profile->address = $address;
+            $profile->country = $country;
+            $profile->telephone = $telephone;
+            $profile->mobile = $mobile;
+            $profile->im = $im;
+            $profile->url = $url;
+            $this->userapi_client->updateUserProfile($username, $profile, $this->getAPIToken());
+        } catch (Exception $ex) {
+            throw new Exception("Unable to update user profile", 0, NULL);
+        }
+    }
+
+    /**
+     * Function to update user password
+     *
+     * @param $username
+     * @param $current_password
+     * @param $new_password
+     * @return mixed
+     */
+    public function change_password($username, $current_password, $new_password)
+    {
+        try{
+            $this->userapi_client->updateUserPassword($username, $new_password, $current_password, $this->getAPIToken());
+        } catch (Exception $ex) {
+            throw new Exception("Unable to update user password", 0, NULL);
+        }
+    }
+
+    /**
+     * Function to get the API token for the gateway
+     * @throws Exception
+     */
+    private function getAPIToken(){
+        $userapi_token_db = simplexml_load_file(self::USERAPI_TOKEN_DB_PATH);
+        $userapi_config = parse_ini_file(self::USER_API_CONFIG_PATH);
+        $token = $userapi_token_db->userapi_token[0]->token_string;
+        $issue_time = $userapi_token_db->userapi_token[0]->issue_time;
+        $life_time = $userapi_token_db->userapi_token[0]->life_time;
+        if (file_exists(self::USER_API_CONFIG_PATH)) {
+            if(empty($token) || (time()-$issue_time )>($life_time-5000)){
+                $authenticationResponse  = $this->userapi_client->authenticateGateway($userapi_config['admin-username'],
+                    $userapi_config['admin-password']);
+                $userapi_token_db->userapi_token[0]->token_string = $authenticationResponse->accessToken;
+                $token = $authenticationResponse->accessToken;
+                $userapi_token_db->userapi_token[0]->issue_time = time();
+                $userapi_token_db->userapi_token[0]->life_time = $authenticationResponse->expiresIn;
+
+                //Format XML to save indented tree rather than one line
+                $dom = new DOMDocument('1.0');
+                $dom->preserveWhiteSpace = false;
+                $dom->formatOutput = true;
+                $dom->loadXML($userapi_token_db->asXML());
+                $dom->save(self::USERAPI_TOKEN_DB_PATH);
+            }
+        } else {
+            throw new Exception("Error: Cannot open userapi_config.xml file!");
+        }
+        return $token;
+    }
+
+    /**
+     * Function to remove an existing user
+     *
+     * @param $username
+     * @return void
+     */
+    public function remove_user($username)
+    {
+        try{
+            $this->userapi_client->removeUser($username, $this->getAPIToken());
+        } catch (Exception $ex) {
+            throw new Exception("Unable to remove user", 0, NULL);
+        }
+    }
+
+    /**
+     * Function to check whether a user has permission for a particular permission string(api method).
+     *
+     * @param $username
+     * @param $permission_string
+     * @return bool
+     */
+    public function checkPermissionForUser($username, $permission_string)
+    {
+        try{
+            return $this->userapi_client->checkPermission($username,$permission_string, $this->getAPIToken());
+        } catch (Exception $ex) {
+            throw new Exception("Unable to check permission for user", 0, NULL);
+        }
+    }
+
+    /**
+     * Function to get all the permissions that a particular user has.
+     *
+     * @param $username
+     * @return mixed
+     */
+    public function getUserPermissions($username)
+    {
+        try{
+            $apiPermissions = $this->userapi_client->getUserPermissions($username, $this->getAPIToken());
+            $result['airavata-api'] = $apiPermissions->airavataAPIPermissions;
+            $result['app-catalog'] = $apiPermissions->airavataAppCatalogPermissions;
+            return $result;
+        } catch (Exception $ex) {
+            throw new Exception("Unable add user to role", 0, NULL);
+        }
+    }
+
+    /**
+     * Function to get the entire list of roles in the application
+     *
+     * @return mixed
+     */
+    public function getRoleList()
+    {
+        try{
+            return $this->userapi_client->getAllRoleNames($this->getAPIToken());
+        } catch (Exception $ex) {
+            throw new Exception("Unable to get roles list", 0, NULL);
+        }
+    }
+
+    /**
+     * Function to get the role list of a user
+     *
+     * @param $username
+     * @return mixed
+     */
+    public function getRoleListOfUser($username)
+    {
+        try{
+            return $this->userapi_client->getRoleListOfUser($username, $this->getAPIToken());
+        } catch (Exception $ex) {
+            throw new Exception("Unable to get role list of user", 0, NULL);
+        }
+    }
+
+    /**
+     * Function to get the user list of a particular role
+     *
+     * @param $role
+     * @return mixed
+     */
+    public function getUserListOfRole($role)
+    {
+        try{
+            return $this->userapi_client->getUserListOfRole($role, $this->getAPIToken());
+        } catch (Exception $ex) {
+            throw new Exception("Unable to get user list of role", 0, NULL);
+        }
+    }
+
+    /**
+     * Function to add a role to a user
+     *
+     * @param $username
+     * @param $role
+     * @return mixed
+     */
+    public function addUserToRole($username, $role)
+    {
+        try{
+            return $this->userapi_client->addUserToRole($username,$role, $this->getAPIToken());
+        } catch (Exception $ex) {
+            throw new Exception("Unable to add user to role", 0, NULL);
+        }
+    }
+
+    /**
+     * Function to role from user
+     *
+     * @param $username
+     * @param $role
+     * @return mixed
+     */
+    public function removeUserFromRole($username, $role)
+    {
+        try{
+            return $this->userapi_client->removeUserFromRole($username,$role, $this->getAPIToken());
+        } catch (Exception $ex) {
+            throw new Exception("Unable to remove user from role", 0, NULL);
+        }
+    }
+}


[36/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/admin/manage-roles.blade.php
----------------------------------------------------------------------
diff --git a/app/views/admin/manage-roles.blade.php b/app/views/admin/manage-roles.blade.php
new file mode 100644
index 0000000..fa39a75
--- /dev/null
+++ b/app/views/admin/manage-roles.blade.php
@@ -0,0 +1,138 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+    {{ HTML::style('css/admin.css')}}
+@stop
+
+@section('content')
+
+    <div id="wrapper">
+            <!-- Sidebar Menu Items - These collapse to the responsive navigation menu on small screens -->
+            @include( 'partials/dashboard-block')
+        <div id="page-wrapper">
+
+            <div class="container-fluid">
+                <div class="col-md-12">
+                    @if( Session::has("message"))
+                        <div class="row">
+                            <div class="alert alert-success alert-dismissible" role="alert">
+                                <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+                                {{ Session::get("message") }}
+                            </div>
+                        </div>
+                        {{ Session::forget("message") }}
+                    @endif
+
+                    <h1 class="text-center">Roles</h1>
+
+                    <table class="table table-striped table-condensed">
+                        <tr>
+                            <th>
+                                Role</th>
+                            <th>Actions</th>
+                        </tr>
+                        @foreach( $roles as $role)
+                        <tr>
+                            <td class="role-name">{{ $role }}</td>
+                            <td>
+                                <span class="glyphicon glyphicon-pencil edit-role-name"></span>&nbsp;&nbsp;
+                                <a href="{{URL::to('/')}}/admin/dashboard/users?role={{$role}}">
+                                    <span class="glyphicon glyphicon-user role-users"></span>&nbsp;&nbsp;
+                                </a>
+                                <span class="glyphicon glyphicon-trash delete-role"></span>&nbsp;&nbsp;
+                            </td>
+                        </tr>
+                        @endforeach
+                    </table>
+                    <div class="col-md-12">
+                        <button type="button" class="btn btn-default toggle-add-role"><span class="glyphicon glyphicon-plus"></span>Add a new Role</button>
+                    </div>
+                    <div class="add-role col-md-6">
+                        <form role="form" action="{{URL::to('/')}}/admin/addrole" method="POST" class="add-role-form">
+                            <div class="form-group">
+                                <label>Enter Role Name</label>
+                                <input type="text" name="role" class="form-control"/>
+                            </div>
+                            <div class="form-group">
+                                <input type="submit" class="form-control btn btn-primary" value="Add" />
+                            </div>
+                        </form>
+                    </div>
+
+                    <div class="edit-role hide">
+                        <form class="edit-role-form">
+                            <div class="form-group col-md-4">
+                                <input type="text" name="new-role-name" class="new-role-name form-control"/>
+                                <input type="hidden" name="original-role-name" class="original-role-name" value=""/>
+                            </div>
+                            <div class="form-group col-md-4">
+                                <input type="submit" class="form-control btn btn-primary" value="Edit" />
+                            </div>
+                        </form>
+                    </div>
+
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="modal fade" id="delete-role-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+        <div class="modal-dialog">
+
+            <form action="{{URL::to('/')}}/admin/deleterole" method="POST">
+                <div class="modal-content">
+                    <div class="modal-header">
+                        <h3 class="text-center">Delete Role Confirmation</h3>
+                    </div>
+                    <div class="modal-body">
+                        <input type="hidden" class="form-control delete-roleName" name="role"/>
+                        Do you really want to delete the role - <span class="delete-role-name"></span>
+                    </div>
+                    <div class="modal-footer">
+                        <div class="form-group">
+                            <input type="submit" class="btn btn-danger" value="Delete"/>
+                            <input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+                        </div>
+                    </div>
+                </div>
+
+            </form>
+
+
+        </div>
+    </div>
+
+
+@stop
+
+@section('scripts')
+    @parent
+    <script>
+        $(".toggle-add-role").click( function(){
+            $(".add-role").slideDown();
+        });
+
+        $(".edit-role-name").click( function(){
+            var roleNameSpace = $(this).parent().parent().find(".role-name");
+            if( roleNameSpace.find(".edit-role-form").length )
+            {
+                roleNameSpace.html( roleNameSpace.find(".original-role-name").val() );
+            }
+            else
+            {
+                var role = roleNameSpace.html();
+                roleNameSpace.html( $(".edit-role").html() );
+                roleNameSpace.find(".original-role-name").val( role );
+                roleNameSpace.find(".new-role-name").val( role );
+            }
+        });
+
+        $(".delete-role").click( function(){
+            $("#delete-role-block").modal("show");
+            var roleName = $(this).parent().parent().find(".role-name").html();
+            $(".delete-role-name").html(roleName);
+            $(".delete-roleName").val(roleName);
+        });
+    </script>
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/admin/manage-users.blade.php
----------------------------------------------------------------------
diff --git a/app/views/admin/manage-users.blade.php b/app/views/admin/manage-users.blade.php
new file mode 100644
index 0000000..5cbdb7b
--- /dev/null
+++ b/app/views/admin/manage-users.blade.php
@@ -0,0 +1,144 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+    {{ HTML::style('css/admin.css')}}
+@stop
+
+@section('content')
+
+    <div id="wrapper">
+            <!-- Sidebar Menu Items - These collapse to the responsive navigation menu on small screens -->
+            @include( 'partials/dashboard-block')
+        <div id="page-wrapper">
+            <div class="col-md-12">
+            @if( Session::has("message"))
+                <div class="row">
+                    <div class="alert alert-success alert-dismissible" role="alert">
+                        <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+                        {{ Session::get("message") }}
+                    </div>
+                </div>
+                {{ Session::forget("message") }}
+            @endif
+            </div>
+            <div class="container-fluid">
+                <div class="col-md-12">
+                    @if( Session::has("message"))
+                        <div class="row">
+                            <div class="alert alert-success alert-dismissible" role="alert">
+                                <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+                                {{ Session::get("message") }}
+                            </div>
+                        </div>
+                        {{ Session::forget("message") }}
+                    @endif
+
+                    <h1 class="text-center">Users</h1>
+
+                    <table class="table table-striped table-condensed">
+                        <tr>
+                            <th>Username</th>
+                            <th>
+                                Role : 
+                                <select onchange="location = this.options[this.selectedIndex].value;">
+                                    <option>Select a role</option>
+                                    <option value="{{URL::to('/')}}/admin/dashboard/users">All</option>
+                                    @foreach( (array)$roles as $role)
+                                    <option value="{{URL::to('/')}}/admin/dashboard/users?role={{$role}}">{{$role}}</option>
+                                    @endforeach
+                                </select>
+                            </th>
+                        </tr>
+                        @foreach( (array)$users as $user)
+                        <tr class="user-row">
+                            <td>{{ $user }}</td>
+                            <td>
+                                <button class="button btn btn-default check-roles fade" type="button" data-username="{{$user}}">Check All Roles</button>
+                                <div class="user-roles"></div>
+                            </td>
+                        </tr>
+                        @endforeach
+                    </table>
+
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="modal fade" id="check-role-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+        <div class="modal-dialog">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <h3 class="text-center">User Roles</h3>
+                </div>
+                <div class="modal-body">
+                    <h4 class="roles-of-user"></h4>
+                    <div class="roles-load">
+                        Getting User Roles. Please Wait...  
+                    </div>
+                    <div class="roles-list">
+                    </div>  
+                </div>
+                <div class="modal-footer">
+                    <div class="form-group">
+                        <input type="submit" class="btn btn-primary" data-dismiss="modal"  value="Ok"/>
+                    </div>
+                </div>
+            </div>
+            <input type="hidden" class="base-url" value="{{URL::to('/')}}"/>
+        </div>
+    </div>
+
+    <div class="role-block">
+        <div class="btn-group" role="group">
+            <button type="button" class="btn btn-default role-name" disabled>Role</button>
+            <button type="button" class="btn btn-default"><span class="glyphicon glyphicon-remove"></span></button>
+        </div>
+    </div>
+@stop
+
+@section('scripts')
+    @parent
+    <script>
+
+    $(".user-row").hover( 
+        function(){
+            $(this).find(".check-roles").addClass("in");
+        },
+        function(){
+            $(this).find(".check-roles").removeClass("in");
+        }
+    );
+    $(".check-roles").click( function(){
+
+        var userName = $(this).data("username");
+        $("#check-role-block").modal("show");
+        $(".roles-of-user").html( "User : " + userName);
+        $(".roles-load").removeClass("hide");
+        $(".roles-list").addClass("hide");
+        $.ajax({
+            type: "POST",
+            url: $(".base-url").val() + "/admin/checkroles",
+            data: 
+            { 
+              username: userName
+            }
+        })
+        .complete(function( data ) {
+            roles = JSON.parse( data.responseText );
+            roleBlocks = "";
+            for( var i=0; i<roles.length; i++)
+            {
+                $(".role-block").find(".role-name").html( roles[i]);
+                var newRoleBlock = $(".role-block").html();
+                roleBlocks += newRoleBlock;
+                $(".roles-list").html( roleBlocks);
+            }
+            $(".roles-load").addClass("hide");
+            $(".roles-list").removeClass("hide");
+        });
+
+    });
+    </script>
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/application/deployment.blade.php
----------------------------------------------------------------------
diff --git a/app/views/application/deployment.blade.php b/app/views/application/deployment.blade.php
new file mode 100644
index 0000000..2cad93b
--- /dev/null
+++ b/app/views/application/deployment.blade.php
@@ -0,0 +1,180 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+    {{ HTML::style('css/style.css') }}
+@stop
+
+@section('content')
+
+<div class="container">
+	<div class="col-md-offset-2 col-md-8">
+		
+		<div class="row">
+			<button class="btn btn-default create-app-deployment">Create a new Application Deployment</button>
+		</div>
+		@if( count( $appDeployments) )
+			@if( Session::has("message"))
+				<div class="row">
+					<div class="alert alert-success alert-dismissible" role="alert">
+						<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+						{{ Session::get("message") }}
+					</div>
+				</div>
+				{{ Session::forget("message") }}
+			@endif
+
+			<div class="row">
+				<div class="col-md-6">
+					<h3>Existing Application Deployments :</h3>
+				</div>
+				<div class="col-md-6" style="margin-top:3.5%">
+					<input type="text" class="col-md-12 filterinput" placeholder="Search by Deployment Id Name" />
+				</div>
+			</div>
+			<div class="panel-group" id="accordion">
+			@foreach( $appDeployments as $index => $deployment )
+				<div class="panel panel-default">
+					<div class="panel-heading">
+						<h4 class="panel-title">
+							<a class="accordion-toggle collapsed deployment-id" data-toggle="collapse" data-parent="#accordion" href="#collapse-{{$index}}">
+							{{ $deployment->appDeploymentId }}
+							</a>
+							<div class="pull-right col-md-2 deployment-options fade">
+								<span class="glyphicon glyphicon-pencil edit-app-deployment" style="cursor:pointer;" data-toggle="modal" data-target="#edit-app-deployment-block" data-deployment-id="{{ $deployment->appDeploymentId }}"></span>
+								<span class="glyphicon glyphicon-trash delete-app-deployment" style="cursor:pointer;" data-toggle="modal" data-target="#delete-app-deployment-block" data-deployment-id="{{ $deployment->appDeploymentId }}"></span>
+							</div>
+						</h4>
+					</div>
+					<div id="collapse-{{$index}}" class="panel-collapse collapse">
+						<div class="panel-body">
+							<div class="app-deployment-block">
+								@include('partials/deployment-block', array( 'deploymentObject' => $deployment, 'computeResources' => $computeResources, 'modules' => $modules) )
+							</div>
+						</div>
+					</div>
+				</div>
+			@endforeach
+			</div>
+		@endif
+
+		<div class="load-cmd-ui hide">
+			<input name="moduleLoadCmds[]" type="text" class="form-control" placeholder="Module Load Command"/>
+		</div>
+
+		<div class="lib-prepend-path-ui hide">
+			<div class="col-md-12 well">
+				<input name="libraryPrependPathName[]" type="text" class="col-md-4" placeholder="Name"/>
+				<input name="libraryPrependPathValue[]" type="text" class="col-md-8" placeholder="Value"/>
+			</div>
+		</div>
+
+		<div class="lib-append-path-ui hide">
+			<div class="col-md-12 well">
+				<input name="libraryAppendPathName[]" type="text" class="col-md-4" placeholder="Name"/>
+				<input name="libraryAppendPathValue[]" type="text" class="col-md-8" placeholder="Value"/>
+			</div>
+		</div>
+
+		<div class="environment-ui hide">
+			<div class="col-md-12 well">
+				<input name="environmentName[]" type="text" class="col-md-4" placeholder="Name"/>
+				<input name="environmentValue[]" type="text" class="col-md-8" placeholder="Value"/>
+			</div>
+		</div>
+
+		<div class="pre-job-command-ui hide">
+			<div class="col-md-12 well">
+				<input name="preJobCommand[]" type="text" class="col-md-12" placeholder="Pre Job Command"/>
+			</div>
+		</div>
+
+		<div class="post-job-command-ui hide">
+			<div class="col-md-12 well">
+				<input name="postJobCommand[]" type="text" class="col-md-12" placeholder="Post Job Command"/>
+			</div>
+		</div>
+
+		<div class="modal fade" id="edit-app-deployment-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+		    <div class="modal-dialog">
+				<form action="{{URL::to('/')}}/app/deployment-edit" method="POST">	
+		        <div class="modal-content">
+			    	<div class="modal-header">
+			    		<h3 class="text-center">Edit Application Deployment</h3>
+			    	</div>
+			    	<div class="modal-body row">
+						<div class="app-deployment-form-content col-md-12">
+						</div>
+					</div>
+					<div class="modal-footer">
+			        	<div class="form-group">
+							<input type="submit" class="btn btn-primary" value="Update"/>
+							<input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+						</div>
+			        </div>	
+		        </div>
+		        </form>
+		    </div>
+		</div>
+
+		<div class="modal fade" id="create-app-deployment-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+		    <div class="modal-dialog">
+				<form action="{{URL::to('/')}}/app/deployment-create" method="POST">	
+		        <div class="modal-content">
+			    	<div class="modal-header">
+			    		<h3 class="text-center">Create Application Deployment</h3>
+			    	</div>
+			    	<div class="modal-body row">
+						<div class="col-md-12">
+							<div class="create-app-deployment-block">
+								@include('partials/deployment-block', array( 'computeResources' => $computeResources, 'modules' => $modules) )
+							</div>
+						</div>
+					</div>
+					<div class="modal-footer">
+			        	<div class="form-group">
+							<input type="submit" class="btn btn-primary" value="Create"/>
+							<input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+						</div>
+			        </div>	
+		        </div>
+		        </form>
+		    </div>
+		</div>
+
+		<div class="modal fade" id="delete-app-deployment-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+		    <div class="modal-dialog">
+
+				<form action="{{URL::to('/')}}/app/deployment-delete" method="POST">
+			        <div class="modal-content">
+			            <div class="modal-header">
+			              	<h3 class="text-center">Delete Confirmation Application Deployment</h3>
+			            </div>
+			            <div class="modal-body">
+							<input type="hidden" class="form-control delete-deploymentId" name="appDeploymentId"/>
+					 		Do you really want to delete the Application Deployment - <span class="delete-deployment-id"></span>
+						</div>
+						<div class="modal-footer">
+							<div class="form-group">
+								<input type="submit" class="btn btn-danger" value="Delete"/>
+								<input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+							</div>
+						</div>
+					</div>
+
+				</form>
+
+
+			</div>
+		</div>
+
+	</div>
+
+</div>
+
+@stop
+
+@section('scripts')
+	@parent
+    {{ HTML::script('js/deployment.js') }}
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/application/interface.blade.php
----------------------------------------------------------------------
diff --git a/app/views/application/interface.blade.php b/app/views/application/interface.blade.php
new file mode 100644
index 0000000..140a951
--- /dev/null
+++ b/app/views/application/interface.blade.php
@@ -0,0 +1,165 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+    {{ HTML::style('css/style.css') }}
+@stop
+
+@section('content')
+
+<div class="container">
+	<div class="col-md-offset-2 col-md-8">
+		
+		<div class="row">
+			<button class="btn btn-default create-app-interface">Create a new Application Interface</button>
+		</div>
+		@if( count( $appInterfaces) )
+			@if( Session::has("message"))
+				<div class="row">
+					<div class="alert alert-success alert-dismissible" role="alert">
+						<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+						{{ Session::get("message") }}
+					</div>
+				</div>
+				{{ Session::forget("message") }}
+			@endif
+			<div class="row">
+
+				<div class="col-md-6">
+					<h3>Existing Application Interfaces :</h3>
+				</div>
+				<div class="col-md-6" style="margin-top:3.5%">
+					<input type="text" class="col-md-12 filterinput" placeholder="Search by Interface Name" />
+				</div>
+			</div>
+			<div class="panel-group" id="accordion">
+			@foreach( $appInterfaces as $index => $interface )
+				<div class="panel panel-default">
+					<div class="panel-heading">
+						<h4 class="panel-title">
+							<a class="accordion-toggle collapsed interface-name" data-toggle="collapse" data-parent="#accordion" href="#collapse-{{$index}}">
+							{{ $interface->applicationName }}
+							</a>
+							<div class="pull-right col-md-2 interface-options fade">
+								<span class="glyphicon glyphicon-pencil edit-app-interface" style="cursor:pointer;" data-toggle="modal" data-target="#edit-app-interface-block" data-interface-id="{{ $interface->applicationInterfaceId }}"></span>
+								<span class="glyphicon glyphicon-trash delete-app-interface" style="cursor:pointer;" data-toggle="modal" data-target="#delete-app-interface-block" data-interface-id="{{ $interface->applicationInterfaceId }}"></span>
+							</div>
+						</h4>
+					</div>
+					<div id="collapse-{{$index}}" class="panel-collapse collapse">
+						<div class="panel-body">
+							<div class="app-interface-block">
+								@include('partials/interface-block', array( 'interfaceObject' => $interface, 'dataTypes' => $dataTypes, 'modules' => $modules) )
+							</div>
+						</div>
+					</div>
+				</div>
+			@endforeach
+			</div>
+		@endif
+
+	</div>
+
+	<div class="app-module-block hide">
+		<div class="input-group">
+			<select name="applicationModules[]" class="app-module-select form-control">
+				@foreach( $modules as $index=> $module)
+				<option value="{{ $module->appModuleId}}">{{ $module->appModuleName }}</option>
+				@endforeach
+			</select>
+			<span class="input-group-addon remove-app-module" style="cursor:pointer;">x</span>
+		</div>
+	</div>
+
+	<div class="app-input-block hide">
+		@include('partials/interface-input-block', array( 'dataTypes' => $dataTypes) )
+	</div>
+
+	<div class="app-output-block hide">
+		@include('partials/interface-output-block', array( 'dataTypes' => $dataTypes) )
+	</div>
+</div>
+
+<div class="modal fade" id="edit-app-interface-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true" data-backdrop="static">
+    <div class="modal-dialog">
+		<form action="{{URL::to('/')}}/app/interface-edit" method="POST" id="edit-app-interface-form">	
+        <div class="modal-content">
+	    	<div class="modal-header">
+	    		<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+	    		<h3 class="text-center">Edit Application Interface</h3>
+	    	</div>
+	    	<div class="modal-body row">
+				<div class="app-interface-form-content col-md-12">
+				</div>
+			</div>
+			<div class="modal-footer">
+	        	<div class="form-group">
+					<input type="button" class="submit-edit-app-interface-form btn btn-primary" value="Update"/>
+					<input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+					<input type="submit" class="btn btn-primary hide really-submit-edit-app-interface-form" value=""/>
+				</div>
+	        </div>	
+        </div>
+        </form>
+    </div>
+</div>
+
+<div class="modal fade" id="create-app-interface-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true" data-backdrop="static">
+    <div class="modal-dialog">
+		<form action="{{URL::to('/')}}/app/interface-create" method="POST" id="create-app-interface-form">	
+        <div class="modal-content">
+	    	<div class="modal-header">
+	    		<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+	    		<h3 class="text-center">Create Application Interface</h3>
+	    	</div>
+	    	<div class="modal-body row">
+				<div class="col-md-12">
+					<div class="create-app-interface-block">
+						@include('partials/interface-block', array( 'dataTypes' => $dataTypes, 'modules' => $modules) )
+					</div>
+				</div>
+			</div>
+			<div class="modal-footer">
+	        	<div class="form-group">
+					<input type="button" class="btn btn-primary submit-create-app-interface-form" value="Create"/>
+					<input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+					<input type="submit" class="btn btn-primary hide really-submit-create-app-interface-form" value=""/>
+				</div>
+	        </div>	
+        </div>
+        </form>
+    </div>
+</div>
+
+<div class="modal fade" id="delete-app-interface-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+    <div class="modal-dialog">
+
+		<form action="{{URL::to('/')}}/app/interface-delete" method="POST">
+	        <div class="modal-content">
+	            <div class="modal-header">
+	              	<h3 class="text-center">Delete Confirmation Application Interface</h3>
+	            </div>
+	            <div class="modal-body">
+					<input type="hidden" class="form-control delete-interfaceid" name="appInterfaceId"/>
+			 		Do you really want to delete the Application Interface - <span class="delete-interface-name"></span>
+				</div>
+				<div class="modal-footer">
+					<div class="form-group">
+						<input type="submit" class="btn btn-danger" value="Delete"/>
+						<input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+					</div>
+				</div>
+			</div>
+
+		</form>
+
+
+	</div>
+</div>
+
+@stop
+
+@section('scripts')
+	@parent
+    {{ HTML::script('js/interface.js') }}
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/application/module.blade.php
----------------------------------------------------------------------
diff --git a/app/views/application/module.blade.php b/app/views/application/module.blade.php
new file mode 100644
index 0000000..006f330
--- /dev/null
+++ b/app/views/application/module.blade.php
@@ -0,0 +1,189 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+    {{ HTML::style('css/style.css') }}
+@stop
+
+@section('content')
+
+<div class="container">
+	<div class="col-md-offset-2 col-md-8">
+
+		<button class="btn btn-default create-app-module" data-toggle="modal" data-target="#new-app-module-block">Create a new Application Module</button>
+
+	@if( count( $modules) )
+		@if( Session::has("message"))
+			<div class="row">
+				<div class="alert alert-success alert-dismissible" role="alert">
+					<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+					{{ Session::get("message") }}
+				</div>
+			</div>
+			{{ Session::forget("message") }}
+		@endif
+		<div class="row">
+			<div class="col-md-6">
+				<h3>Existing Modules :</h3>
+			</div>
+			<div class="col-md-6" style="margin-top:3.5%">
+				<input type="text" class="col-md-12 filterinput" placeholder="Search by Module Name" />
+			</div>
+		</div>
+		<div class="panel-group" id="accordion">
+		@foreach( $modules as $index => $module )
+			<div class="panel panel-default">
+				<div class="panel-heading">
+					<h4 class="panel-title">
+						<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordion" href="#collapse-{{$index}}">
+						{{ $module->appModuleName }}
+						</a>
+						<div class="pull-right col-md-2 module-options fade">
+							<span class="glyphicon glyphicon-pencil edit-app-module" style="cursor:pointer;" data-toggle="modal" data-target="#edit-app-module-block" data-module-data="{{ htmlentities(json_encode( $module) ) }}"></span>
+							<span class="glyphicon glyphicon-trash delete-app-module" style="cursor:pointer;" data-toggle="modal" data-target="#delete-app-module-block" data-module-data="{{ htmlentities(json_encode( $module) ) }}"></span>
+						</div>
+					</h4>
+				</div>
+				<div id="collapse-{{$index}}" class="panel-collapse collapse">
+					<div class="panel-body">
+						{{ $module->appModuleDescription }}
+					</div>
+				</div>
+			</div>
+		@endforeach
+		</div>
+	@endif
+
+
+ 	<div class="modal fade" id="new-app-module-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+	    <div class="modal-dialog">
+
+			<form action="{{URL::to('/')}}/app/module-create" method="POST">
+
+		        <div class="modal-content">
+		            <div class="modal-header">
+		              	<h3 class="text-center">Create a new Application Module</h3>
+		            </div>
+		            <div class="modal-body">
+				 		@include('partials/module-block')
+					</div>
+					<div class="modal-footer">
+						<div class="form-group">
+							<input type="submit" class="btn btn-primary" value="Save"/>
+							<input type="reset" class="reset-create-form btn btn-success" value ="Reset"/>
+						</div>
+					</div>
+				</div>
+
+			</form>
+
+
+		</div>
+	</div>
+
+	<div class="modal fade" id="edit-app-module-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+	    <div class="modal-dialog">
+
+			<form action="{{URL::to('/')}}/app/module-edit" method="POST">
+		        <div class="modal-content">
+		            <div class="modal-header">
+		              	<h3 class="text-center">Edit Application Module</h3>
+		            </div>
+		            <div class="modal-body">
+						<input type="hidden" class="form-control edit-moduleid" name="appModuleId"/>
+				 		@include('partials/module-block')
+					</div>
+					<div class="modal-footer">
+						<div class="form-group">
+							<input type="submit" class="btn btn-primary" value="Update"/>
+							<input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+						</div>
+					</div>
+				</div>
+
+			</form>
+
+
+		</div>
+	</div>
+
+	<div class="modal fade" id="delete-app-module-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+	    <div class="modal-dialog">
+
+			<form action="{{URL::to('/')}}/app/module-delete" method="POST">
+		        <div class="modal-content">
+		            <div class="modal-header">
+		              	<h3 class="text-center">Delete Confirmation Application Module</h3>
+		            </div>
+		            <div class="modal-body">
+						<input type="hidden" class="form-control delete-moduleid" name="appModuleId"/>
+
+				 		Do you really want to delete the Application Module - <span class="delete-module-name"></span>
+					</div>
+					<div class="modal-footer">
+						<div class="form-group">
+							<input type="submit" class="btn btn-danger" value="Delete"/>
+							<input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+						</div>
+					</div>
+				</div>
+
+			</form>
+
+
+		</div>
+	</div>
+
+@stop
+
+@section('scripts')
+	@parent
+	<script type="text/javascript">
+
+		$(".panel-title").hover( 
+			function(){
+				$(this).find(".module-options").addClass("in");
+			},
+			function(){
+				$(this).find(".module-options").removeClass("in");
+			}
+		);
+
+    	$('.filterinput').keyup(function() {
+            var a = $(this).val();
+            if (a.length > 0) {
+                children = ($("#accordion").children());
+
+                var containing = children.filter(function () {
+                    var regex = new RegExp('\\b' + a, 'i');
+                    return regex.test($('a', this).text());
+                }).slideDown();
+                children.not(containing).slideUp();
+            } else {
+                children.slideDown();
+            }
+            return false;
+        });
+
+        $(".create-app-module").click( function(){
+        	//reset form to clear it out if it got filled by edit modules
+        	$(".reset-create-form").click();
+        })
+
+        $(".edit-app-module").click( function(){
+        	var moduleData = $(this).data("module-data");
+        	console.log( moduleData);
+        	$(".edit-name").val( moduleData.appModuleName);
+        	$(".edit-desc").val( moduleData.appModuleDescription);
+        	$(".edit-version").val( moduleData.appModuleVersion);
+        	$(".edit-moduleid").val( moduleData.appModuleId)
+        });
+
+        $(".delete-app-module").click( function(){
+        	var moduleData = $(this).data("module-data");
+        	$(".delete-module-name").html( moduleData.appModuleName);
+        	$(".delete-moduleid").val( moduleData.appModuleId)
+        });
+    </script>
+
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/emails/auth/reminder.blade.php
----------------------------------------------------------------------
diff --git a/app/views/emails/auth/reminder.blade.php b/app/views/emails/auth/reminder.blade.php
new file mode 100755
index 0000000..aebea9e
--- /dev/null
+++ b/app/views/emails/auth/reminder.blade.php
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html lang="en-US">
+	<head>
+		<meta charset="utf-8">
+	</head>
+	<body>
+		<h2>Password Reset</h2>
+
+		<div>
+			To reset your password, complete this form: {{ URL::to('password/reset', array($token)) }}.<br/>
+			This link will expire in {{ Config::get('auth.reminder.expire', 60) }} minutes.
+		</div>
+	</body>
+</html>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/experiment/create-complete.blade.php
----------------------------------------------------------------------
diff --git a/app/views/experiment/create-complete.blade.php b/app/views/experiment/create-complete.blade.php
new file mode 100644
index 0000000..a3ee8be
--- /dev/null
+++ b/app/views/experiment/create-complete.blade.php
@@ -0,0 +1,70 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+<div class="col-md-offset-3 col-md-6">
+    
+    <h1>Create a new experiment</h1>
+    <form action="{{URL::to('/')}}/experiment/create" method="POST" role="form" enctype="multipart/form-data">
+
+        <input type="hidden" name="experiment-name" value="{{$expInputs['experimentName']}}">
+        <input type="hidden" name="experiment-description" value="{{$expInputs['experimentDescription']}}">
+        <input type="hidden" name="project" value="{{$expInputs['project']}}">
+        <input type="hidden" name="application" value="{{$expInputs['application']}}">
+        
+        @include('partials/experiment-inputs', array("expInputs" => $expInputs) )
+
+        <div class="form-group btn-toolbar">
+            <div class="btn-group">
+                <button name="save" type="submit" class="btn btn-primary" value="Save">Save</button>
+                <button name="launch" type="submit" class="btn btn-success" id="expLaunch" value="Save and launch">Save and launch</button>
+            </div>
+            
+            <a href="{{URL::to('/')}}/experiment/create" class="btn btn-default" role="button">Start over</a>
+        </div>
+        
+    </form>
+        
+
+</div>
+
+
+@stop
+
+@section('scripts')
+    @parent
+    <script>
+    $('.file-input').bind('change', function() {
+
+        var inputFileSize = Math.round( this.files[0].size/(1024*1024) );
+        if( inputFileSize > $("#allowedFileSize").val())
+        {
+            alert( "The input file size is greater than the allowed file size (" + $("#allowedFileSize").val() + " MB) in a form. Please upload another file.");
+            $(this).val("");
+        }
+
+    });
+
+    $("#enableEmail").change( function(){
+        if( this.checked)
+        {
+            $("#emailAddresses").attr("required", "required");
+            $(this).parent().children(".emailSection").removeClass("hide");
+        }
+        else
+        {
+            $(this).parent().children(".emailSection").addClass("hide");
+            $("#emailAddresses").removeAttr("required");
+        }
+
+    });
+
+    $(".addEmail").click( function(){
+        var emailInput = $(this).parent().find("#emailAddresses").clone();
+        emailInput.removeAttr("id").removeAttr("required").val("").appendTo(".emailAddresses");
+    });
+    </script>
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/experiment/create.blade.php
----------------------------------------------------------------------
diff --git a/app/views/experiment/create.blade.php b/app/views/experiment/create.blade.php
new file mode 100755
index 0000000..52873f1
--- /dev/null
+++ b/app/views/experiment/create.blade.php
@@ -0,0 +1,55 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+<div class="col-md-offset-3 col-md-6">
+    
+    <h1>Create a new experiment</h1>
+
+    <form action="{{URL::to('/')}}/experiment/create" method="POST" role="form" enctype="multipart/form-data">
+
+    <?php
+
+        $disabled = '';
+        $experimentName = '';
+        $experimentDescription = '';
+        $project = '';
+        $application = '';
+
+        $echo = '';
+        $wrf = '';
+    ?>
+
+        <div class="form-group required">
+            <label for="experiment-name" class="control-label">Experiment Name</label>
+            <input type="text" class="form-control" name="experiment-name" id="experiment-name" placeholder="Enter experiment name" autofocus required="required">
+        </div>
+        <div class="form-group">
+            <label for="experiment-description">Experiment Description</label>
+            <textarea class="form-control" name="experiment-description" id="experiment-description" placeholder="Optional: Enter a short description of the experiment"></textarea>
+        </div>
+        <div class="form-group required">
+            <label for="project" class="control-label">Project</label>
+
+
+        {{ Utilities::create_project_select($project, !$disabled) }}
+
+        </div>
+            <div class="form-group">
+            <label for="application">Application</label>
+
+            {{ Utilities::create_application_select($application, !$disabled) }}
+
+        </div>
+        <div class="btn-toolbar">
+            <input name="continue" type="submit" class="btn btn-primary" value="Continue">
+            <input name="clear" type="reset" class="btn btn-default" value="Reset values">
+        </div>   
+    </form>
+
+</div>
+
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/experiment/edit.blade.php
----------------------------------------------------------------------
diff --git a/app/views/experiment/edit.blade.php b/app/views/experiment/edit.blade.php
new file mode 100755
index 0000000..8eb759a
--- /dev/null
+++ b/app/views/experiment/edit.blade.php
@@ -0,0 +1,77 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+
+<?php
+//$echoResources = array('localhost', 'trestles.sdsc.edu', 'lonestar.tacc.utexas.edu');
+//$wrfResources = array('trestles.sdsc.edu');
+
+//$appResources = array('Echo' => $echoResources, 'WRF' => $wrfResources);
+?>
+
+
+<div class="container">
+
+  <div class="col-md-offset-3 col-md-6">
+    <h1>Edit Cloned Experiment</h1>
+
+    <form action="{{URL::to('/')}}/experiment/edit" method="POST" role="form" enctype="multipart/form-data">
+        <input type="hidden" name="expId" value="<?php echo Input::get('expId');?>"/>
+
+        @include('partials/experiment-inputs')
+
+
+        <div class="btn-toolbar">
+            <div class="btn-group">
+                <input name="save" type="submit" class="btn btn-primary" value="Save" <?php if(!$expInputs['expVal']['editable']) echo 'disabled'  ?>>
+                <input name="launch" type="submit" class="btn btn-success" value="Save and launch" <?php if(!$expInputs['expVal']['editable']) echo 'disabled'  ?>>
+            </div>
+        </div>
+
+
+    </form>
+  </div>
+
+</div>
+
+@stop
+
+
+@section('scripts')
+    @parent
+    <script>
+    $('.file-input').bind('change', function() {
+
+        var inputFileSize = Math.round( this.files[0].size/(1024*1024) );
+        if( inputFileSize > $("#allowedFileSize").val())
+        {
+            alert( "The input file size is greater than the allowed file size (" + $("#allowedFileSize").val() + " MB) in a form. Please upload another file.");
+            $(this).val("");
+        }
+
+    });
+
+    $("#enableEmail").change( function(){
+      if( this.checked)
+        {
+            $("#emailAddresses").attr("required", "required");
+        $(this).parent().children(".emailSection").removeClass("hide");
+        }
+      else
+        {
+        $(this).parent().children(".emailSection").addClass("hide");
+            $("#emailAddresses").removeAttr("required");
+        }
+
+    });
+
+    $(".addEmail").click( function(){
+      var emailInput = $(this).parent().find("#emailAddresses").clone();
+      emailInput.removeAttr("id").removeAttr("required").val("").appendTo(".emailAddresses");
+    });
+    </script>
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/experiment/search.blade.php
----------------------------------------------------------------------
diff --git a/app/views/experiment/search.blade.php b/app/views/experiment/search.blade.php
new file mode 100755
index 0000000..e33acd0
--- /dev/null
+++ b/app/views/experiment/search.blade.php
@@ -0,0 +1,265 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+    {{ HTML::style('css/datetimepicker.css')}}            
+
+@stop
+
+@section('content')
+
+<div class="container" style="max-width: 750px;">
+<h1>Search for Experiments</h1>
+
+<form action="{{URL::to('/')}}/experiment/search" method="post" class="form-inline" role="form">
+    <div class="form-group">
+        <label for="search-key">Search by</label>
+        <select class="form-control" name="search-key" id="search-key">
+            <?php
+
+            // set up options for select input
+            $values = array('experiment-name', 'experiment-description', 'application', 'creation-time');
+            $labels = array('Experiment Name', 'Experiment Description', 'Application', 'Creation Time');
+            $disabled = array('', '', '', '');
+
+            Utilities::create_options($values, $labels, $disabled);
+
+            ?>
+        </select>
+    </div>
+
+    <div class="form-group search-text-block">
+        <label for="search-value">for</label>
+        <input type="search" class="form-control" name="search-value" id="search-value" placeholder="value" required
+               value="<?php if (isset($_POST['search-value'])) echo $_POST['search-value'] ?>">
+    </div>
+
+    <div class="container select-dates hide">
+        <div class="col-md-12">
+            Select dates between which you want to search for experiments.
+        </div>
+        <div class="col-sm-8" style="height:75px;">
+           <div class='col-md-6'>
+                <div class="form-group">
+                    <div class='input-group date' id='datetimepicker9'>
+                        <input type='text' class="form-control" placeholder="From Date" name="from-date" value="<?php if (isset($_POST['from-date'])) echo $_POST['from-date'] ?>"/>
+                        <span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span>
+                        </span>
+                    </div>
+                </div>
+            </div>
+            <div class='col-md-6'>
+                <div class="form-group">
+                    <div class='input-group date' id='datetimepicker10'>
+                        <input type='text' class="form-control"  placeholder="To Date" name="to-date" value="<?php if (isset($_POST['to-date'])) echo $_POST['to-date'] ?>"/>
+                        <span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span>
+                        </span>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <button name="search" type="submit" class="btn btn-primary" value="Search"><span class="glyphicon glyphicon-search"></span> Search</button>
+    <p class="help-block">You can use * as a wildcard character. Tip: search for * alone to retrieve all of your experiments.</p>
+</form>
+
+
+
+
+<?php
+
+if (isset( $expContainer))
+{
+    if (sizeof($expContainer) == 0)
+    {
+        Utilities::print_warning_message('No results found. Please try again.');
+    }
+    else
+    {
+
+?>
+
+    <div class="table-responsive">
+        <table class="table">
+            <tr>
+                <th>Name</th>
+                <th>Application</th>
+                <th>Description</th>
+                <!--<th>Resource</th>-->
+                <th>Creation Time</th>
+                <th>
+                    <select class="form-control select-status">
+                        <option value="ALL">Status</option>
+                    @foreach( $expStates as $index => $state)
+                        <option value="{{ $state }}">{{ $state }}</option>
+                    @endforeach
+                    </select>
+                </th>
+            </tr>
+    
+
+<?php
+        foreach ($expContainer as $experiment)
+        {
+            $description = $experiment['experiment']->description;
+            if (strlen($description) > 17) // 17 is arbitrary
+            {
+                $description = substr($experiment['experiment']->description, 0, 17) . '<span class="text-muted">...</span>';
+            }
+
+            echo '<tr>';
+            $addEditOption="";
+            if( $experiment['expValue']['editable'])
+                $addEditOption = '<a href="'. URL::to('/') . '/experiment/edit?expId=' . $experiment['experiment']->experimentID . '" title="Edit"><span class="glyphicon glyphicon-pencil"></span></a>';
+
+            echo '<td>' . $experiment['experiment']->name .  $addEditOption . '</td>';
+
+            echo '<td>' . $experiment['expValue']['applicationInterface']->applicationName . '</td>';
+
+            echo '<td>' . $description . '</td>';
+
+            //echo "<td>$computeResource->hostName</td>";
+            echo '<td>' . date('Y-m-d H:i:s', $experiment['experiment']->creationTime/1000) . '</td>';
+
+
+            switch ($experiment['expValue']['experimentStatusString'])
+            {
+                case 'CANCELING':
+                case 'CANCELED':
+                case 'UNKNOWN':
+                    $textClass = 'text-warning';
+                    break;
+                case 'FAILED':
+                    $textClass = 'text-danger';
+                    break;
+                case 'COMPLETED':
+                    $textClass = 'text-success';
+                    break;
+                default:
+                    $textClass = 'text-info';
+                    break;
+            }
+
+        ?>
+            <td>
+                <a class="<?php echo $textClass; ?>" href="{{ URL::to('/') }}/experiment/summary?expId=<?php echo $experiment['experiment']->experimentID; ?>">
+                    <?php echo $experiment['expValue']['experimentStatusString']; ?>
+                </a>
+            </td>
+
+            </tr>
+
+        <?php            
+        }
+
+        echo '
+            </table>
+            </div>
+            ';
+    }
+
+
+}
+?>
+
+
+</div>
+
+@stop
+
+@section('scripts')
+    @parent
+    {{ HTML::script('js/moment.js')}}            
+    {{ HTML::script('js/datetimepicker.js')}}            
+
+    <script type="text/javascript">
+
+        $(document).ready( function(){
+
+            /* script to make status select work on the UI side itself. */
+
+            $(".select-status").on("change", function(){
+                selectedStatus = this.value;
+
+                if( selectedStatus == "ALL")
+                {
+                    $("table tr").slideDown();
+                }
+                else
+                {
+                    $("table tr").each(function(index) {
+                        if (index != 0) {
+
+                            $row = $(this);
+
+                            var status = $.trim( $row.find("td:last").text() );
+                            if (status == selectedStatus )
+                            {
+                                $(this).slideDown();
+                            }
+                            else {
+                                $(this).slideUp();
+                            }
+                        }
+                    });
+                }
+            });
+
+            /* making datetimepicker work for exp search */
+
+            $('#datetimepicker9').datetimepicker({
+                pick12HourFormat: false
+            });
+            $('#datetimepicker10').datetimepicker({
+                pick12HourFormat: false
+            });
+            $("#datetimepicker9").on("dp.change",function (e) {
+               $('#datetimepicker10').data("DateTimePicker").setMinDate(e.date);
+            });
+            $("#datetimepicker10").on("dp.change",function (e) {
+               $('#datetimepicker9').data("DateTimePicker").setMaxDate(e.date);
+            });
+
+            /* selecting creation time */
+            $("#search-key").on("change", function(){
+                if( this.value == "creation-time")
+                {
+                    $(".search-text-block").addClass("hide");
+                    $(".select-dates").removeClass("hide");
+                    $("#search-value").removeAttr("required");
+
+                }
+                else
+                {
+                    $(".search-text-block").removeClass("hide");
+                    $(".select-dates").addClass("hide");
+                    $("#search-value").attr("required");
+                }
+            });
+
+            changeInputVisibility( $("#search-key").val() );
+
+        });
+
+    function changeInputVisibility( selectedStatus)
+    {
+        if( selectedStatus == "creation-time")
+        {
+            $(".search-text-block").addClass("hide");
+            $(".select-dates").removeClass("hide");
+            $("#search-value").removeAttr("required");
+
+        }
+        else
+        {
+            $(".search-text-block").removeClass("hide");
+            $(".select-dates").addClass("hide");
+            $("#search-value").attr("required");
+        }
+    }
+
+        
+
+    </script>
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/experiment/summary.blade.php
----------------------------------------------------------------------
diff --git a/app/views/experiment/summary.blade.php b/app/views/experiment/summary.blade.php
new file mode 100755
index 0000000..c3f3d4e
--- /dev/null
+++ b/app/views/experiment/summary.blade.php
@@ -0,0 +1,31 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+    @include('partials/experiment-info')
+@stop
+
+
+@section('scripts')
+    @parent
+    <script>
+    setInterval( function(){
+        if( $.trim( $(".exp-status").html() ) != "COMPLETED")
+        {
+            $.ajax({
+                type:"GET",
+                url: "{{URL::to('/') }}/experiment/summary",
+                data: {expId: "{{ Input::get('expId') }}" },
+                success: function( exp){
+                    if( $.trim( $("#expObj").val() ) != $.trim( exp) )
+                       $(".refresh-exp").click();
+
+                }
+            });
+        }
+    }, 3000);
+    </script>
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/gateway/browse.blade.php
----------------------------------------------------------------------
diff --git a/app/views/gateway/browse.blade.php b/app/views/gateway/browse.blade.php
new file mode 100644
index 0000000..6d26a06
--- /dev/null
+++ b/app/views/gateway/browse.blade.php
@@ -0,0 +1,218 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+
+<div class="container">
+	<div class="col-md-offset-2 col-md-8">
+		<div class="row">
+			<a href="{{URL::to('/')}}/gp/create">
+				<button class="btn btn-default create-gateway-profile">Create a new Gateway Resource Profile</button>
+			</a>
+		</div>
+		@if( count( $gatewayProfiles) )
+			@if( Session::has("message"))
+				<div class="row">
+					<div class="alert alert-success alert-dismissible" role="alert">
+						<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+						{{ Session::get("message") }}
+					</div>
+				</div>
+				{{ Session::forget("message") }}
+			@endif
+			<div class="row">
+
+				<div class="col-md-6">
+					<h3>Existing Gateway Resource Profiles :</h3>
+				</div>
+				<div class="col-md-6" style="margin-top:3.5%">
+					<input type="text" class="col-md-12 filterinput" placeholder="Search by Gateway Name" />
+				</div>
+			</div>
+			<div class="panel-group" id="accordion1">
+			@foreach( $gatewayProfiles as $indexGP => $gp )
+				<div class="panel panel-default">
+					<div class="panel-heading">
+						<h4 class="panel-title">
+							<a class="accordion-toggle collapsed gateway-name" data-toggle="collapse" data-parent="#accordion" href="#collapse-gateway-{{$indexGP}}">
+							{{ $gp->gatewayName }}
+							</a>
+							<div class="pull-right col-md-2 gateway-options fade">
+								<span class="glyphicon glyphicon-pencil edit-gateway" style="cursor:pointer;" data-toggle="modal" data-target="#edit-gateway-block" data-gp-id="{{ $gp->gatewayID }}" data-gp-name="{{ $gp->gatewayName }}" data-gp-desc="{{ $gp->gatewayDescription }}"></span>
+								<span class="glyphicon glyphicon-trash delete-gateway" style="cursor:pointer;" data-toggle="modal" data-target="#delete-gateway-block" data-gp-name="{{$gp->gatewayName}}" data-gp-id="{{ $gp->gatewayID }}"></span>
+							</div>
+						</h4>
+					</div>
+					<div id="collapse-gateway-{{$indexGP}}" class="panel-collapse collapse">
+						<div class="panel-body">
+							<div class="app-interface-block">
+								<h5>{{ $gp->gatewayDescription}}</h5>
+								<hr/>
+								<div class="row">
+									<div class="col-md-10">
+										<button class="btn btn-default add-cr" data-gpid="{{$gp->gatewayID}}"><span class="glyphicon glyphicon-plus"></span> Add a Compute Resource</button>
+									</div>
+								</div>
+								@if( count( $gp->computeResourcePreferences) )
+									<div class="col-md-12">
+										<h3>Existing Compute Resources :</h3>
+									</div>
+									<div class="accordion-inner">
+										<div class="panel-group" id="accordion-{{$indexGP}}">
+										@foreach( (array)$gp->computeResourcePreferences as $indexCRP => $crp )
+											<div class="panel panel-default">
+												<div class="panel-heading">
+													<h4 class="panel-title">
+														<a class="accordion-toggle collapsed gateway-name" data-toggle="collapse" data-parent="#accordion" href="#collapse-crp-{{$indexGP}}-{{$indexCRP}}">
+														{{ $crp->crDetails->hostName }}
+														</a>
+														<div class="pull-right col-md-2 gateway-options fade">
+															<span class="glyphicon glyphicon-remove remove-resource" style="cursor:pointer;" data-toggle="modal" data-target="#remove-resource-block" data-cr-name="{{$crp->crDetails->hostName}}" data-cr-id="{{$crp->computeResourceId}}" data-gp-id="{{ $gp->gatewayID }}"></span>
+														</div>
+													</h4>
+												</div>
+												<div id="collapse-crp-{{$indexGP}}-{{$indexCRP}}" class="panel-collapse collapse">
+													<div class="panel-body">
+														<div class="app-compute-resource-preferences-block">
+															<form action="{{URL::to('/')}}/gp/update-crp" method="POST">
+																<input type="hidden" name="gatewayId" id="gatewayId" value="{{$gp->gatewayID}}">
+																<input type="hidden" name="computeResourceId" id="gatewayId" value="{{$crp->computeResourceId}}">
+																<div class="form-horizontal">
+																	@include('partials/gateway-preferences', array('computeResource' => $crp->crDetails, 'crData' => $crData, 'preferences'=>$crp, 'show'=>true))
+																</div>
+															</form>
+														</div>
+													</div>
+												</div>
+											</div>
+										@endforeach
+										</div>
+									</div>
+								@endif
+							</div>
+						</div>
+					</div>
+				</div>
+			@endforeach
+			</div>
+		@endif
+	</div>
+</div>
+
+<div class="add-compute-resource-block hide">
+	<div class="well">
+		<form action="{{URL::to('/')}}/gp/add-crp" method="POST">
+			<input type="hidden" name="gatewayId" id="gatewayId" value="">
+			<div class="input-group">
+				<select name="computeResourceId" class="cr-select form-control">
+					<option value="">Select a compute Resource and set its preferences</option>
+					@foreach( (array)$computeResources as $index => $cr)
+					<option value="{{ $cr->computeResourceId}}">{{ $cr->hostName }}</option>
+					@endforeach
+				</select>
+				<span class="input-group-addon remove-cr" style="cursor:pointer;">x</span>
+			</div>
+			<div class="pref-space form-horizontal"></div>
+		</form> 
+	</div>
+</div>
+
+<!-- Edit a Gateway Modal -->
+<div class="modal fade" id="edit-gateway-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+    <div class="modal-dialog">
+
+		<form action="{{URL::to('/')}}/gp/edit" method="POST">
+	        <div class="modal-content">
+	            <div class="modal-header">
+	              	<h3 class="text-center">Edit Gateway</h3>
+	            </div>
+	            <div class="modal-body">
+					<input type="hidden" class="form-control edit-gpId" name="edit-gpId"/>
+					<div class="form-group required">
+						<label class="control-label">Gateway Name</label>
+						<input class="form-control edit-gp-name" maxlength="100" name="gatewayName" required="required" placeholder="Gateway Name"/>
+					</div>
+					<div class="form-group">
+						<label class="control-label">Gateway Description</label>
+						<textarea class="form-control edit-gp-desc" maxlength="255" name="gatewayDescription" placeholder="Gateway Description"></textarea>
+					</div>
+				</div>
+				<div class="modal-footer">
+					<div class="form-group">
+						<input type="submit" class="btn btn-primary" value="Update"/>
+						<input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+					</div>
+				</div>
+			</div>
+
+		</form>
+	</div>
+</div>
+
+<!-- delete a Gateway Modal -->
+<div class="modal fade" id="delete-gateway-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+    <div class="modal-dialog">
+
+		<form action="{{URL::to('/')}}/gp/delete-gp" method="POST">
+	        <div class="modal-content">
+	            <div class="modal-header">
+	              	<h3 class="text-center">Delete Gateway Profile Confirmation</h3>
+	            </div>
+	            <div class="modal-body">
+					<input type="hidden" class="form-control delete-gpId" name="del-gpId"/>
+					Do you really want to delete the Gateway Profile, <span class="delete-gp-name"></span> ?
+				</div>
+				<div class="modal-footer">
+					<div class="form-group">
+						<input type="submit" class="btn btn-danger" value="Delete"/>
+						<input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+					</div>
+				</div>
+			</div>
+
+		</form>
+	</div>
+</div>
+
+<!-- Remove a Compute Resource from a Gateway -->
+<div class="modal fade" id="remove-resource-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+    <div class="modal-dialog">
+
+		<form action="{{URL::to('/')}}/gp/remove-cr" method="POST">
+	        <div class="modal-content">
+	            <div class="modal-header">
+	              	<h3 class="text-center">Remove Compute Resource Confirmation</h3>
+	            </div>
+	            <div class="modal-body">
+					<input type="hidden" class="form-control remove-crId" name="rem-crId"/>
+					<input type="hidden" class="form-control cr-gpId" name="gpId"/>
+
+					Do you really want to remove the Compute Resource, <span class="remove-cr-name"> </span>from the selected Gateway?
+				</div>
+				<div class="modal-footer">
+					<div class="form-group">
+						<input type="submit" class="btn btn-danger" value="Remove"/>
+						<input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+					</div>
+				</div>
+			</div>
+
+		</form>
+	</div>
+</div>
+
+<!-- contains all compute resource choices that might get selected on adding a new one to a gateway -->
+@foreach( (array)$computeResources as $index => $cr)
+	@include('partials/gateway-preferences', array('computeResource' => $cr, 'crData' => $crData))
+@endforeach
+
+
+@stop
+
+@section('scripts')
+	@parent
+	{{ HTML::script('js/gateway.js') }}
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/gateway/create.blade.php
----------------------------------------------------------------------
diff --git a/app/views/gateway/create.blade.php b/app/views/gateway/create.blade.php
new file mode 100644
index 0000000..24cba9c
--- /dev/null
+++ b/app/views/gateway/create.blade.php
@@ -0,0 +1,34 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+
+<div class="container">
+	<div class="col-md-offset-2 col-md-8">
+		<h3>Create a Gateway</h3>
+		<form role="form" method="POST" action="{{ URL::to('/') }}/gp/create">
+			<div class="form-group required">
+				<label class="control-label">Enter Name</label>
+				<input class="form-control hostName" maxlength="100" name="gatewayName" required="required" placeholder="Gateway Name"/>
+			</div>
+			<div class="form-group">
+				<label class="control-label">Enter Description</label>
+				<textarea class="form-control" maxlength="255" name="gatewayDescription" placeholder="Gateway Description"></textarea>
+			</div>
+			<div class="form-group">
+				<input type="submit" class="btn btn-lg btn-primary" value="Create"/>
+				<input type="reset" class="btn btn-lg btn-success" value="Reset"/>
+			</div>
+		</form>
+	</div>
+</div>
+
+@stop
+
+@section('scripts')
+	@parent
+    {{ HTML::script('js/script.js') }}
+@stop
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/home.blade.php
----------------------------------------------------------------------
diff --git a/app/views/home.blade.php b/app/views/home.blade.php
new file mode 100755
index 0000000..a3deeeb
--- /dev/null
+++ b/app/views/home.blade.php
@@ -0,0 +1,180 @@
+@extends('layout.basic')
+
+@section('page-header')
+    @parent
+@stop
+
+@section('content')
+
+<div class="well">
+    <div class="container">
+
+        <?php
+
+        if (Utilities::id_in_session())
+        {
+            $columnClass = 'col-md-4';
+            if( Session::has("admin"))
+                $admin = " Admin";
+            else
+                $admin = "";
+
+            echo '<h4>Welcome'. $admin . ', '. Session::get("username") . '!</h4>';
+
+            if( Session::get("username") == 'admin1') // temporary hard-coded admin user. will replace with admin role in future
+            {
+                try
+                {
+                    Utilities::open_tokens_file($tokenFilePath);
+                }
+                catch (Exception $e)
+                {
+                    Utilities::print_error_message($e->getMessage());
+                }
+
+
+                if(isset($_GET['tokenId']))
+                {
+                    try
+                    {
+                        Utilities::write_new_token($_GET['tokenId']);
+
+                        Utilties::print_success_message('Received new XSEDE token ' . $tokenFile->tokenId .
+                            '! Click <a href="' . $req_url .
+                            '?gatewayName=' . $gatewayName .
+                            '&email=' . $email .
+                            '&portalUserName=' . $_SESSION['username'] .
+                            '">here</a> to fetch a new token.');
+                    }
+                    catch (Exception $e)
+                    {
+                        print_error_message($e->getMessage());
+                    }
+                }
+                else
+                {
+                    echo '<p><small>Community token currently set to ' . $tokenFile->tokenId .
+                        '. Click <a href="' . $req_url .
+                        '?gatewayName=' . $gatewayName .
+                        '&email=' . $email .
+                        '&portalUserName=' . $_SESSION['username'] .
+                        '">here</a> to fetch a new token.</small></p>';
+                }
+            }
+            else // standard user
+            {
+                /* temporarily remove to avoid confusion during XSEDE tutorial
+                if (isset($_SESSION['tokenId']))
+                {
+                    echo '<p><small>XSEDE token currently active.
+                    All experiments launched during this session will use your personal allocation.</small></p>';
+                }
+                elseif(!isset($_GET['tokenId']) && !isset($_SESSION['tokenId']))
+                {
+                    echo '<p><small>Currently using community allocation. Click <a href="' .
+                        $req_url .
+                        '?gatewayName=' . $gatewayName .
+                        '&email=' . $email .
+                        '&portalUserName=' . $_SESSION['username'] .
+                        '">here</a> to use your personal allocation for this session.</small></p>';
+                }
+                elseif(isset($_GET['tokenId']))
+                {
+                    $_SESSION['tokenId'] = $_GET['tokenId'];
+
+                    print_success_message('Received XSEDE token!' .
+                        '<br>All experiments launched during this session will use your personal allocation.');
+                }
+                */
+            }
+        }
+        else
+        {
+            $columnClass = 'col-md-6';
+
+            echo '
+                <h1>PHP Gateway with Airavata</h1>
+                <p>
+                    PGA is a science gateway built with the Airavata API. You can reference PGA as you integrate Airavata
+                    into your own gateway, or you can create your gateway on top of PGA by cloning it at the link below.
+                    PGA is known to work well in the Chrome, Firefox, and Internet Explorer browsers.
+                </p>
+                <p><a href="https://github.com/apache/airavata-php-gateway"
+                        target="_blank">See the code <span class="glyphicon glyphicon-new-window"></span></a></p>
+                <p><a href="https://cwiki.apache.org/confluence/display/AIRAVATA/XSEDE+2014+Tutorial"
+                    target="_blank">View the XSEDE 2014 tutorial documentation <span class="glyphicon glyphicon-new-window"></span></a></p>
+            ';
+        }
+
+        ?>
+
+
+    </div>
+</div>
+
+<div class="container">
+
+    <div class="row">
+        <?php
+
+        if (Utilities::id_in_session())
+        {
+            echo '
+                <div class="col-md-4">
+                    <h2>PHP Gateway with Airavata</h2>
+
+                    <p>
+                        PGA is a science gateway built with the Airavata API. You can reference PGA as you integrate
+                        Airavata into your own gateway, or you can create your gateway on top of PGA by cloning it at
+                        the link below. PGA is known to work well in the Chrome, Firefox, and Internet Explorer browsers.
+                    </p>
+                    <p><a href="https://github.com/apache/airavata-php-gateway/"
+                        target="_blank">See the code <span class="glyphicon glyphicon-new-window"></span></a></p>
+                    <p><a href="https://cwiki.apache.org/confluence/display/AIRAVATA/XSEDE+2014+Tutorial"
+                        target="_blank">View the XSEDE 2014 tutorial documentation <span class="glyphicon glyphicon-new-window"></span></a></p>
+                </div>
+            ';
+        }
+
+        ?>
+        <div class="<?php echo $columnClass; ?>">
+            <div class="thumbnail" style="border:none">
+                <img src="assets/scigap-header-logo.png" alt="SciGaP">
+                <div class="caption">
+                    <p>
+                        SciGaP is a hosted service with a public API that science gateways can use to manage
+                        applications and workflows running on remote supercomputers, as well as other services. Gateway
+                        developers can thus concentrate their efforts on building their scientific communities and not
+                        worry about operations.
+                    </p>
+                    <p>
+                        Science Gateway Platform as a Service (SciGaP) provides application programmer interfaces (APIs)
+                        to hosted generic infrastructure services that can be used by domain science communities to
+                        create Science Gateways.
+                    </p>
+                    <p><a href="http://scigap.org/"
+                          target="_blank">Learn more <span class="glyphicon glyphicon-new-window"></span></a></p>
+                </div>
+            </div>
+        </div>
+        <div class="<?php echo $columnClass; ?>">
+            <div class="thumbnail" style="border:none">
+                <img src="assets/PoweredbyAiravata_Small.png" alt="Apache Airavata">
+                <div class="caption">
+                    <p>
+                        Apache Airavata is a software framework which is dominantly used to build Web-based science
+                        gateways and assist to compose, manage, execute and monitor large scale applications and
+                        workflows on distributed computing resources such as local clusters, supercomputers, national
+                        grids, academic and commercial clouds. Airavata mainly supports long running applications and
+                        workflows on distributed computational resources.
+                    </p>
+                    <p><a href="http://airavata.apache.org/" target="_blank">Learn more <span class="glyphicon glyphicon-new-window"></span></a></p>
+                </div>
+            </div>
+        </div>
+    </div>
+
+</div>
+
+@stop
+

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/layout/basic.blade.php
----------------------------------------------------------------------
diff --git a/app/views/layout/basic.blade.php b/app/views/layout/basic.blade.php
new file mode 100755
index 0000000..7bebad9
--- /dev/null
+++ b/app/views/layout/basic.blade.php
@@ -0,0 +1,102 @@
+@section ('page-header')
+
+<!DOCTYPE html>
+        <html lang="en">
+        <head>
+            <title>PHP Reference Gateway</title>
+            <meta charset="utf-8">
+            <meta name="viewport" content="width=device-width, initial-scale=1">
+            <link rel="icon" href="resources/assets/favicon.ico" type="image/x-icon">
+            {{ HTML::style('css/bootstrap.min.css')}}            
+        </head>
+
+<?php
+
+//Is there a need to connect to id store at this point? Commented for now.
+//Utilities::connect_to_id_store();
+
+?>
+
+<body>
+
+<?php Utilities::create_nav_bar(); ?>
+
+<?php
+    // Alerts if guests users try to go to the link without signing in.
+    if( Session::has("login-alert"))
+    {
+        Utilities::print_error_message("You need to login to use this service.");
+        Session::forget("login-alert");
+    } 
+    // if signed in user is not an admin.           
+    if( Session::has("admin-alert"))
+    {
+        Utilities::print_error_message("You need to be an admin to use this service.");
+        Session::forget("admin-alert");
+    }
+    
+?>
+
+@show
+
+@yield('content')
+
+</body>
+@section('scripts')
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
+    <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
+
+    <!-- Jira Issue Collector - Report Issue -->
+    <script type="text/javascript"
+            src="https://gateways.atlassian.net/s/31280375aecc888d5140f63e1dc78a93-T/en_USmlc07/6328/46/1.4.13/_/download/batch/com.atlassian.jira.collector.plugin.jira-issue-collector-plugin:issuecollector/com.atlassian.jira.collector.plugin.jira-issue-collector-plugin:issuecollector.js?locale=en-US&collectorId=b1572922"></script>
+
+    <!-- Jira Issue Collector - Request Feature -->
+    <script type="text/javascript"
+        src="https://gateways.atlassian.net/s/31280375aecc888d5140f63e1dc78a93-T/en_USmlc07/6328/46/1.4.13/_/download/batch/com.atlassian.jira.collector.plugin.jira-issue-collector-plugin:issuecollector/com.atlassian.jira.collector.plugin.jira-issue-collector-plugin:issuecollector.js?locale=en-US&collectorId=674243b0"></script>
+
+
+    <script type="text/javascript">
+        window.ATL_JQ_PAGE_PROPS = $.extend(window.ATL_JQ_PAGE_PROPS, {
+            "b1572922":
+            {
+                "triggerFunction": function(showCollectorDialog) {
+                    //Requries that jQuery is available!
+                    jQuery("#report-issue").click(function(e) {
+                        e.preventDefault();
+                        showCollectorDialog();
+                    });
+                }
+            },
+            "674243b0":
+            {
+                "triggerFunction": function(showCollectorDialog) {
+                    //Requries that jQuery is available!
+                    jQuery("#request-feature").click(function(e) {
+                        e.preventDefault();
+                        showCollectorDialog();
+                    });
+                }
+            }
+        });
+
+        var highest = null;
+        $(".nav-tabs a").each(function(){  //find the height of your highest link
+            var h = $(this).height();
+            if(h > highest){
+                highest = $(this).height();  
+            }    
+        });
+
+        $(".nav-tabs a").height(highest);  //set all your links to that height.
+
+
+        // not letting users to add only spaces in text boxes.
+        $("body").on( "blur", ".form-control", function(){
+            $(this).val( $.trim( $(this).val() ) );
+        });
+
+    </script>
+
+@show
+
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/partials/dashboard-block.blade.php
----------------------------------------------------------------------
diff --git a/app/views/partials/dashboard-block.blade.php b/app/views/partials/dashboard-block.blade.php
new file mode 100644
index 0000000..b7991d5
--- /dev/null
+++ b/app/views/partials/dashboard-block.blade.php
@@ -0,0 +1,50 @@
+<div class="collapse navbar-collapse navbar-ex1-collapse">
+                <ul class="nav navbar-nav side-nav">
+                    <li @if( Session::has("manage"))  class="active" @endif>
+                        <a href="{{ URL::to('/')}}/admin/dashboard/gateway"><i class="fa fa-fw fa-dashboard"></i> Gateway @if( Session::has("scigap_admin"))s @endif</a>
+                    </li>
+                    <li>
+                        <a href="{{ URL::to('/')}}/admin/dashboard/users"><i class="fa fa-fw fa-bar-chart-o"></i> Users</a>
+                    </li>
+                    <li>
+                        <a href="{{ URL::to('/')}}/admin/dashboard/roles"><i class="fa fa-fw fa-table"></i>Roles</a>
+                    </li>
+                    <li>
+                        <a href="{{ URL::to('/')}}/admin/dashboard/credential-store"><i class="fa fa-fw fa-table"></i>Credential Store</a>
+                    </li>
+                    <li>
+                        <a href="tables.html"><i class="fa fa-fw fa-table"></i>Resources</a>
+                    </li>
+                    <li>
+                        <a href="{{ URL::to('/')}}/admin/dashboard/experiments"><i class="fa fa-fw fa-experiments"></i>Experiments</a>
+                    </li>
+                    <li>
+                        <a href="forms.html"><i class="fa fa-fw fa-edit"></i> Settings</a>
+                    </li>
+                    <!-- 
+                    <li>
+                        <a href="bootstrap-elements.html"><i class="fa fa-fw fa-desktop"></i> Bootstrap Elements</a>
+                    </li>
+                    <li>
+                        <a href="bootstrap-grid.html"><i class="fa fa-fw fa-wrench"></i> Bootstrap Grid</a>
+                    </li>
+                    <li>
+                        <a href="javascript:;" data-toggle="collapse" data-target="#demo"><i class="fa fa-fw fa-arrows-v"></i> Dropdown <i class="fa fa-fw fa-caret-down"></i></a>
+                        <ul id="demo" class="collapse">
+                            <li>
+                                <a href="#">Dropdown Item</a>
+                            </li>
+                            <li>
+                                <a href="#">Dropdown Item</a>
+                            </li>
+                        </ul>
+                    </li>
+                    <li>
+                        <a href="blank-page.html"><i class="fa fa-fw fa-file"></i> Blank Page</a>
+                    </li>
+                    <li>
+                        <a href="index-rtl.html"><i class="fa fa-fw fa-dashboard"></i> RTL Dashboard</a>
+                    </li>
+                    -->
+                </ul>
+            </div>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/app/views/partials/deployment-block.blade.php
----------------------------------------------------------------------
diff --git a/app/views/partials/deployment-block.blade.php b/app/views/partials/deployment-block.blade.php
new file mode 100644
index 0000000..b624c3a
--- /dev/null
+++ b/app/views/partials/deployment-block.blade.php
@@ -0,0 +1,125 @@
+<!-- Application Deployments do not have a name. :(
+<div class="form-group" required>
+	<label class="control-label">Application Deployment Name</label>
+	<input type="text" class="form-control" name="applicationName" value="Class not saving it anywhere." readonly/>
+</div>
+-->
+@if( isset( $deploymentObject) )
+	<input type="hidden" name="app-deployment-id" value="{{$deploymentObject->appDeploymentId}}"/>
+@endif
+<div class="form-group required">
+	<label class="control-label">Application Module</label>
+	<select name="appModuleId" class="form-control app-module-filter" required readonly>
+	@foreach( $modules as $index => $module)
+		<option value="{{ $module->appModuleId }}" @if( isset( $deploymentObject) ) @if( $module->appModuleId == $deploymentObject->appModuleId) selected @endif @endif>{{ $module->appModuleName }}</option>	
+	@endforeach
+	</select>
+</div>
+<div class="form-group required">
+	<label class="control-label">Application Compute Host</label>
+	<select name="computeHostId" class="form-control" required readonly>
+	@foreach( $computeResources as $id => $crName)
+		<option value="{{ $id }}" @if( isset( $deploymentObject) ) @if( $id == $deploymentObject->computeHostId) selected @endif @endif>{{ $crName }}</option>	
+	@endforeach
+	</select>
+</div>
+<div class="form-group required">
+	<label class="control-label">Application Executable Path</label>
+	<input type="text" class="form-control" name="executablePath" value="@if( isset( $deploymentObject)){{$deploymentObject->executablePath}}@endif" required readonly/>
+</div>
+<div class="form-group required">
+	<label class="control-label">Application Parallelism Type</label>
+	<select name="parallelism" class="form-control" readonly>
+	@foreach( $applicationParallelismTypes as $index=>$parallelismType)
+		<option value="{{$index}}" @if( isset( $deploymentObject) ) @if( $index == $deploymentObject->parallelism) selected @endif @endif>{{ $parallelismType }}</option>
+	@endforeach
+	</select>
+</div>
+<div class="form-group">
+	<label class="control-label">Application Deployment Description</label>
+	<textarea class="form-control" name="appDeploymentDescription" readonly>@if( isset( $deploymentObject)){{$deploymentObject->appDeploymentDescription}}@endif</textarea>
+</div>
+<hr/>
+<div class="form-group">
+	<div class="show-load-cmds">
+		@if( isset( $deploymentObject))
+			@foreach( (array)$deploymentObject->moduleLoadCmds as $index => $cmd)
+				<input name="moduleLoadCmds[]" type="text" class="form-control" placeholder="Module Load Command" value="{{$cmd}}" readonly />
+			@endforeach
+		@endif
+	</div>
+	<button type="button" class="btn btn-default control-label add-load-cmd hide">Add Module Load Commands</label>
+</div>
+<hr/>
+<div class="form-group">
+	<div class="show-lib-prepend-paths">
+		<h5>Library Prepend Paths</h5>
+		@if( isset( $deploymentObject))
+			@foreach( (array)$deploymentObject->libPrependPaths as $path)
+				<div class="col-md-12 well">
+					<input name="libraryPrependPathName[]" type="text" class="col-md-4" placeholder="Name" value="{{$path->name}}" readonly/>
+					<input name="libraryPrependPathValue[]" type="text" class="col-md-8" placeholder="Value" value="{{$path->value}}" readonly/>
+				</div>
+			@endforeach
+		@endif
+	</div>
+	<button type="button" class="btn btn-default control-label add-lib-prepend-path hide">Add a Library Prepend Path</label>
+</div>
+<hr/>
+<div class="form-group">
+	<div class="show-lib-append-paths">
+		<h5>Library Append Paths</h5>
+		@if( isset( $deploymentObject))
+			@foreach( (array)$deploymentObject->libAppendPaths as $path)
+				<div class="col-md-12 well">
+					<input name="libraryAppendPathName[]" type="text" class="col-md-4" placeholder="Name" value="{{$path->name}}" readonly/>
+					<input name="libraryAppendPathValue[]" type="text" class="col-md-8" placeholder="Value" value="{{$path->value}}" readonly/>
+				</div>
+			@endforeach
+		@endif
+	</div>
+	<button type="button" class="btn btn-default control-label add-lib-append-path hide">Add a Library Append Path</label>
+</div>
+<hr/>
+<div class="form-group">
+	<div class="show-environments">
+		<h5>Environments</h5>
+		@if( isset( $deploymentObject))
+			@foreach( (array)$deploymentObject->setEnvironment as $path)
+				<div class="col-md-12 well">
+					<input name="environmentName[]" type="text" class="col-md-4" placeholder="Name" value="{{$path->name}}" readonly/>
+					<input name="environmentValue[]" type="text" class="col-md-8" placeholder="Value" value="{{$path->value}}" readonly/>
+				</div>
+			@endforeach
+		@endif
+	</div>
+	<button type="button" class="btn btn-default control-label add-environment hide">Add Environment</label>
+</div>
+
+<div class="form-group">
+	<div class="show-preJobCommands">
+		<h5>Pre Job Commands</h5>
+		@if( isset( $deploymentObject))
+			@foreach( (array)$deploymentObject->preJobCommands as $preJobCommand)
+				<div class="col-md-12 well">
+					<input name="preJobCommand[]" type="text" class="col-md-12" placeholder="Pre Job Command" value="{{$preJobCommand}}" readonly/>
+				</div>
+			@endforeach
+		@endif
+	</div>
+	<button type="button" class="btn btn-default control-label add-preJobCommand hide">Add Pre Job Command</label>
+</div>
+
+<div class="form-group">
+	<div class="show-postJobCommands">
+		<h5>Post Job Commands</h5>
+		@if( isset( $deploymentObject))
+			@foreach( (array)$deploymentObject->postJobCommands as $postJobCommand)
+				<div class="col-md-12 well">
+					<input name="postJobCommand[]" type="text" class="col-md-12" placeholder="Post Job Command" value="{{$postJobCommand}}" readonly/>
+				</div>
+			@endforeach
+		@endif
+	</div>
+	<button type="button" class="btn btn-default control-label add-postJobCommand hide">Add Post Job Command</label>
+</div>
\ No newline at end of file


[14/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/SQLiteGrammar.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/SQLiteGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/SQLiteGrammar.php
new file mode 100755
index 0000000..dfda9af
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/SQLiteGrammar.php
@@ -0,0 +1,553 @@
+<?php namespace Illuminate\Database\Schema\Grammars;
+
+use Illuminate\Support\Fluent;
+use Illuminate\Database\Connection;
+use Illuminate\Database\Schema\Blueprint;
+
+class SQLiteGrammar extends Grammar {
+
+	/**
+	 * The possible column modifiers.
+	 *
+	 * @var array
+	 */
+	protected $modifiers = array('Nullable', 'Default', 'Increment');
+
+	/**
+	 * The columns available as serials.
+	 *
+	 * @var array
+	 */
+	protected $serials = array('bigInteger', 'integer');
+
+	/**
+	 * Compile the query to determine if a table exists.
+	 *
+	 * @return string
+	 */
+	public function compileTableExists()
+	{
+		return "select * from sqlite_master where type = 'table' and name = ?";
+	}
+
+	/**
+	 * Compile the query to determine the list of columns.
+	 *
+	 * @param  string  $table
+	 * @return string
+	 */
+	public function compileColumnExists($table)
+	{
+		return 'pragma table_info('.str_replace('.', '__', $table).')';
+	}
+
+	/**
+	 * Compile a create table command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileCreate(Blueprint $blueprint, Fluent $command)
+	{
+		$columns = implode(', ', $this->getColumns($blueprint));
+
+		$sql = 'create table '.$this->wrapTable($blueprint)." ($columns";
+
+		// SQLite forces primary keys to be added when the table is initially created
+		// so we will need to check for a primary key commands and add the columns
+		// to the table's declaration here so they can be created on the tables.
+		$sql .= (string) $this->addForeignKeys($blueprint);
+
+		$sql .= (string) $this->addPrimaryKeys($blueprint);
+
+		return $sql .= ')';
+	}
+
+	/**
+	 * Get the foreign key syntax for a table creation statement.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @return string|null
+	 */
+	protected function addForeignKeys(Blueprint $blueprint)
+	{
+		$sql = '';
+
+		$foreigns = $this->getCommandsByName($blueprint, 'foreign');
+
+		// Once we have all the foreign key commands for the table creation statement
+		// we'll loop through each of them and add them to the create table SQL we
+		// are building, since SQLite needs foreign keys on the tables creation.
+		foreach ($foreigns as $foreign)
+		{
+			$sql .= $this->getForeignKey($foreign);
+
+			if ( ! is_null($foreign->onDelete))
+			{
+				$sql .= " on delete {$foreign->onDelete}";
+			}
+
+			if ( ! is_null($foreign->onUpdate))
+			{
+				$sql .= " on update {$foreign->onUpdate}";
+			}
+		}
+
+		return $sql;
+	}
+
+	/**
+	 * Get the SQL for the foreign key.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $foreign
+	 * @return string
+	 */
+	protected function getForeignKey($foreign)
+	{
+		$on = $this->wrapTable($foreign->on);
+
+		// We need to columnize the columns that the foreign key is being defined for
+		// so that it is a properly formatted list. Once we have done this, we can
+		// return the foreign key SQL declaration to the calling method for use.
+		$columns = $this->columnize($foreign->columns);
+
+		$onColumns = $this->columnize((array) $foreign->references);
+
+		return ", foreign key($columns) references $on($onColumns)";
+	}
+
+	/**
+	 * Get the primary key syntax for a table creation statement.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @return string|null
+	 */
+	protected function addPrimaryKeys(Blueprint $blueprint)
+	{
+		$primary = $this->getCommandByName($blueprint, 'primary');
+
+		if ( ! is_null($primary))
+		{
+			$columns = $this->columnize($primary->columns);
+
+			return ", primary key ({$columns})";
+		}
+	}
+
+	/**
+	 * Compile alter table commands for adding columns
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return array
+	 */
+	public function compileAdd(Blueprint $blueprint, Fluent $command)
+	{
+		$table = $this->wrapTable($blueprint);
+
+		$columns = $this->prefixArray('add column', $this->getColumns($blueprint));
+
+		$statements = array();
+
+		foreach ($columns as $column)
+		{
+			$statements[] = 'alter table '.$table.' '.$column;
+		}
+
+		return $statements;
+	}
+
+	/**
+	 * Compile a unique key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileUnique(Blueprint $blueprint, Fluent $command)
+	{
+		$columns = $this->columnize($command->columns);
+
+		$table = $this->wrapTable($blueprint);
+
+		return "create unique index {$command->index} on {$table} ({$columns})";
+	}
+
+	/**
+	 * Compile a plain index key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileIndex(Blueprint $blueprint, Fluent $command)
+	{
+		$columns = $this->columnize($command->columns);
+
+		$table = $this->wrapTable($blueprint);
+
+		return "create index {$command->index} on {$table} ({$columns})";
+	}
+
+	/**
+	 * Compile a foreign key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileForeign(Blueprint $blueprint, Fluent $command)
+	{
+		// Handled on table creation...
+	}
+
+	/**
+	 * Compile a drop table command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDrop(Blueprint $blueprint, Fluent $command)
+	{
+		return 'drop table '.$this->wrapTable($blueprint);
+	}
+
+	/**
+	 * Compile a drop table (if exists) command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropIfExists(Blueprint $blueprint, Fluent $command)
+	{
+		return 'drop table if exists '.$this->wrapTable($blueprint);
+	}
+
+	/**
+	 * Compile a drop column command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @param  \Illuminate\Database\Connection  $connection
+	 * @return array
+	 */
+	public function compileDropColumn(Blueprint $blueprint, Fluent $command, Connection $connection)
+	{
+		$schema = $connection->getDoctrineSchemaManager();
+
+		$tableDiff = $this->getDoctrineTableDiff($blueprint, $schema);
+
+		foreach ($command->columns as $name)
+		{
+			$column = $connection->getDoctrineColumn($blueprint->getTable(), $name);
+
+			$tableDiff->removedColumns[$name] = $column;
+		}
+
+		return (array) $schema->getDatabasePlatform()->getAlterTableSQL($tableDiff);
+	}
+
+	/**
+	 * Compile a drop unique key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropUnique(Blueprint $blueprint, Fluent $command)
+	{
+		return "drop index {$command->index}";
+	}
+
+	/**
+	 * Compile a drop index command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropIndex(Blueprint $blueprint, Fluent $command)
+	{
+		return "drop index {$command->index}";
+	}
+
+	/**
+	 * Compile a rename table command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileRename(Blueprint $blueprint, Fluent $command)
+	{
+		$from = $this->wrapTable($blueprint);
+
+		return "alter table {$from} rename to ".$this->wrapTable($command->to);
+	}
+
+	/**
+	 * Create the column definition for a char type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeChar(Fluent $column)
+	{
+		return 'varchar';
+	}
+
+	/**
+	 * Create the column definition for a string type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeString(Fluent $column)
+	{
+		return 'varchar';
+	}
+
+	/**
+	 * Create the column definition for a text type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeText(Fluent $column)
+	{
+		return 'text';
+	}
+
+	/**
+	 * Create the column definition for a medium text type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeMediumText(Fluent $column)
+	{
+		return 'text';
+	}
+
+	/**
+	 * Create the column definition for a long text type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeLongText(Fluent $column)
+	{
+		return 'text';
+	}
+
+	/**
+	 * Create the column definition for a integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeInteger(Fluent $column)
+	{
+		return 'integer';
+	}
+
+	/**
+	 * Create the column definition for a big integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeBigInteger(Fluent $column)
+	{
+		return 'integer';
+	}
+
+	/**
+	 * Create the column definition for a medium integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeMediumInteger(Fluent $column)
+	{
+		return 'integer';
+	}
+
+	/**
+	 * Create the column definition for a tiny integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeTinyInteger(Fluent $column)
+	{
+		return 'integer';
+	}
+
+	/**
+	 * Create the column definition for a small integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeSmallInteger(Fluent $column)
+	{
+		return 'integer';
+	}
+
+	/**
+	 * Create the column definition for a float type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeFloat(Fluent $column)
+	{
+		return 'float';
+	}
+
+	/**
+	 * Create the column definition for a double type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeDouble(Fluent $column)
+	{
+		return 'float';
+	}
+
+	/**
+	 * Create the column definition for a decimal type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeDecimal(Fluent $column)
+	{
+		return 'float';
+	}
+
+	/**
+	 * Create the column definition for a boolean type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeBoolean(Fluent $column)
+	{
+		return 'tinyint';
+	}
+
+	/**
+	 * Create the column definition for an enum type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeEnum(Fluent $column)
+	{
+		return 'varchar';
+	}
+
+	/**
+	 * Create the column definition for a date type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeDate(Fluent $column)
+	{
+		return 'date';
+	}
+
+	/**
+	 * Create the column definition for a date-time type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeDateTime(Fluent $column)
+	{
+		return 'datetime';
+	}
+
+	/**
+	 * Create the column definition for a time type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeTime(Fluent $column)
+	{
+		return 'time';
+	}
+
+	/**
+	 * Create the column definition for a timestamp type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeTimestamp(Fluent $column)
+	{
+		return 'datetime';
+	}
+
+	/**
+	 * Create the column definition for a binary type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeBinary(Fluent $column)
+	{
+		return 'blob';
+	}
+
+	/**
+	 * Get the SQL for a nullable column modifier.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string|null
+	 */
+	protected function modifyNullable(Blueprint $blueprint, Fluent $column)
+	{
+		return $column->nullable ? ' null' : ' not null';
+	}
+
+	/**
+	 * Get the SQL for a default column modifier.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string|null
+	 */
+	protected function modifyDefault(Blueprint $blueprint, Fluent $column)
+	{
+		if ( ! is_null($column->default))
+		{
+			return " default ".$this->getDefaultValue($column->default);
+		}
+	}
+
+	/**
+	 * Get the SQL for an auto-increment column modifier.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string|null
+	 */
+	protected function modifyIncrement(Blueprint $blueprint, Fluent $column)
+	{
+		if (in_array($column->type, $this->serials) && $column->autoIncrement)
+		{
+			return ' primary key autoincrement';
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php
new file mode 100755
index 0000000..3e32903
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php
@@ -0,0 +1,483 @@
+<?php namespace Illuminate\Database\Schema\Grammars;
+
+use Illuminate\Support\Fluent;
+use Illuminate\Database\Schema\Blueprint;
+
+class SqlServerGrammar extends Grammar {
+
+	/**
+	 * The possible column modifiers.
+	 *
+	 * @var array
+	 */
+	protected $modifiers = array('Increment', 'Nullable', 'Default');
+
+	/**
+	 * The columns available as serials.
+	 *
+	 * @var array
+	 */
+	protected $serials = array('bigInteger', 'integer');
+
+	/**
+	 * Compile the query to determine if a table exists.
+	 *
+	 * @return string
+	 */
+	public function compileTableExists()
+	{
+		return "select * from sysobjects where type = 'U' and name = ?";
+	}
+
+	/**
+	 * Compile the query to determine the list of columns.
+	 *
+	 * @param  string  $table
+	 * @return string
+	 */
+	public function compileColumnExists($table)
+	{
+		return "select col.name from sys.columns as col
+                join sys.objects as obj on col.object_id = obj.object_id
+                where obj.type = 'U' and obj.name = '$table'";
+	}
+
+	/**
+	 * Compile a create table command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileCreate(Blueprint $blueprint, Fluent $command)
+	{
+		$columns = implode(', ', $this->getColumns($blueprint));
+
+		return 'create table '.$this->wrapTable($blueprint)." ($columns)";
+	}
+
+	/**
+	 * Compile a create table command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileAdd(Blueprint $blueprint, Fluent $command)
+	{
+		$table = $this->wrapTable($blueprint);
+
+		$columns = $this->getColumns($blueprint);
+
+		return 'alter table '.$table.' add '.implode(', ', $columns);
+	}
+
+	/**
+	 * Compile a primary key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compilePrimary(Blueprint $blueprint, Fluent $command)
+	{
+		$columns = $this->columnize($command->columns);
+
+		$table = $this->wrapTable($blueprint);
+
+		return "alter table {$table} add constraint {$command->index} primary key ({$columns})";
+	}
+
+	/**
+	 * Compile a unique key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileUnique(Blueprint $blueprint, Fluent $command)
+	{
+		$columns = $this->columnize($command->columns);
+
+		$table = $this->wrapTable($blueprint);
+
+		return "create unique index {$command->index} on {$table} ({$columns})";
+	}
+
+	/**
+	 * Compile a plain index key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileIndex(Blueprint $blueprint, Fluent $command)
+	{
+		$columns = $this->columnize($command->columns);
+
+		$table = $this->wrapTable($blueprint);
+
+		return "create index {$command->index} on {$table} ({$columns})";
+	}
+
+	/**
+	 * Compile a drop table command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDrop(Blueprint $blueprint, Fluent $command)
+	{
+		return 'drop table '.$this->wrapTable($blueprint);
+	}
+
+	/**
+	 * Compile a drop column command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropColumn(Blueprint $blueprint, Fluent $command)
+	{
+		$columns = $this->wrapArray($command->columns);
+
+		$table = $this->wrapTable($blueprint);
+
+		return 'alter table '.$table.' drop column '.implode(', ', $columns);
+	}
+
+	/**
+	 * Compile a drop primary key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropPrimary(Blueprint $blueprint, Fluent $command)
+	{
+		$table = $this->wrapTable($blueprint);
+
+		return "alter table {$table} drop constraint {$command->index}";
+	}
+
+	/**
+	 * Compile a drop unique key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropUnique(Blueprint $blueprint, Fluent $command)
+	{
+		$table = $this->wrapTable($blueprint);
+
+		return "drop index {$command->index} on {$table}";
+	}
+
+	/**
+	 * Compile a drop index command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropIndex(Blueprint $blueprint, Fluent $command)
+	{
+		$table = $this->wrapTable($blueprint);
+
+		return "drop index {$command->index} on {$table}";
+	}
+
+	/**
+	 * Compile a drop foreign key command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileDropForeign(Blueprint $blueprint, Fluent $command)
+	{
+		$table = $this->wrapTable($blueprint);
+
+		return "alter table {$table} drop constraint {$command->index}";
+	}
+
+	/**
+	 * Compile a rename table command.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $command
+	 * @return string
+	 */
+	public function compileRename(Blueprint $blueprint, Fluent $command)
+	{
+		$from = $this->wrapTable($blueprint);
+
+		return "sp_rename {$from}, ".$this->wrapTable($command->to);
+	}
+
+	/**
+	 * Create the column definition for a char type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeChar(Fluent $column)
+	{
+		return "nchar({$column->length})";
+	}
+
+	/**
+	 * Create the column definition for a string type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeString(Fluent $column)
+	{
+		return "nvarchar({$column->length})";
+	}
+
+	/**
+	 * Create the column definition for a text type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeText(Fluent $column)
+	{
+		return 'nvarchar(max)';
+	}
+
+	/**
+	 * Create the column definition for a medium text type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeMediumText(Fluent $column)
+	{
+		return 'nvarchar(max)';
+	}
+
+	/**
+	 * Create the column definition for a long text type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeLongText(Fluent $column)
+	{
+		return 'nvarchar(max)';
+	}
+
+	/**
+	 * Create the column definition for a integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeInteger(Fluent $column)
+	{
+		return 'int';
+	}
+
+	/**
+	 * Create the column definition for a big integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeBigInteger(Fluent $column)
+	{
+		return 'bigint';
+	}
+
+	/**
+	 * Create the column definition for a medium integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeMediumInteger(Fluent $column)
+	{
+		return 'int';
+	}
+
+	/**
+	 * Create the column definition for a tiny integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeTinyInteger(Fluent $column)
+	{
+		return 'tinyint';
+	}
+
+	/**
+	 * Create the column definition for a small integer type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeSmallInteger(Fluent $column)
+	{
+		return 'smallint';
+	}
+
+	/**
+	 * Create the column definition for a float type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeFloat(Fluent $column)
+	{
+		return 'float';
+	}
+
+	/**
+	 * Create the column definition for a double type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeDouble(Fluent $column)
+	{
+		return 'float';
+	}
+
+	/**
+	 * Create the column definition for a decimal type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeDecimal(Fluent $column)
+	{
+		return "decimal({$column->total}, {$column->places})";
+	}
+
+	/**
+	 * Create the column definition for a boolean type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeBoolean(Fluent $column)
+	{
+		return 'bit';
+	}
+
+	/**
+	 * Create the column definition for an enum type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeEnum(Fluent $column)
+	{
+		return 'nvarchar(255)';
+	}
+
+	/**
+	 * Create the column definition for a date type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeDate(Fluent $column)
+	{
+		return 'date';
+	}
+
+	/**
+	 * Create the column definition for a date-time type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeDateTime(Fluent $column)
+	{
+		return 'datetime';
+	}
+
+	/**
+	 * Create the column definition for a time type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeTime(Fluent $column)
+	{
+		return 'time';
+	}
+
+	/**
+	 * Create the column definition for a timestamp type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeTimestamp(Fluent $column)
+	{
+		return 'datetime';
+	}
+
+	/**
+	 * Create the column definition for a binary type.
+	 *
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string
+	 */
+	protected function typeBinary(Fluent $column)
+	{
+		return 'varbinary(max)';
+	}
+
+	/**
+	 * Get the SQL for a nullable column modifier.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string|null
+	 */
+	protected function modifyNullable(Blueprint $blueprint, Fluent $column)
+	{
+		return $column->nullable ? ' null' : ' not null';
+	}
+
+	/**
+	 * Get the SQL for a default column modifier.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string|null
+	 */
+	protected function modifyDefault(Blueprint $blueprint, Fluent $column)
+	{
+		if ( ! is_null($column->default))
+		{
+			return " default ".$this->getDefaultValue($column->default);
+		}
+	}
+
+	/**
+	 * Get the SQL for an auto-increment column modifier.
+	 *
+	 * @param  \Illuminate\Database\Schema\Blueprint  $blueprint
+	 * @param  \Illuminate\Support\Fluent  $column
+	 * @return string|null
+	 */
+	protected function modifyIncrement(Blueprint $blueprint, Fluent $column)
+	{
+		if (in_array($column->type, $this->serials) && $column->autoIncrement)
+		{
+			return ' identity primary key';
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Schema/MySqlBuilder.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/MySqlBuilder.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/MySqlBuilder.php
new file mode 100755
index 0000000..7472681
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/MySqlBuilder.php
@@ -0,0 +1,41 @@
+<?php namespace Illuminate\Database\Schema;
+
+class MySqlBuilder extends Builder {
+
+	/**
+	 * Determine if the given table exists.
+	 *
+	 * @param  string  $table
+	 * @return bool
+	 */
+	public function hasTable($table)
+	{
+		$sql = $this->grammar->compileTableExists();
+
+		$database = $this->connection->getDatabaseName();
+
+		$table = $this->connection->getTablePrefix().$table;
+
+		return count($this->connection->select($sql, array($database, $table))) > 0;
+	}
+
+	/**
+	 * Get the column listing for a given table.
+	 *
+	 * @param  string  $table
+	 * @return array
+	 */
+	public function getColumnListing($table)
+	{
+		$sql = $this->grammar->compileColumnExists();
+
+		$database = $this->connection->getDatabaseName();
+
+		$table = $this->connection->getTablePrefix().$table;
+
+		$results = $this->connection->select($sql, array($database, $table));
+
+		return $this->connection->getPostProcessor()->processColumnListing($results);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/SeedServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/SeedServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Database/SeedServiceProvider.php
new file mode 100755
index 0000000..7b5e6d4
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/SeedServiceProvider.php
@@ -0,0 +1,55 @@
+<?php namespace Illuminate\Database;
+
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Database\Console\SeedCommand;
+
+class SeedServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->registerSeedCommand();
+
+		$this->app->bindShared('seeder', function()
+		{
+			return new Seeder;
+		});
+
+		$this->commands('command.seed');
+	}
+
+	/**
+	 * Register the seed console command.
+	 *
+	 * @return void
+	 */
+	protected function registerSeedCommand()
+	{
+		$this->app->bindShared('command.seed', function($app)
+		{
+			return new SeedCommand($app['db']);
+		});
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('seeder', 'command.seed');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Seeder.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Seeder.php b/vendor/laravel/framework/src/Illuminate/Database/Seeder.php
new file mode 100755
index 0000000..9074dce
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Seeder.php
@@ -0,0 +1,98 @@
+<?php namespace Illuminate\Database;
+
+use Illuminate\Console\Command;
+use Illuminate\Container\Container;
+
+class Seeder {
+
+	/**
+	 * The container instance.
+	 *
+	 * @var \Illuminate\Container\Container
+	 */
+	protected $container;
+
+	/**
+	 * The console command instance.
+	 *
+	 * @var \Illuminate\Console\Command
+	 */
+	protected $command;
+
+	/**
+	 * Run the database seeds.
+	 *
+	 * @return void
+	 */
+	public function run() {}
+
+	/**
+	 * Seed the given connection from the given path.
+	 *
+	 * @param  string  $class
+	 * @return void
+	 */
+	public function call($class)
+	{
+		$this->resolve($class)->run();
+
+		if (isset($this->command))
+		{
+			$this->command->getOutput()->writeln("<info>Seeded:</info> $class");
+		}
+	}
+
+	/**
+	 * Resolve an instance of the given seeder class.
+	 *
+	 * @param  string  $class
+	 * @return \Illuminate\Database\Seeder
+	 */
+	protected function resolve($class)
+	{
+		if (isset($this->container))
+		{
+			$instance = $this->container->make($class);
+
+			$instance->setContainer($this->container);
+		}
+		else
+		{
+			$instance = new $class;
+		}
+
+		if (isset($this->command))
+		{
+			$instance->setCommand($this->command);
+		}
+
+		return $instance;
+	}
+
+	/**
+	 * Set the IoC container instance.
+	 *
+	 * @param  \Illuminate\Container\Container  $container
+	 * @return $this
+	 */
+	public function setContainer(Container $container)
+	{
+		$this->container = $container;
+
+		return $this;
+	}
+
+	/**
+	 * Set the console command instance.
+	 *
+	 * @param  \Illuminate\Console\Command  $command
+	 * @return $this
+	 */
+	public function setCommand(Command $command)
+	{
+		$this->command = $command;
+
+		return $this;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/SqlServerConnection.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/SqlServerConnection.php b/vendor/laravel/framework/src/Illuminate/Database/SqlServerConnection.php
new file mode 100755
index 0000000..77216c7
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/SqlServerConnection.php
@@ -0,0 +1,91 @@
+<?php namespace Illuminate\Database;
+
+use Closure;
+use Doctrine\DBAL\Driver\PDOSqlsrv\Driver as DoctrineDriver;
+use Illuminate\Database\Query\Processors\SqlServerProcessor;
+use Illuminate\Database\Query\Grammars\SqlServerGrammar as QueryGrammar;
+use Illuminate\Database\Schema\Grammars\SqlServerGrammar as SchemaGrammar;
+
+class SqlServerConnection extends Connection {
+
+	/**
+	 * Execute a Closure within a transaction.
+	 *
+	 * @param  \Closure  $callback
+	 * @return mixed
+	 *
+	 * @throws \Exception
+	 */
+	public function transaction(Closure $callback)
+	{
+		if ($this->getDriverName() == 'sqlsrv')
+		{
+			return parent::transaction($callback);
+		}
+
+		$this->pdo->exec('BEGIN TRAN');
+
+		// We'll simply execute the given callback within a try / catch block
+		// and if we catch any exception we can rollback the transaction
+		// so that none of the changes are persisted to the database.
+		try
+		{
+			$result = $callback($this);
+
+			$this->pdo->exec('COMMIT TRAN');
+		}
+
+		// If we catch an exception, we will roll back so nothing gets messed
+		// up in the database. Then we'll re-throw the exception so it can
+		// be handled how the developer sees fit for their applications.
+		catch (\Exception $e)
+		{
+			$this->pdo->exec('ROLLBACK TRAN');
+
+			throw $e;
+		}
+
+		return $result;
+	}
+
+	/**
+	 * Get the default query grammar instance.
+	 *
+	 * @return \Illuminate\Database\Query\Grammars\SqlServerGrammar
+	 */
+	protected function getDefaultQueryGrammar()
+	{
+		return $this->withTablePrefix(new QueryGrammar);
+	}
+
+	/**
+	 * Get the default schema grammar instance.
+	 *
+	 * @return \Illuminate\Database\Schema\Grammars\SqlServerGrammar
+	 */
+	protected function getDefaultSchemaGrammar()
+	{
+		return $this->withTablePrefix(new SchemaGrammar);
+	}
+
+	/**
+	 * Get the default post processor instance.
+	 *
+	 * @return \Illuminate\Database\Query\Processors\Processor
+	 */
+	protected function getDefaultPostProcessor()
+	{
+		return new SqlServerProcessor;
+	}
+
+	/**
+	 * Get the Doctrine DBAL Driver.
+	 *
+	 * @return \Doctrine\DBAL\Driver\PDOSqlsrv\Driver
+	 */
+	protected function getDoctrineDriver()
+	{
+		return new DoctrineDriver;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/composer.json b/vendor/laravel/framework/src/Illuminate/Database/composer.json
new file mode 100755
index 0000000..1c284c0
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/composer.json
@@ -0,0 +1,36 @@
+{
+    "name": "illuminate/database",
+    "license": "MIT",
+    "keywords": ["laravel", "database", "sql", "orm"],
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/container": "4.2.*",
+        "illuminate/events": "4.2.*",
+        "illuminate/support": "4.2.*",
+        "nesbot/carbon": "~1.0"
+    },
+    "require-dev": {
+        "illuminate/cache": "4.2.*",
+        "illuminate/console": "4.2.*",
+        "illuminate/filesystem": "4.2.*",
+        "illuminate/pagination": "4.2.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Database": ""
+        }
+    },
+    "target-dir": "Illuminate/Database",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Encryption/DecryptException.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Encryption/DecryptException.php b/vendor/laravel/framework/src/Illuminate/Encryption/DecryptException.php
new file mode 100644
index 0000000..b2e4302
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Encryption/DecryptException.php
@@ -0,0 +1,3 @@
+<?php namespace Illuminate\Encryption;
+
+class DecryptException extends \RuntimeException {}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php b/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php
new file mode 100755
index 0000000..1c663c4
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php
@@ -0,0 +1,308 @@
+<?php namespace Illuminate\Encryption;
+
+use Symfony\Component\Security\Core\Util\StringUtils;
+use Symfony\Component\Security\Core\Util\SecureRandom;
+
+class Encrypter {
+
+	/**
+	 * The encryption key.
+	 *
+	 * @var string
+	 */
+	protected $key;
+
+	/**
+	 * The algorithm used for encryption.
+	 *
+	 * @var string
+	 */
+	protected $cipher = MCRYPT_RIJNDAEL_128;
+
+	/**
+	 * The mode used for encryption.
+	 *
+	 * @var string
+	 */
+	protected $mode = MCRYPT_MODE_CBC;
+
+	/**
+	 * The block size of the cipher.
+	 *
+	 * @var int
+	 */
+	protected $block = 16;
+
+	/**
+	 * Create a new encrypter instance.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function __construct($key)
+	{
+		$this->key = (string) $key;
+	}
+
+	/**
+	 * Encrypt the given value.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	public function encrypt($value)
+	{
+		$iv = mcrypt_create_iv($this->getIvSize(), $this->getRandomizer());
+
+		$value = base64_encode($this->padAndMcrypt($value, $iv));
+
+		// Once we have the encrypted value we will go ahead base64_encode the input
+		// vector and create the MAC for the encrypted value so we can verify its
+		// authenticity. Then, we'll JSON encode the data in a "payload" array.
+		$mac = $this->hash($iv = base64_encode($iv), $value);
+
+		return base64_encode(json_encode(compact('iv', 'value', 'mac')));
+	}
+
+	/**
+	 * Pad and use mcrypt on the given value and input vector.
+	 *
+	 * @param  string  $value
+	 * @param  string  $iv
+	 * @return string
+	 */
+	protected function padAndMcrypt($value, $iv)
+	{
+		$value = $this->addPadding(serialize($value));
+
+		return mcrypt_encrypt($this->cipher, $this->key, $value, $this->mode, $iv);
+	}
+
+	/**
+	 * Decrypt the given value.
+	 *
+	 * @param  string  $payload
+	 * @return string
+	 */
+	public function decrypt($payload)
+	{
+		$payload = $this->getJsonPayload($payload);
+
+		// We'll go ahead and remove the PKCS7 padding from the encrypted value before
+		// we decrypt it. Once we have the de-padded value, we will grab the vector
+		// and decrypt the data, passing back the unserialized from of the value.
+		$value = base64_decode($payload['value']);
+
+		$iv = base64_decode($payload['iv']);
+
+		return unserialize($this->stripPadding($this->mcryptDecrypt($value, $iv)));
+	}
+
+	/**
+	 * Run the mcrypt decryption routine for the value.
+	 *
+	 * @param  string  $value
+	 * @param  string  $iv
+	 * @return string
+	 *
+	 * @throws \Exception
+	 */
+	protected function mcryptDecrypt($value, $iv)
+	{
+		try
+		{
+			return mcrypt_decrypt($this->cipher, $this->key, $value, $this->mode, $iv);
+		}
+		catch (\Exception $e)
+		{
+			throw new DecryptException($e->getMessage());
+		}
+	}
+
+	/**
+	 * Get the JSON array from the given payload.
+	 *
+	 * @param  string  $payload
+	 * @return array
+	 *
+	 * @throws \Illuminate\Encryption\DecryptException
+	 */
+	protected function getJsonPayload($payload)
+	{
+		$payload = json_decode(base64_decode($payload), true);
+
+		// If the payload is not valid JSON or does not have the proper keys set we will
+		// assume it is invalid and bail out of the routine since we will not be able
+		// to decrypt the given value. We'll also check the MAC for this encryption.
+		if ( ! $payload || $this->invalidPayload($payload))
+		{
+			throw new DecryptException('Invalid data.');
+		}
+
+		if ( ! $this->validMac($payload))
+		{
+			throw new DecryptException('MAC is invalid.');
+		}
+
+		return $payload;
+	}
+
+	/**
+	 * Determine if the MAC for the given payload is valid.
+	 *
+	 * @param  array  $payload
+	 * @return bool
+	 *
+	 * @throws \RuntimeException
+	 */
+	protected function validMac(array $payload)
+	{
+		if ( ! function_exists('openssl_random_pseudo_bytes'))
+		{
+			throw new \RuntimeException('OpenSSL extension is required.');
+		}
+
+		$bytes = (new SecureRandom)->nextBytes(16);
+
+		$calcMac = hash_hmac('sha256', $this->hash($payload['iv'], $payload['value']), $bytes, true);
+
+		return StringUtils::equals(hash_hmac('sha256', $payload['mac'], $bytes, true), $calcMac);
+	}
+
+	/**
+	 * Create a MAC for the given value.
+	 *
+	 * @param  string  $iv
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected function hash($iv, $value)
+	{
+		return hash_hmac('sha256', $iv.$value, $this->key);
+	}
+
+	/**
+	 * Add PKCS7 padding to a given value.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected function addPadding($value)
+	{
+		$pad = $this->block - (strlen($value) % $this->block);
+
+		return $value.str_repeat(chr($pad), $pad);
+	}
+
+	/**
+	 * Remove the padding from the given value.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected function stripPadding($value)
+	{
+		$pad = ord($value[($len = strlen($value)) - 1]);
+
+		return $this->paddingIsValid($pad, $value) ? substr($value, 0, $len - $pad) : $value;
+	}
+
+	/**
+	 * Determine if the given padding for a value is valid.
+	 *
+	 * @param  string  $pad
+	 * @param  string  $value
+	 * @return bool
+	 */
+	protected function paddingIsValid($pad, $value)
+	{
+		$beforePad = strlen($value) - $pad;
+
+		return substr($value, $beforePad) == str_repeat(substr($value, -1), $pad);
+	}
+
+	/**
+	 * Verify that the encryption payload is valid.
+	 *
+	 * @param  array|mixed  $data
+	 * @return bool
+	 */
+	protected function invalidPayload($data)
+	{
+		return ! is_array($data) || ! isset($data['iv']) || ! isset($data['value']) || ! isset($data['mac']);
+	}
+
+	/**
+	 * Get the IV size for the cipher.
+	 *
+	 * @return int
+	 */
+	protected function getIvSize()
+	{
+		return mcrypt_get_iv_size($this->cipher, $this->mode);
+	}
+
+	/**
+	 * Get the random data source available for the OS.
+	 *
+	 * @return int
+	 */
+	protected function getRandomizer()
+	{
+		if (defined('MCRYPT_DEV_URANDOM')) return MCRYPT_DEV_URANDOM;
+
+		if (defined('MCRYPT_DEV_RANDOM')) return MCRYPT_DEV_RANDOM;
+
+		mt_srand();
+
+		return MCRYPT_RAND;
+	}
+
+	/**
+	 * Set the encryption key.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function setKey($key)
+	{
+		$this->key = (string) $key;
+	}
+
+	/**
+	 * Set the encryption cipher.
+	 *
+	 * @param  string  $cipher
+	 * @return void
+	 */
+	public function setCipher($cipher)
+	{
+		$this->cipher = $cipher;
+
+		$this->updateBlockSize();
+	}
+
+	/**
+	 * Set the encryption mode.
+	 *
+	 * @param  string  $mode
+	 * @return void
+	 */
+	public function setMode($mode)
+	{
+		$this->mode = $mode;
+
+		$this->updateBlockSize();
+	}
+
+	/**
+	 * Update the block size for the current cipher and mode.
+	 *
+	 * @return void
+	 */
+	protected function updateBlockSize()
+	{
+		$this->block = mcrypt_get_iv_size($this->cipher, $this->mode);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php
new file mode 100755
index 0000000..e7e9421
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php
@@ -0,0 +1,27 @@
+<?php namespace Illuminate\Encryption;
+
+use Illuminate\Support\ServiceProvider;
+
+class EncryptionServiceProvider extends ServiceProvider {
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('encrypter', function($app)
+		{
+			$encrypter =  new Encrypter($app['config']['app.key']);
+
+			if ($app['config']->has('app.cipher'))
+			{
+				$encrypter->setCipher($app['config']['app.cipher']);
+			}
+
+			return $encrypter;
+		});
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Encryption/InvalidKeyException.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Encryption/InvalidKeyException.php b/vendor/laravel/framework/src/Illuminate/Encryption/InvalidKeyException.php
new file mode 100644
index 0000000..2713218
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Encryption/InvalidKeyException.php
@@ -0,0 +1,3 @@
+<?php namespace Illuminate\Encryption;
+
+class InvalidKeyException extends \InvalidArgumentException {}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Encryption/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Encryption/composer.json b/vendor/laravel/framework/src/Illuminate/Encryption/composer.json
new file mode 100755
index 0000000..1a2d473
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Encryption/composer.json
@@ -0,0 +1,27 @@
+{
+    "name": "illuminate/encryption",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/support": "4.2.*",
+        "symfony/security-core": "2.5.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Encryption": ""
+        }
+    },
+    "target-dir": "Illuminate/Encryption",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php b/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php
new file mode 100755
index 0000000..15dc8ef
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php
@@ -0,0 +1,351 @@
+<?php namespace Illuminate\Events;
+
+use Illuminate\Container\Container;
+
+class Dispatcher {
+
+	/**
+	 * The IoC container instance.
+	 *
+	 * @var \Illuminate\Container\Container
+	 */
+	protected $container;
+
+	/**
+	 * The registered event listeners.
+	 *
+	 * @var array
+	 */
+	protected $listeners = array();
+
+	/**
+	 * The wildcard listeners.
+	 *
+	 * @var array
+	 */
+	protected $wildcards = array();
+
+	/**
+	 * The sorted event listeners.
+	 *
+	 * @var array
+	 */
+	protected $sorted = array();
+
+	/**
+	 * The event firing stack.
+	 *
+	 * @var array
+	 */
+	protected $firing = array();
+
+	/**
+	 * Create a new event dispatcher instance.
+	 *
+	 * @param  \Illuminate\Container\Container  $container
+	 * @return void
+	 */
+	public function __construct(Container $container = null)
+	{
+		$this->container = $container ?: new Container;
+	}
+
+	/**
+	 * Register an event listener with the dispatcher.
+	 *
+	 * @param  string|array  $events
+	 * @param  mixed   $listener
+	 * @param  int     $priority
+	 * @return void
+	 */
+	public function listen($events, $listener, $priority = 0)
+	{
+		foreach ((array) $events as $event)
+		{
+			if (str_contains($event, '*'))
+			{
+				$this->setupWildcardListen($event, $listener);
+			}
+			else
+			{
+				$this->listeners[$event][$priority][] = $this->makeListener($listener);
+
+				unset($this->sorted[$event]);
+			}
+		}
+	}
+
+	/**
+	 * Setup a wildcard listener callback.
+	 *
+	 * @param  string  $event
+	 * @param  mixed   $listener
+	 * @return void
+	 */
+	protected function setupWildcardListen($event, $listener)
+	{
+		$this->wildcards[$event][] = $this->makeListener($listener);
+	}
+
+	/**
+	 * Determine if a given event has listeners.
+	 *
+	 * @param  string  $eventName
+	 * @return bool
+	 */
+	public function hasListeners($eventName)
+	{
+		return isset($this->listeners[$eventName]);
+	}
+
+	/**
+	 * Register a queued event and payload.
+	 *
+	 * @param  string  $event
+	 * @param  array   $payload
+	 * @return void
+	 */
+	public function queue($event, $payload = array())
+	{
+		$this->listen($event.'_queue', function() use ($event, $payload)
+		{
+			$this->fire($event, $payload);
+		});
+	}
+
+	/**
+	 * Register an event subscriber with the dispatcher.
+	 *
+	 * @param  string  $subscriber
+	 * @return void
+	 */
+	public function subscribe($subscriber)
+	{
+		$subscriber = $this->resolveSubscriber($subscriber);
+
+		$subscriber->subscribe($this);
+	}
+
+	/**
+	 * Resolve the subscriber instance.
+	 *
+	 * @param  mixed  $subscriber
+	 * @return mixed
+	 */
+	protected function resolveSubscriber($subscriber)
+	{
+		if (is_string($subscriber))
+		{
+			return $this->container->make($subscriber);
+		}
+
+		return $subscriber;
+	}
+
+	/**
+	 * Fire an event until the first non-null response is returned.
+	 *
+	 * @param  string  $event
+	 * @param  array   $payload
+	 * @return mixed
+	 */
+	public function until($event, $payload = array())
+	{
+		return $this->fire($event, $payload, true);
+	}
+
+	/**
+	 * Flush a set of queued events.
+	 *
+	 * @param  string  $event
+	 * @return void
+	 */
+	public function flush($event)
+	{
+		$this->fire($event.'_queue');
+	}
+
+	/**
+	 * Get the event that is currently firing.
+	 *
+	 * @return string
+	 */
+	public function firing()
+	{
+		return last($this->firing);
+	}
+
+	/**
+	 * Fire an event and call the listeners.
+	 *
+	 * @param  string  $event
+	 * @param  mixed   $payload
+	 * @param  bool    $halt
+	 * @return array|null
+	 */
+	public function fire($event, $payload = array(), $halt = false)
+	{
+		$responses = array();
+
+		// If an array is not given to us as the payload, we will turn it into one so
+		// we can easily use call_user_func_array on the listeners, passing in the
+		// payload to each of them so that they receive each of these arguments.
+		if ( ! is_array($payload)) $payload = array($payload);
+
+		$this->firing[] = $event;
+
+		foreach ($this->getListeners($event) as $listener)
+		{
+			$response = call_user_func_array($listener, $payload);
+
+			// If a response is returned from the listener and event halting is enabled
+			// we will just return this response, and not call the rest of the event
+			// listeners. Otherwise we will add the response on the response list.
+			if ( ! is_null($response) && $halt)
+			{
+				array_pop($this->firing);
+
+				return $response;
+			}
+
+			// If a boolean false is returned from a listener, we will stop propagating
+			// the event to any further listeners down in the chain, else we keep on
+			// looping through the listeners and firing every one in our sequence.
+			if ($response === false) break;
+
+			$responses[] = $response;
+		}
+
+		array_pop($this->firing);
+
+		return $halt ? null : $responses;
+	}
+
+	/**
+	 * Get all of the listeners for a given event name.
+	 *
+	 * @param  string  $eventName
+	 * @return array
+	 */
+	public function getListeners($eventName)
+	{
+		$wildcards = $this->getWildcardListeners($eventName);
+
+		if ( ! isset($this->sorted[$eventName]))
+		{
+			$this->sortListeners($eventName);
+		}
+
+		return array_merge($this->sorted[$eventName], $wildcards);
+	}
+
+	/**
+	 * Get the wildcard listeners for the event.
+	 *
+	 * @param  string  $eventName
+	 * @return array
+	 */
+	protected function getWildcardListeners($eventName)
+	{
+		$wildcards = array();
+
+		foreach ($this->wildcards as $key => $listeners)
+		{
+			if (str_is($key, $eventName)) $wildcards = array_merge($wildcards, $listeners);
+		}
+
+		return $wildcards;
+	}
+
+	/**
+	 * Sort the listeners for a given event by priority.
+	 *
+	 * @param  string  $eventName
+	 * @return array
+	 */
+	protected function sortListeners($eventName)
+	{
+		$this->sorted[$eventName] = array();
+
+		// If listeners exist for the given event, we will sort them by the priority
+		// so that we can call them in the correct order. We will cache off these
+		// sorted event listeners so we do not have to re-sort on every events.
+		if (isset($this->listeners[$eventName]))
+		{
+			krsort($this->listeners[$eventName]);
+
+			$this->sorted[$eventName] = call_user_func_array('array_merge', $this->listeners[$eventName]);
+		}
+	}
+
+	/**
+	 * Register an event listener with the dispatcher.
+	 *
+	 * @param  mixed   $listener
+	 * @return mixed
+	 */
+	public function makeListener($listener)
+	{
+		if (is_string($listener))
+		{
+			$listener = $this->createClassListener($listener);
+		}
+
+		return $listener;
+	}
+
+	/**
+	 * Create a class based listener using the IoC container.
+	 *
+	 * @param  mixed    $listener
+	 * @return \Closure
+	 */
+	public function createClassListener($listener)
+	{
+		$container = $this->container;
+
+		return function() use ($listener, $container)
+		{
+			// If the listener has an @ sign, we will assume it is being used to delimit
+			// the class name from the handle method name. This allows for handlers
+			// to run multiple handler methods in a single class for convenience.
+			$segments = explode('@', $listener);
+
+			$method = count($segments) == 2 ? $segments[1] : 'handle';
+
+			$callable = array($container->make($segments[0]), $method);
+
+			// We will make a callable of the listener instance and a method that should
+			// be called on that instance, then we will pass in the arguments that we
+			// received in this method into this listener class instance's methods.
+			$data = func_get_args();
+
+			return call_user_func_array($callable, $data);
+		};
+	}
+
+	/**
+	 * Remove a set of listeners from the dispatcher.
+	 *
+	 * @param  string  $event
+	 * @return void
+	 */
+	public function forget($event)
+	{
+		unset($this->listeners[$event], $this->sorted[$event]);
+	}
+
+	/**
+	 * Forget all of the queued listeners.
+	 *
+	 * @return void
+	 */
+	public function forgetQueued()
+	{
+		foreach ($this->listeners as $key => $value)
+		{
+			if (ends_with($key, '_queue')) $this->forget($key);
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Events/EventServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Events/EventServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Events/EventServiceProvider.php
new file mode 100755
index 0000000..94b8e4b
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Events/EventServiceProvider.php
@@ -0,0 +1,20 @@
+<?php namespace Illuminate\Events;
+
+use Illuminate\Support\ServiceProvider;
+
+class EventServiceProvider extends ServiceProvider {
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app['events'] = $this->app->share(function($app)
+		{
+			return new Dispatcher($app);
+		});
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Events/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Events/composer.json b/vendor/laravel/framework/src/Illuminate/Events/composer.json
new file mode 100755
index 0000000..343a0b9
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Events/composer.json
@@ -0,0 +1,27 @@
+{
+    "name": "illuminate/events",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/container": "4.2.*",
+        "illuminate/support": "4.2.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Events": ""
+        }
+    },
+    "target-dir": "Illuminate/Events",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Exception/ExceptionDisplayerInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Exception/ExceptionDisplayerInterface.php b/vendor/laravel/framework/src/Illuminate/Exception/ExceptionDisplayerInterface.php
new file mode 100755
index 0000000..a976062
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Exception/ExceptionDisplayerInterface.php
@@ -0,0 +1,14 @@
+<?php namespace Illuminate\Exception;
+
+use Exception;
+
+interface ExceptionDisplayerInterface {
+
+	/**
+	 * Display the given exception to the user.
+	 *
+	 * @param  \Exception  $exception
+	 */
+	public function display(Exception $exception);
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Exception/ExceptionServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Exception/ExceptionServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Exception/ExceptionServiceProvider.php
new file mode 100755
index 0000000..c2fa6a6
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Exception/ExceptionServiceProvider.php
@@ -0,0 +1,162 @@
+<?php namespace Illuminate\Exception;
+
+use Whoops\Run;
+use Whoops\Handler\PrettyPageHandler;
+use Whoops\Handler\JsonResponseHandler;
+use Illuminate\Support\ServiceProvider;
+
+class ExceptionServiceProvider extends ServiceProvider {
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->registerDisplayers();
+
+		$this->registerHandler();
+	}
+
+	/**
+	 * Register the exception displayers.
+	 *
+	 * @return void
+	 */
+	protected function registerDisplayers()
+	{
+		$this->registerPlainDisplayer();
+
+		$this->registerDebugDisplayer();
+	}
+
+	/**
+	 * Register the exception handler instance.
+	 *
+	 * @return void
+	 */
+	protected function registerHandler()
+	{
+		$this->app['exception'] = $this->app->share(function($app)
+		{
+			return new Handler($app, $app['exception.plain'], $app['exception.debug']);
+		});
+	}
+
+	/**
+	 * Register the plain exception displayer.
+	 *
+	 * @return void
+	 */
+	protected function registerPlainDisplayer()
+	{
+		$this->app['exception.plain'] = $this->app->share(function($app)
+		{
+			// If the application is running in a console environment, we will just always
+			// use the debug handler as there is no point in the console ever returning
+			// out HTML. This debug handler always returns JSON from the console env.
+			if ($app->runningInConsole())
+			{
+				return $app['exception.debug'];
+			}
+			else
+			{
+				return new PlainDisplayer;
+			}
+		});
+	}
+
+	/**
+	 * Register the Whoops exception displayer.
+	 *
+	 * @return void
+	 */
+	protected function registerDebugDisplayer()
+	{
+		$this->registerWhoops();
+
+		$this->app['exception.debug'] = $this->app->share(function($app)
+		{
+			return new WhoopsDisplayer($app['whoops'], $app->runningInConsole());
+		});
+	}
+
+	/**
+	 * Register the Whoops error display service.
+	 *
+	 * @return void
+	 */
+	protected function registerWhoops()
+	{
+		$this->registerWhoopsHandler();
+
+		$this->app['whoops'] = $this->app->share(function($app)
+		{
+			// We will instruct Whoops to not exit after it displays the exception as it
+			// will otherwise run out before we can do anything else. We just want to
+			// let the framework go ahead and finish a request on this end instead.
+			with($whoops = new Run)->allowQuit(false);
+
+			$whoops->writeToOutput(false);
+
+			return $whoops->pushHandler($app['whoops.handler']);
+		});
+	}
+
+	/**
+	 * Register the Whoops handler for the request.
+	 *
+	 * @return void
+	 */
+	protected function registerWhoopsHandler()
+	{
+		if ($this->shouldReturnJson())
+		{
+			$this->app['whoops.handler'] = $this->app->share(function()
+			{
+				return new JsonResponseHandler;
+			});
+		}
+		else
+		{
+			$this->registerPrettyWhoopsHandler();
+		}
+	}
+
+	/**
+	 * Determine if the error provider should return JSON.
+	 *
+	 * @return bool
+	 */
+	protected function shouldReturnJson()
+	{
+		return $this->app->runningInConsole() || $this->requestWantsJson();
+	}
+
+	/**
+	 * Determine if the request warrants a JSON response.
+	 *
+	 * @return bool
+	 */
+	protected function requestWantsJson()
+	{
+		return $this->app['request']->ajax() || $this->app['request']->wantsJson();
+	}
+
+	/**
+	 * Register the "pretty" Whoops handler.
+	 *
+	 * @return void
+	 */
+	protected function registerPrettyWhoopsHandler()
+	{
+		$this->app['whoops.handler'] = $this->app->share(function()
+		{
+			with($handler = new PrettyPageHandler)->setEditor('sublime');
+
+			return $handler;
+		});
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Exception/Handler.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Exception/Handler.php b/vendor/laravel/framework/src/Illuminate/Exception/Handler.php
new file mode 100755
index 0000000..bac2dfd
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Exception/Handler.php
@@ -0,0 +1,385 @@
+<?php namespace Illuminate\Exception;
+
+use Closure;
+use ErrorException;
+use ReflectionFunction;
+use Illuminate\Support\Contracts\ResponsePreparerInterface;
+use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
+use Symfony\Component\Debug\Exception\FatalErrorException as FatalError;
+
+class Handler {
+
+	/**
+	 * The response preparer implementation.
+	 *
+	 * @var \Illuminate\Support\Contracts\ResponsePreparerInterface
+	 */
+	protected $responsePreparer;
+
+	/**
+	 * The plain exception displayer.
+	 *
+	 * @var \Illuminate\Exception\ExceptionDisplayerInterface
+	 */
+	protected $plainDisplayer;
+
+	/**
+	 * The debug exception displayer.
+	 *
+	 * @var \Illuminate\Exception\ExceptionDisplayerInterface
+	 */
+	protected $debugDisplayer;
+
+	/**
+	 * Indicates if the application is in debug mode.
+	 *
+	 * @var bool
+	 */
+	protected $debug;
+
+	/**
+	 * All of the register exception handlers.
+	 *
+	 * @var array
+	 */
+	protected $handlers = array();
+
+	/**
+	 * All of the handled error messages.
+	 *
+	 * @var array
+	 */
+	protected $handled = array();
+
+	/**
+	 * Create a new error handler instance.
+	 *
+	 * @param  \Illuminate\Support\Contracts\ResponsePreparerInterface  $responsePreparer
+	 * @param  \Illuminate\Exception\ExceptionDisplayerInterface  $plainDisplayer
+	 * @param  \Illuminate\Exception\ExceptionDisplayerInterface  $debugDisplayer
+	 * @param  bool  $debug
+	 * @return void
+	 */
+	public function __construct(ResponsePreparerInterface $responsePreparer,
+                                ExceptionDisplayerInterface $plainDisplayer,
+                                ExceptionDisplayerInterface $debugDisplayer,
+                                $debug = true)
+	{
+		$this->debug = $debug;
+		$this->plainDisplayer = $plainDisplayer;
+		$this->debugDisplayer = $debugDisplayer;
+		$this->responsePreparer = $responsePreparer;
+	}
+
+	/**
+	 * Register the exception / error handlers for the application.
+	 *
+	 * @param  string  $environment
+	 * @return void
+	 */
+	public function register($environment)
+	{
+		$this->registerErrorHandler();
+
+		$this->registerExceptionHandler();
+
+		if ($environment != 'testing') $this->registerShutdownHandler();
+	}
+
+	/**
+	 * Register the PHP error handler.
+	 *
+	 * @return void
+	 */
+	protected function registerErrorHandler()
+	{
+		set_error_handler(array($this, 'handleError'));
+	}
+
+	/**
+	 * Register the PHP exception handler.
+	 *
+	 * @return void
+	 */
+	protected function registerExceptionHandler()
+	{
+		set_exception_handler(array($this, 'handleUncaughtException'));
+	}
+
+	/**
+	 * Register the PHP shutdown handler.
+	 *
+	 * @return void
+	 */
+	protected function registerShutdownHandler()
+	{
+		register_shutdown_function(array($this, 'handleShutdown'));
+	}
+
+	/**
+	 * Handle a PHP error for the application.
+	 *
+	 * @param  int     $level
+	 * @param  string  $message
+	 * @param  string  $file
+	 * @param  int     $line
+	 * @param  array   $context
+	 *
+	 * @throws \ErrorException
+	 */
+	public function handleError($level, $message, $file = '', $line = 0, $context = array())
+	{
+		if (error_reporting() & $level)
+		{
+			throw new ErrorException($message, 0, $level, $file, $line);
+		}
+	}
+
+	/**
+	 * Handle an exception for the application.
+	 *
+	 * @param  \Exception  $exception
+	 * @return \Symfony\Component\HttpFoundation\Response
+	 */
+	public function handleException($exception)
+	{
+		$response = $this->callCustomHandlers($exception);
+
+		// If one of the custom error handlers returned a response, we will send that
+		// response back to the client after preparing it. This allows a specific
+		// type of exceptions to handled by a Closure giving great flexibility.
+		if ( ! is_null($response))
+		{
+			return $this->prepareResponse($response);
+		}
+
+		// If no response was sent by this custom exception handler, we will call the
+		// default exception displayer for the current application context and let
+		// it show the exception to the user / developer based on the situation.
+		return $this->displayException($exception);
+	}
+
+	/**
+	 * Handle an uncaught exception.
+	 *
+	 * @param  \Exception  $exception
+	 * @return void
+	 */
+	public function handleUncaughtException($exception)
+	{
+		$this->handleException($exception)->send();
+	}
+
+	/**
+	 * Handle the PHP shutdown event.
+	 *
+	 * @return void
+	 */
+	public function handleShutdown()
+	{
+		$error = error_get_last();
+
+		// If an error has occurred that has not been displayed, we will create a fatal
+		// error exception instance and pass it into the regular exception handling
+		// code so it can be displayed back out to the developer for information.
+		if ( ! is_null($error))
+		{
+			extract($error);
+
+			if ( ! $this->isFatal($type)) return;
+
+			$this->handleException(new FatalError($message, $type, 0, $file, $line))->send();
+		}
+	}
+
+	/**
+	 * Determine if the error type is fatal.
+	 *
+	 * @param  int   $type
+	 * @return bool
+	 */
+	protected function isFatal($type)
+	{
+		return in_array($type, array(E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE));
+	}
+
+	/**
+	 * Handle a console exception.
+	 *
+	 * @param  \Exception  $exception
+	 * @return void
+	 */
+	public function handleConsole($exception)
+	{
+		return $this->callCustomHandlers($exception, true);
+	}
+
+	/**
+	 * Handle the given exception.
+	 *
+	 * @param  \Exception  $exception
+	 * @param  bool  $fromConsole
+	 * @return void
+	 */
+	protected function callCustomHandlers($exception, $fromConsole = false)
+	{
+		foreach ($this->handlers as $handler)
+		{
+			// If this exception handler does not handle the given exception, we will just
+			// go the next one. A handler may type-hint an exception that it handles so
+			//  we can have more granularity on the error handling for the developer.
+			if ( ! $this->handlesException($handler, $exception))
+			{
+				continue;
+			}
+			elseif ($exception instanceof HttpExceptionInterface)
+			{
+				$code = $exception->getStatusCode();
+			}
+
+			// If the exception doesn't implement the HttpExceptionInterface, we will just
+			// use the generic 500 error code for a server side error. If it implements
+			// the HttpException interfaces we'll grab the error code from the class.
+			else
+			{
+				$code = 500;
+			}
+
+			// We will wrap this handler in a try / catch and avoid white screens of death
+			// if any exceptions are thrown from a handler itself. This way we will get
+			// at least some errors, and avoid errors with no data or not log writes.
+			try
+			{
+				$response = $handler($exception, $code, $fromConsole);
+			}
+			catch (\Exception $e)
+			{
+				$response = $this->formatException($e);
+			}
+
+			// If this handler returns a "non-null" response, we will return it so it will
+			// get sent back to the browsers. Once the handler returns a valid response
+			// we will cease iterating through them and calling these other handlers.
+			if (isset($response) && ! is_null($response))
+			{
+				return $response;
+			}
+		}
+	}
+
+	/**
+	 * Display the given exception to the user.
+	 *
+	 * @param  \Exception  $exception
+	 * @return void
+	 */
+	protected function displayException($exception)
+	{
+		$displayer = $this->debug ? $this->debugDisplayer : $this->plainDisplayer;
+
+		return $displayer->display($exception);
+	}
+
+	/**
+	 * Determine if the given handler handles this exception.
+	 *
+	 * @param  \Closure    $handler
+	 * @param  \Exception  $exception
+	 * @return bool
+	 */
+	protected function handlesException(Closure $handler, $exception)
+	{
+		$reflection = new ReflectionFunction($handler);
+
+		return $reflection->getNumberOfParameters() == 0 || $this->hints($reflection, $exception);
+	}
+
+	/**
+	 * Determine if the given handler type hints the exception.
+	 *
+	 * @param  \ReflectionFunction  $reflection
+	 * @param  \Exception  $exception
+	 * @return bool
+	 */
+	protected function hints(ReflectionFunction $reflection, $exception)
+	{
+		$parameters = $reflection->getParameters();
+
+		$expected = $parameters[0];
+
+		return ! $expected->getClass() || $expected->getClass()->isInstance($exception);
+	}
+
+	/**
+	 * Format an exception thrown by a handler.
+	 *
+	 * @param  \Exception  $e
+	 * @return string
+	 */
+	protected function formatException(\Exception $e)
+	{
+		if ($this->debug)
+		{
+			$location = $e->getMessage().' in '.$e->getFile().':'.$e->getLine();
+
+			return 'Error in exception handler: '.$location;
+		}
+
+		return 'Error in exception handler.';
+	}
+
+	/**
+	 * Register an application error handler.
+	 *
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function error(Closure $callback)
+	{
+		array_unshift($this->handlers, $callback);
+	}
+
+	/**
+	 * Register an application error handler at the bottom of the stack.
+	 *
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function pushError(Closure $callback)
+	{
+		$this->handlers[] = $callback;
+	}
+
+	/**
+	 * Prepare the given response.
+	 *
+	 * @param  mixed  $response
+	 * @return \Illuminate\Http\Response
+	 */
+	protected function prepareResponse($response)
+	{
+		return $this->responsePreparer->prepareResponse($response);
+	}
+
+	/**
+	 * Determine if we are running in the console.
+	 *
+	 * @return bool
+	 */
+	public function runningInConsole()
+	{
+		return php_sapi_name() == 'cli';
+	}
+
+	/**
+	 * Set the debug level for the handler.
+	 *
+	 * @param  bool  $debug
+	 * @return void
+	 */
+	public function setDebug($debug)
+	{
+		$this->debug = $debug;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Exception/PlainDisplayer.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Exception/PlainDisplayer.php b/vendor/laravel/framework/src/Illuminate/Exception/PlainDisplayer.php
new file mode 100755
index 0000000..7c53ad7
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Exception/PlainDisplayer.php
@@ -0,0 +1,24 @@
+<?php namespace Illuminate\Exception;
+
+use Exception;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
+
+class PlainDisplayer implements ExceptionDisplayerInterface {
+
+	/**
+	 * Display the given exception to the user.
+	 *
+	 * @param  \Exception  $exception
+	 * @return \Symfony\Component\HttpFoundation\Response
+	 */
+	public function display(Exception $exception)
+	{
+		$status = $exception instanceof HttpExceptionInterface ? $exception->getStatusCode() : 500;
+
+		$headers = $exception instanceof HttpExceptionInterface ? $exception->getHeaders() : array();
+
+		return new Response(file_get_contents(__DIR__.'/resources/plain.html'), $status, $headers);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Exception/SymfonyDisplayer.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Exception/SymfonyDisplayer.php b/vendor/laravel/framework/src/Illuminate/Exception/SymfonyDisplayer.php
new file mode 100755
index 0000000..6f358ea
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Exception/SymfonyDisplayer.php
@@ -0,0 +1,56 @@
+<?php namespace Illuminate\Exception;
+
+use Exception;
+use Symfony\Component\Debug\ExceptionHandler;
+use Symfony\Component\HttpFoundation\JsonResponse;
+
+class SymfonyDisplayer implements ExceptionDisplayerInterface {
+
+	/**
+	 * The Symfony exception handler.
+	 *
+	 * @var \Symfony\Component\Debug\ExceptionHandler
+	 */
+	protected $symfony;
+
+	/**
+	 * Indicates if JSON should be returned.
+	 *
+	 * @var bool
+	 */
+	protected $returnJson;
+
+	/**
+	 * Create a new Symfony exception displayer.
+	 *
+	 * @param  \Symfony\Component\Debug\ExceptionHandler  $symfony
+	 * @param  bool  $returnJson
+	 * @return void
+	 */
+	public function __construct(ExceptionHandler $symfony, $returnJson = false)
+	{
+		$this->symfony = $symfony;
+		$this->returnJson = $returnJson;
+	}
+
+	/**
+	 * Display the given exception to the user.
+	 *
+	 * @param  \Exception  $exception
+	 * @return \Symfony\Component\HttpFoundation\Response
+	 */
+	public function display(Exception $exception)
+	{
+		if ($this->returnJson)
+		{
+			return new JsonResponse(array(
+				'error' => $exception->getMessage(),
+				'file' => $exception->getFile(),
+				'line' => $exception->getLine(),
+			), 500);
+		}
+
+		return $this->symfony->createResponse($exception);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Exception/WhoopsDisplayer.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Exception/WhoopsDisplayer.php b/vendor/laravel/framework/src/Illuminate/Exception/WhoopsDisplayer.php
new file mode 100755
index 0000000..ec42912
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Exception/WhoopsDisplayer.php
@@ -0,0 +1,52 @@
+<?php namespace Illuminate\Exception;
+
+use Exception;
+use Whoops\Run;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
+
+class WhoopsDisplayer implements ExceptionDisplayerInterface {
+
+	/**
+	 * The Whoops run instance.
+	 *
+	 * @var \Whoops\Run
+	 */
+	protected $whoops;
+
+	/**
+	 * Indicates if the application is in a console environment.
+	 *
+	 * @var bool
+	 */
+	protected $runningInConsole;
+
+	/**
+	 * Create a new Whoops exception displayer.
+	 *
+	 * @param  \Whoops\Run  $whoops
+	 * @param  bool  $runningInConsole
+	 * @return void
+	 */
+	public function __construct(Run $whoops, $runningInConsole)
+	{
+		$this->whoops = $whoops;
+		$this->runningInConsole = $runningInConsole;
+	}
+
+	/**
+	 * Display the given exception to the user.
+	 *
+	 * @param  \Exception  $exception
+	 * @return \Symfony\Component\HttpFoundation\Response
+	 */
+	public function display(Exception $exception)
+	{
+		$status = $exception instanceof HttpExceptionInterface ? $exception->getStatusCode() : 500;
+
+		$headers = $exception instanceof HttpExceptionInterface ? $exception->getHeaders() : array();
+
+		return new Response($this->whoops->handleException($exception), $status, $headers);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Exception/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Exception/composer.json b/vendor/laravel/framework/src/Illuminate/Exception/composer.json
new file mode 100755
index 0000000..204fd26
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Exception/composer.json
@@ -0,0 +1,33 @@
+{
+    "name": "illuminate/exception",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "filp/whoops": "1.1.*",
+        "illuminate/support": "4.2.*",
+        "symfony/debug": "2.5.*",
+        "symfony/http-foundation": "2.5.*",
+        "symfony/http-kernel": "2.5.*"
+    },
+    "require-dev": {
+        "monolog/monolog": "~1.6"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Exception": ""
+        }
+    },
+    "target-dir": "Illuminate/Exception",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Exception/resources/plain.html
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Exception/resources/plain.html b/vendor/laravel/framework/src/Illuminate/Exception/resources/plain.html
new file mode 100755
index 0000000..683c5ec
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Exception/resources/plain.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+        <meta name="robots" content="noindex,nofollow" />
+        <style>
+            /* Copyright (c) 2010, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.com/yui/license.html */
+            html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}input,textarea,select{*font-size:100%;}legend{color:#000;}
+
+            html { background: #eee; padding: 10px }
+            img { border: 0; }
+            #sf-resetcontent { width:970px; margin:0 auto; }
+                        .sf-reset { font: 11px Verdana, Arial, sans-serif; color: #333 }
+            .sf-reset .clear { clear:both; height:0; font-size:0; line-height:0; }
+            .sf-reset .clear_fix:after { display:block; height:0; clear:both; visibility:hidden; }
+            .sf-reset .clear_fix { display:inline-block; }
+            .sf-reset * html .clear_fix { height:1%; }
+            .sf-reset .clear_fix { display:block; }
+            .sf-reset, .sf-reset .block { margin: auto }
+            .sf-reset abbr { border-bottom: 1px dotted #000; cursor: help; }
+            .sf-reset p { font-size:14px; line-height:20px; color:#868686; padding-bottom:20px }
+            .sf-reset strong { font-weight:bold; }
+            .sf-reset a { color:#6c6159; }
+            .sf-reset a img { border:none; }
+            .sf-reset a:hover { text-decoration:underline; }
+            .sf-reset em { font-style:italic; }
+            .sf-reset h1, .sf-reset h2 { font: 20px Georgia, "Times New Roman", Times, serif }
+            .sf-reset h2 span { background-color: #fff; color: #333; padding: 6px; float: left; margin-right: 10px; }
+            .sf-reset .traces li { font-size:12px; padding: 2px 4px; list-style-type:decimal; margin-left:20px; }
+            .sf-reset .block { background-color:#FFFFFF; padding:10px 28px; margin-bottom:20px;
+                -webkit-border-bottom-right-radius: 16px;
+                -webkit-border-bottom-left-radius: 16px;
+                -moz-border-radius-bottomright: 16px;
+                -moz-border-radius-bottomleft: 16px;
+                border-bottom-right-radius: 16px;
+                border-bottom-left-radius: 16px;
+                border-bottom:1px solid #ccc;
+                border-right:1px solid #ccc;
+                border-left:1px solid #ccc;
+            }
+            .sf-reset .block_exception { background-color:#ddd; color: #333; padding:20px;
+                -webkit-border-top-left-radius: 16px;
+                -webkit-border-top-right-radius: 16px;
+                -moz-border-radius-topleft: 16px;
+                -moz-border-radius-topright: 16px;
+                border-top-left-radius: 16px;
+                border-top-right-radius: 16px;
+                border-top:1px solid #ccc;
+                border-right:1px solid #ccc;
+                border-left:1px solid #ccc;
+                overflow: hidden;
+                word-wrap: break-word;
+            }
+            .sf-reset li a { background:none; color:#868686; text-decoration:none; }
+            .sf-reset li a:hover { background:none; color:#313131; text-decoration:underline; }
+            .sf-reset ol { padding: 10px 0; }
+            .sf-reset h1 { background-color:#FFFFFF; padding: 15px 28px; margin-bottom: 20px;
+                -webkit-border-radius: 10px;
+                -moz-border-radius: 10px;
+                border-radius: 10px;
+                border: 1px solid #ccc;
+            }
+        </style>
+    </head>
+    <body>
+                    <div id="sf-resetcontent" class="sf-reset">
+                <h1>Whoops, looks like something went wrong.</h1>
+
+            </div>
+    </body>
+</html>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Filesystem/FileNotFoundException.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Filesystem/FileNotFoundException.php b/vendor/laravel/framework/src/Illuminate/Filesystem/FileNotFoundException.php
new file mode 100644
index 0000000..f6ee5dc
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Filesystem/FileNotFoundException.php
@@ -0,0 +1,3 @@
+<?php namespace Illuminate\Filesystem;
+
+class FileNotFoundException extends \Exception {}


[10/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Http/Request.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Http/Request.php b/vendor/laravel/framework/src/Illuminate/Http/Request.php
new file mode 100755
index 0000000..580f119
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Http/Request.php
@@ -0,0 +1,608 @@
+<?php namespace Illuminate\Http;
+
+use SplFileInfo;
+use Symfony\Component\HttpFoundation\ParameterBag;
+use Symfony\Component\HttpFoundation\Request as SymfonyRequest;
+
+class Request extends SymfonyRequest {
+
+	/**
+	 * The decoded JSON content for the request.
+	 *
+	 * @var string
+	 */
+	protected $json;
+
+	/**
+	 * The Illuminate session store implementation.
+	 *
+	 * @var \Illuminate\Session\Store
+	 */
+	protected $sessionStore;
+
+	/**
+	 * Return the Request instance.
+	 *
+	 * @return $this
+	 */
+	public function instance()
+	{
+		return $this;
+	}
+
+	/**
+	 * Get the request method.
+	 *
+	 * @return string
+	 */
+	public function method()
+	{
+		return $this->getMethod();
+	}
+
+	/**
+	 * Get the root URL for the application.
+	 *
+	 * @return string
+	 */
+	public function root()
+	{
+		return rtrim($this->getSchemeAndHttpHost().$this->getBaseUrl(), '/');
+	}
+
+	/**
+	 * Get the URL (no query string) for the request.
+	 *
+	 * @return string
+	 */
+	public function url()
+	{
+		return rtrim(preg_replace('/\?.*/', '', $this->getUri()), '/');
+	}
+
+	/**
+	 * Get the full URL for the request.
+	 *
+	 * @return string
+	 */
+	public function fullUrl()
+	{
+		$query = $this->getQueryString();
+
+		return $query ? $this->url().'?'.$query : $this->url();
+	}
+
+	/**
+	 * Get the current path info for the request.
+	 *
+	 * @return string
+	 */
+	public function path()
+	{
+		$pattern = trim($this->getPathInfo(), '/');
+
+		return $pattern == '' ? '/' : $pattern;
+	}
+
+	/**
+	 * Get the current encoded path info for the request.
+	 *
+	 * @return string
+	 */
+	public function decodedPath()
+	{
+		return rawurldecode($this->path());
+	}
+
+	/**
+	 * Get a segment from the URI (1 based index).
+	 *
+	 * @param  string  $index
+	 * @param  mixed   $default
+	 * @return string
+	 */
+	public function segment($index, $default = null)
+	{
+		return array_get($this->segments(), $index - 1, $default);
+	}
+
+	/**
+	 * Get all of the segments for the request path.
+	 *
+	 * @return array
+	 */
+	public function segments()
+	{
+		$segments = explode('/', $this->path());
+
+		return array_values(array_filter($segments, function($v) { return $v != ''; }));
+	}
+
+	/**
+	 * Determine if the current request URI matches a pattern.
+	 *
+	 * @param  mixed  string
+	 * @return bool
+	 */
+	public function is()
+	{
+		foreach (func_get_args() as $pattern)
+		{
+			if (str_is($pattern, urldecode($this->path())))
+			{
+				return true;
+			}
+		}
+
+		return false;
+	}
+
+	/**
+	 * Determine if the request is the result of an AJAX call.
+	 *
+	 * @return bool
+	 */
+	public function ajax()
+	{
+		return $this->isXmlHttpRequest();
+	}
+
+	/**
+	 * Determine if the request is over HTTPS.
+	 *
+	 * @return bool
+	 */
+	public function secure()
+	{
+		return $this->isSecure();
+	}
+
+	/**
+	 * Returns the client IP address.
+	 *
+	 * @return string
+	 */
+	public function ip()
+	{
+		return $this->getClientIp();
+	}
+
+	/**
+	 * Returns the client IP addresses.
+	 *
+	 * @return array
+	 */
+	public function ips()
+	{
+		return $this->getClientIps();
+	}
+
+	/**
+	 * Determine if the request contains a given input item key.
+	 *
+	 * @param  string|array  $key
+	 * @return bool
+	 */
+	public function exists($key)
+	{
+		$keys = is_array($key) ? $key : func_get_args();
+
+		$input = $this->all();
+
+		foreach ($keys as $value)
+		{
+			if ( ! array_key_exists($value, $input)) return false;
+		}
+
+		return true;
+	}
+
+	/**
+	 * Determine if the request contains a non-empty value for an input item.
+	 *
+	 * @param  string|array  $key
+	 * @return bool
+	 */
+	public function has($key)
+	{
+		$keys = is_array($key) ? $key : func_get_args();
+
+		foreach ($keys as $value)
+		{
+			if ($this->isEmptyString($value)) return false;
+		}
+
+		return true;
+	}
+
+	/**
+	 * Determine if the given input key is an empty string for "has".
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	protected function isEmptyString($key)
+	{
+		$boolOrArray = is_bool($this->input($key)) || is_array($this->input($key));
+
+		return ! $boolOrArray && trim((string) $this->input($key)) === '';
+	}
+
+	/**
+	 * Get all of the input and files for the request.
+	 *
+	 * @return array
+	 */
+	public function all()
+	{
+		return array_replace_recursive($this->input(), $this->files->all());
+	}
+
+	/**
+	 * Retrieve an input item from the request.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return string
+	 */
+	public function input($key = null, $default = null)
+	{
+		$input = $this->getInputSource()->all() + $this->query->all();
+
+		return array_get($input, $key, $default);
+	}
+
+	/**
+	 * Get a subset of the items from the input data.
+	 *
+	 * @param  array  $keys
+	 * @return array
+	 */
+	public function only($keys)
+	{
+		$keys = is_array($keys) ? $keys : func_get_args();
+
+		$results = [];
+
+		$input = $this->all();
+
+		foreach ($keys as $key)
+		{
+			array_set($results, $key, array_get($input, $key));
+		}
+
+		return $results;
+	}
+
+	/**
+	 * Get all of the input except for a specified array of items.
+	 *
+	 * @param  array  $keys
+	 * @return array
+	 */
+	public function except($keys)
+	{
+		$keys = is_array($keys) ? $keys : func_get_args();
+
+		$results = $this->all();
+
+		array_forget($results, $keys);
+
+		return $results;
+	}
+
+	/**
+	 * Retrieve a query string item from the request.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return string
+	 */
+	public function query($key = null, $default = null)
+	{
+		return $this->retrieveItem('query', $key, $default);
+	}
+
+	/**
+	 * Determine if a cookie is set on the request.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function hasCookie($key)
+	{
+		return ! is_null($this->cookie($key));
+	}
+
+	/**
+	 * Retrieve a cookie from the request.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return string
+	 */
+	public function cookie($key = null, $default = null)
+	{
+		return $this->retrieveItem('cookies', $key, $default);
+	}
+
+	/**
+	 * Retrieve a file from the request.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return \Symfony\Component\HttpFoundation\File\UploadedFile|array
+	 */
+	public function file($key = null, $default = null)
+	{
+		return array_get($this->files->all(), $key, $default);
+	}
+
+	/**
+	 * Determine if the uploaded data contains a file.
+	 *
+	 * @param  string  $key
+	 * @return bool
+	 */
+	public function hasFile($key)
+	{
+		if ( ! is_array($files = $this->file($key))) $files = array($files);
+
+		foreach ($files as $file)
+		{
+			if ($this->isValidFile($file)) return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Check that the given file is a valid file instance.
+	 *
+	 * @param  mixed  $file
+	 * @return bool
+	 */
+	protected function isValidFile($file)
+	{
+		return $file instanceof SplFileInfo && $file->getPath() != '';
+	}
+
+	/**
+	 * Retrieve a header from the request.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return string
+	 */
+	public function header($key = null, $default = null)
+	{
+		return $this->retrieveItem('headers', $key, $default);
+	}
+
+	/**
+	 * Retrieve a server variable from the request.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return string
+	 */
+	public function server($key = null, $default = null)
+	{
+		return $this->retrieveItem('server', $key, $default);
+	}
+
+	/**
+	 * Retrieve an old input item.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return mixed
+	 */
+	public function old($key = null, $default = null)
+	{
+		return $this->session()->getOldInput($key, $default);
+	}
+
+	/**
+	 * Flash the input for the current request to the session.
+	 *
+	 * @param  string  $filter
+	 * @param  array   $keys
+	 * @return void
+	 */
+	public function flash($filter = null, $keys = array())
+	{
+		$flash = ( ! is_null($filter)) ? $this->$filter($keys) : $this->input();
+
+		$this->session()->flashInput($flash);
+	}
+
+	/**
+	 * Flash only some of the input to the session.
+	 *
+	 * @param  mixed  string
+	 * @return void
+	 */
+	public function flashOnly($keys)
+	{
+		$keys = is_array($keys) ? $keys : func_get_args();
+
+		return $this->flash('only', $keys);
+	}
+
+	/**
+	 * Flash only some of the input to the session.
+	 *
+	 * @param  mixed  string
+	 * @return void
+	 */
+	public function flashExcept($keys)
+	{
+		$keys = is_array($keys) ? $keys : func_get_args();
+
+		return $this->flash('except', $keys);
+	}
+
+	/**
+	 * Flush all of the old input from the session.
+	 *
+	 * @return void
+	 */
+	public function flush()
+	{
+		$this->session()->flashInput(array());
+	}
+
+	/**
+	 * Retrieve a parameter item from a given source.
+	 *
+	 * @param  string  $source
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return string
+	 */
+	protected function retrieveItem($source, $key, $default)
+	{
+		if (is_null($key))
+		{
+			return $this->$source->all();
+		}
+
+		return $this->$source->get($key, $default, true);
+	}
+
+	/**
+	 * Merge new input into the current request's input array.
+	 *
+	 * @param  array  $input
+	 * @return void
+	 */
+	public function merge(array $input)
+	{
+		$this->getInputSource()->add($input);
+	}
+
+	/**
+	 * Replace the input for the current request.
+	 *
+	 * @param  array  $input
+	 * @return void
+	 */
+	public function replace(array $input)
+	{
+		$this->getInputSource()->replace($input);
+	}
+
+	/**
+	 * Get the JSON payload for the request.
+	 *
+	 * @param  string  $key
+	 * @param  mixed   $default
+	 * @return mixed
+	 */
+	public function json($key = null, $default = null)
+	{
+		if ( ! isset($this->json))
+		{
+			$this->json = new ParameterBag((array) json_decode($this->getContent(), true));
+		}
+
+		if (is_null($key)) return $this->json;
+
+		return array_get($this->json->all(), $key, $default);
+	}
+
+	/**
+	 * Get the input source for the request.
+	 *
+	 * @return \Symfony\Component\HttpFoundation\ParameterBag
+	 */
+	protected function getInputSource()
+	{
+		if ($this->isJson()) return $this->json();
+
+		return $this->getMethod() == 'GET' ? $this->query : $this->request;
+	}
+
+	/**
+	 * Determine if the request is sending JSON.
+	 *
+	 * @return bool
+	 */
+	public function isJson()
+	{
+		return str_contains($this->header('CONTENT_TYPE'), '/json');
+	}
+
+	/**
+	 * Determine if the current request is asking for JSON in return.
+	 *
+	 * @return bool
+	 */
+	public function wantsJson()
+	{
+		$acceptable = $this->getAcceptableContentTypes();
+
+		return isset($acceptable[0]) && $acceptable[0] == 'application/json';
+	}
+
+	/**
+	 * Get the data format expected in the response.
+	 *
+	 * @param  string  $default
+	 * @return string
+	 */
+	public function format($default = 'html')
+	{
+		foreach ($this->getAcceptableContentTypes() as $type)
+		{
+			if ($format = $this->getFormat($type)) return $format;
+		}
+
+		return $default;
+	}
+
+	/**
+	 * Create an Illuminate request from a Symfony instance.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @return \Illuminate\Http\Request
+	 */
+	public static function createFromBase(SymfonyRequest $request)
+	{
+		if ($request instanceof static) return $request;
+
+		$content = $request->content;
+
+		$request = (new static)->duplicate(
+
+			$request->query->all(), $request->request->all(), $request->attributes->all(),
+
+			$request->cookies->all(), $request->files->all(), $request->server->all()
+		);
+
+		$request->content = $content;
+
+		$request->request = $request->getInputSource();
+
+		return $request;
+	}
+
+	/**
+	 * Get the session associated with the request.
+	 *
+	 * @return \Illuminate\Session\Store
+	 *
+	 * @throws \RuntimeException
+	 */
+	public function session()
+	{
+		if ( ! $this->hasSession())
+		{
+			throw new \RuntimeException("Session store not set on request.");
+		}
+
+		return $this->getSession();
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Http/Response.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Http/Response.php b/vendor/laravel/framework/src/Illuminate/Http/Response.php
new file mode 100755
index 0000000..f5d5151
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Http/Response.php
@@ -0,0 +1,85 @@
+<?php namespace Illuminate\Http;
+
+use ArrayObject;
+use Illuminate\Support\Contracts\JsonableInterface;
+use Illuminate\Support\Contracts\RenderableInterface;
+
+class Response extends \Symfony\Component\HttpFoundation\Response {
+
+	use ResponseTrait;
+
+	/**
+	 * The original content of the response.
+	 *
+	 * @var mixed
+	 */
+	public $original;
+
+	/**
+	 * Set the content on the response.
+	 *
+	 * @param  mixed  $content
+	 * @return $this
+	 */
+	public function setContent($content)
+	{
+		$this->original = $content;
+
+		// If the content is "JSONable" we will set the appropriate header and convert
+		// the content to JSON. This is useful when returning something like models
+		// from routes that will be automatically transformed to their JSON form.
+		if ($this->shouldBeJson($content))
+		{
+			$this->headers->set('Content-Type', 'application/json');
+
+			$content = $this->morphToJson($content);
+		}
+
+		// If this content implements the "RenderableInterface", then we will call the
+		// render method on the object so we will avoid any "__toString" exceptions
+		// that might be thrown and have their errors obscured by PHP's handling.
+		elseif ($content instanceof RenderableInterface)
+		{
+			$content = $content->render();
+		}
+
+		return parent::setContent($content);
+	}
+
+	/**
+	 * Morph the given content into JSON.
+	 *
+	 * @param  mixed   $content
+	 * @return string
+	 */
+	protected function morphToJson($content)
+	{
+		if ($content instanceof JsonableInterface) return $content->toJson();
+
+		return json_encode($content);
+	}
+
+	/**
+	 * Determine if the given content should be turned into JSON.
+	 *
+	 * @param  mixed  $content
+	 * @return bool
+	 */
+	protected function shouldBeJson($content)
+	{
+		return $content instanceof JsonableInterface ||
+			   $content instanceof ArrayObject ||
+			   is_array($content);
+	}
+
+	/**
+	 * Get the original response content.
+	 *
+	 * @return mixed
+	 */
+	public function getOriginalContent()
+	{
+		return $this->original;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Http/ResponseTrait.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Http/ResponseTrait.php b/vendor/laravel/framework/src/Illuminate/Http/ResponseTrait.php
new file mode 100644
index 0000000..2cfd9be
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Http/ResponseTrait.php
@@ -0,0 +1,35 @@
+<?php namespace Illuminate\Http;
+
+use Symfony\Component\HttpFoundation\Cookie;
+
+trait ResponseTrait {
+
+	/**
+	 * Set a header on the Response.
+	 *
+	 * @param  string  $key
+	 * @param  string  $value
+	 * @param  bool    $replace
+	 * @return $this
+	 */
+	public function header($key, $value, $replace = true)
+	{
+		$this->headers->set($key, $value, $replace);
+
+		return $this;
+	}
+
+	/**
+	 * Add a cookie to the response.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Cookie  $cookie
+	 * @return $this
+	 */
+	public function withCookie(Cookie $cookie)
+	{
+		$this->headers->setCookie($cookie);
+
+		return $this;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Http/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Http/composer.json b/vendor/laravel/framework/src/Illuminate/Http/composer.json
new file mode 100755
index 0000000..d8d6b80
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Http/composer.json
@@ -0,0 +1,29 @@
+{
+    "name": "illuminate/http",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/session": "4.2.*",
+        "illuminate/support": "4.2.*",
+        "symfony/http-foundation": "2.5.*",
+        "symfony/http-kernel": "2.5.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Http": ""
+        }
+    },
+    "target-dir": "Illuminate/Http",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Log/LogServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Log/LogServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Log/LogServiceProvider.php
new file mode 100755
index 0000000..77f8f05
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Log/LogServiceProvider.php
@@ -0,0 +1,55 @@
+<?php namespace Illuminate\Log;
+
+use Monolog\Logger;
+use Illuminate\Support\ServiceProvider;
+
+class LogServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$logger = new Writer(
+			new Logger($this->app['env']), $this->app['events']
+		);
+
+		// Once we have an instance of the logger we'll bind it as an instance into
+		// the container so that it is available for resolution. We'll also bind
+		// the PSR Logger interface to resolve to this Monolog implementation.
+		$this->app->instance('log', $logger);
+
+		$this->app->bind('Psr\Log\LoggerInterface', function($app)
+		{
+			return $app['log']->getMonolog();
+		});
+
+		// If the setup Closure has been bound in the container, we will resolve it
+		// and pass in the logger instance. This allows this to defer all of the
+		// logger class setup until the last possible second, improving speed.
+		if (isset($this->app['log.setup']))
+		{
+			call_user_func($this->app['log.setup'], $logger);
+		}
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('log', 'Psr\Log\LoggerInterface');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Log/Writer.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Log/Writer.php b/vendor/laravel/framework/src/Illuminate/Log/Writer.php
new file mode 100755
index 0000000..12b59f5
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Log/Writer.php
@@ -0,0 +1,311 @@
+<?php namespace Illuminate\Log;
+
+use Closure;
+use Illuminate\Events\Dispatcher;
+use Monolog\Handler\StreamHandler;
+use Monolog\Logger as MonologLogger;
+use Monolog\Formatter\LineFormatter;
+use Monolog\Handler\ErrorLogHandler;
+use Monolog\Handler\RotatingFileHandler;
+use Illuminate\Support\Contracts\JsonableInterface;
+use Illuminate\Support\Contracts\ArrayableInterface;
+
+class Writer {
+
+	/**
+	 * The Monolog logger instance.
+	 *
+	 * @var \Monolog\Logger
+	 */
+	protected $monolog;
+
+	/**
+	 * All of the error levels.
+	 *
+	 * @var array
+	 */
+	protected $levels = array(
+		'debug',
+		'info',
+		'notice',
+		'warning',
+		'error',
+		'critical',
+		'alert',
+		'emergency',
+	);
+
+	/**
+	 * The event dispatcher instance.
+	 *
+	 * @var \Illuminate\Events\Dispatcher
+	 */
+	protected $dispatcher;
+
+	/**
+	 * Create a new log writer instance.
+	 *
+	 * @param  \Monolog\Logger  $monolog
+	 * @param  \Illuminate\Events\Dispatcher  $dispatcher
+	 * @return void
+	 */
+	public function __construct(MonologLogger $monolog, Dispatcher $dispatcher = null)
+	{
+		$this->monolog = $monolog;
+
+		if (isset($dispatcher))
+		{
+			$this->dispatcher = $dispatcher;
+		}
+	}
+
+	/**
+	 * Call Monolog with the given method and parameters.
+	 *
+	 * @param  string  $method
+	 * @param  mixed   $parameters
+	 * @return mixed
+	 */
+	protected function callMonolog($method, $parameters)
+	{
+		if (is_array($parameters[0]))
+		{
+			$parameters[0] = json_encode($parameters[0]);
+		}
+
+		return call_user_func_array(array($this->monolog, $method), $parameters);
+	}
+
+	/**
+	 * Register a file log handler.
+	 *
+	 * @param  string  $path
+	 * @param  string  $level
+	 * @return void
+	 */
+	public function useFiles($path, $level = 'debug')
+	{
+		$level = $this->parseLevel($level);
+
+		$this->monolog->pushHandler($handler = new StreamHandler($path, $level));
+
+		$handler->setFormatter($this->getDefaultFormatter());
+	}
+
+	/**
+	 * Register a daily file log handler.
+	 *
+	 * @param  string  $path
+	 * @param  int     $days
+	 * @param  string  $level
+	 * @return void
+	 */
+	public function useDailyFiles($path, $days = 0, $level = 'debug')
+	{
+		$level = $this->parseLevel($level);
+
+		$this->monolog->pushHandler($handler = new RotatingFileHandler($path, $days, $level));
+
+		$handler->setFormatter($this->getDefaultFormatter());
+	}
+
+	/**
+	 * Register an error_log handler.
+	 *
+	 * @param  string  $level
+	 * @param  int     $messageType
+	 * @return void
+	 */
+	public function useErrorLog($level = 'debug', $messageType = ErrorLogHandler::OPERATING_SYSTEM)
+	{
+		$level = $this->parseLevel($level);
+
+		$this->monolog->pushHandler($handler = new ErrorLogHandler($messageType, $level));
+
+		$handler->setFormatter($this->getDefaultFormatter());
+	}
+
+	/**
+	 * Get a default Monolog formatter instance.
+	 *
+	 * @return \Monolog\Formatter\LineFormatter
+	 */
+	protected function getDefaultFormatter()
+	{
+		return new LineFormatter(null, null, true);
+	}
+
+	/**
+	 * Parse the string level into a Monolog constant.
+	 *
+	 * @param  string  $level
+	 * @return int
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	protected function parseLevel($level)
+	{
+		switch ($level)
+		{
+			case 'debug':
+				return MonologLogger::DEBUG;
+
+			case 'info':
+				return MonologLogger::INFO;
+
+			case 'notice':
+				return MonologLogger::NOTICE;
+
+			case 'warning':
+				return MonologLogger::WARNING;
+
+			case 'error':
+				return MonologLogger::ERROR;
+
+			case 'critical':
+				return MonologLogger::CRITICAL;
+
+			case 'alert':
+				return MonologLogger::ALERT;
+
+			case 'emergency':
+				return MonologLogger::EMERGENCY;
+
+			default:
+				throw new \InvalidArgumentException("Invalid log level.");
+		}
+	}
+
+	/**
+	 * Register a new callback handler for when
+	 * a log event is triggered.
+	 *
+	 * @param  \Closure  $callback
+	 * @return void
+	 *
+	 * @throws \RuntimeException
+	 */
+	public function listen(Closure $callback)
+	{
+		if ( ! isset($this->dispatcher))
+		{
+			throw new \RuntimeException("Events dispatcher has not been set.");
+		}
+
+		$this->dispatcher->listen('illuminate.log', $callback);
+	}
+
+	/**
+	 * Get the underlying Monolog instance.
+	 *
+	 * @return \Monolog\Logger
+	 */
+	public function getMonolog()
+	{
+		return $this->monolog;
+	}
+
+	/**
+	 * Get the event dispatcher instance.
+	 *
+	 * @return \Illuminate\Events\Dispatcher
+	 */
+	public function getEventDispatcher()
+	{
+		return $this->dispatcher;
+	}
+
+	/**
+	 * Set the event dispatcher instance.
+	 *
+	 * @param  \Illuminate\Events\Dispatcher
+	 * @return void
+	 */
+	public function setEventDispatcher(Dispatcher $dispatcher)
+	{
+		$this->dispatcher = $dispatcher;
+	}
+
+	/**
+	 * Fires a log event.
+	 *
+	 * @param  string  $level
+	 * @param  string  $message
+	 * @param  array   $context
+	 * @return void
+	 */
+	protected function fireLogEvent($level, $message, array $context = array())
+	{
+		// If the event dispatcher is set, we will pass along the parameters to the
+		// log listeners. These are useful for building profilers or other tools
+		// that aggregate all of the log messages for a given "request" cycle.
+		if (isset($this->dispatcher))
+		{
+			$this->dispatcher->fire('illuminate.log', compact('level', 'message', 'context'));
+		}
+	}
+
+	/**
+	 * Dynamically pass log calls into the writer.
+	 *
+	 * @param  mixed (level, param, param)
+	 * @return mixed
+	 */
+	public function write()
+	{
+		$level = head(func_get_args());
+
+		return call_user_func_array(array($this, $level), array_slice(func_get_args(), 1));
+	}
+
+	/**
+	 * Dynamically handle error additions.
+	 *
+	 * @param  string  $method
+	 * @param  mixed   $parameters
+	 * @return mixed
+	 *
+	 * @throws \BadMethodCallException
+	 */
+	public function __call($method, $parameters)
+	{
+		if (in_array($method, $this->levels))
+		{
+			$this->formatParameters($parameters);
+
+			call_user_func_array(array($this, 'fireLogEvent'), array_merge(array($method), $parameters));
+
+			$method = 'add'.ucfirst($method);
+
+			return $this->callMonolog($method, $parameters);
+		}
+
+		throw new \BadMethodCallException("Method [$method] does not exist.");
+	}
+
+	/**
+	 * Format the parameters for the logger.
+	 *
+	 * @param  mixed  $parameters
+	 * @return void
+	 */
+	protected function formatParameters(&$parameters)
+	{
+		if (isset($parameters[0]))
+		{
+			if (is_array($parameters[0]))
+			{
+				$parameters[0] = var_export($parameters[0], true);
+			}
+			elseif ($parameters[0] instanceof JsonableInterface)
+			{
+				$parameters[0] = $parameters[0]->toJson();
+			}
+			elseif ($parameters[0] instanceof ArrayableInterface)
+			{
+				$parameters[0] = var_export($parameters[0]->toArray(), true);
+			}
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Log/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Log/composer.json b/vendor/laravel/framework/src/Illuminate/Log/composer.json
new file mode 100755
index 0000000..155dc57
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Log/composer.json
@@ -0,0 +1,30 @@
+{
+    "name": "illuminate/log",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/support": "4.2.*",
+        "monolog/monolog": "~1.6"
+    },
+    "require-dev": {
+        "illuminate/events": "4.2.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Log": ""
+        }
+    },
+    "target-dir": "Illuminate/Log",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Mail/MailServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Mail/MailServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Mail/MailServiceProvider.php
new file mode 100755
index 0000000..e05818a
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Mail/MailServiceProvider.php
@@ -0,0 +1,261 @@
+<?php namespace Illuminate\Mail;
+
+use Swift_Mailer;
+use Illuminate\Support\ServiceProvider;
+use Swift_SmtpTransport as SmtpTransport;
+use Swift_MailTransport as MailTransport;
+use Illuminate\Mail\Transport\LogTransport;
+use Illuminate\Mail\Transport\MailgunTransport;
+use Illuminate\Mail\Transport\MandrillTransport;
+use Swift_SendmailTransport as SendmailTransport;
+
+class MailServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$me = $this;
+
+		$this->app->bindShared('mailer', function($app) use ($me)
+		{
+			$me->registerSwiftMailer();
+
+			// Once we have create the mailer instance, we will set a container instance
+			// on the mailer. This allows us to resolve mailer classes via containers
+			// for maximum testability on said classes instead of passing Closures.
+			$mailer = new Mailer(
+				$app['view'], $app['swift.mailer'], $app['events']
+			);
+
+			$this->setMailerDependencies($mailer, $app);
+
+			// If a "from" address is set, we will set it on the mailer so that all mail
+			// messages sent by the applications will utilize the same "from" address
+			// on each one, which makes the developer's life a lot more convenient.
+			$from = $app['config']['mail.from'];
+
+			if (is_array($from) && isset($from['address']))
+			{
+				$mailer->alwaysFrom($from['address'], $from['name']);
+			}
+
+			// Here we will determine if the mailer should be in "pretend" mode for this
+			// environment, which will simply write out e-mail to the logs instead of
+			// sending it over the web, which is useful for local dev environments.
+			$pretend = $app['config']->get('mail.pretend', false);
+
+			$mailer->pretend($pretend);
+
+			return $mailer;
+		});
+	}
+
+	/**
+	 * Set a few dependencies on the mailer instance.
+	 *
+	 * @param  \Illuminate\Mail\Mailer  $mailer
+	 * @param  \Illuminate\Foundation\Application  $app
+	 * @return void
+	 */
+	protected function setMailerDependencies($mailer, $app)
+	{
+		$mailer->setContainer($app);
+
+		if ($app->bound('log'))
+		{
+			$mailer->setLogger($app['log']);
+		}
+
+		if ($app->bound('queue'))
+		{
+			$mailer->setQueue($app['queue']);
+		}
+	}
+
+	/**
+	 * Register the Swift Mailer instance.
+	 *
+	 * @return void
+	 */
+	public function registerSwiftMailer()
+	{
+		$config = $this->app['config']['mail'];
+
+		$this->registerSwiftTransport($config);
+
+		// Once we have the transporter registered, we will register the actual Swift
+		// mailer instance, passing in the transport instances, which allows us to
+		// override this transporter instances during app start-up if necessary.
+		$this->app['swift.mailer'] = $this->app->share(function($app)
+		{
+			return new Swift_Mailer($app['swift.transport']);
+		});
+	}
+
+	/**
+	 * Register the Swift Transport instance.
+	 *
+	 * @param  array  $config
+	 * @return void
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	protected function registerSwiftTransport($config)
+	{
+		switch ($config['driver'])
+		{
+			case 'smtp':
+				return $this->registerSmtpTransport($config);
+
+			case 'sendmail':
+				return $this->registerSendmailTransport($config);
+
+			case 'mail':
+				return $this->registerMailTransport($config);
+
+			case 'mailgun':
+				return $this->registerMailgunTransport($config);
+
+			case 'mandrill':
+				return $this->registerMandrillTransport($config);
+
+			case 'log':
+				return $this->registerLogTransport($config);
+
+			default:
+				throw new \InvalidArgumentException('Invalid mail driver.');
+		}
+	}
+
+	/**
+	 * Register the SMTP Swift Transport instance.
+	 *
+	 * @param  array  $config
+	 * @return void
+	 */
+	protected function registerSmtpTransport($config)
+	{
+		$this->app['swift.transport'] = $this->app->share(function($app) use ($config)
+		{
+			extract($config);
+
+			// The Swift SMTP transport instance will allow us to use any SMTP backend
+			// for delivering mail such as Sendgrid, Amazon SES, or a custom server
+			// a developer has available. We will just pass this configured host.
+			$transport = SmtpTransport::newInstance($host, $port);
+
+			if (isset($encryption))
+			{
+				$transport->setEncryption($encryption);
+			}
+
+			// Once we have the transport we will check for the presence of a username
+			// and password. If we have it we will set the credentials on the Swift
+			// transporter instance so that we'll properly authenticate delivery.
+			if (isset($username))
+			{
+				$transport->setUsername($username);
+
+				$transport->setPassword($password);
+			}
+
+			return $transport;
+		});
+	}
+
+	/**
+	 * Register the Sendmail Swift Transport instance.
+	 *
+	 * @param  array  $config
+	 * @return void
+	 */
+	protected function registerSendmailTransport($config)
+	{
+		$this->app['swift.transport'] = $this->app->share(function($app) use ($config)
+		{
+			return SendmailTransport::newInstance($config['sendmail']);
+		});
+	}
+
+	/**
+	 * Register the Mail Swift Transport instance.
+	 *
+	 * @param  array  $config
+	 * @return void
+	 */
+	protected function registerMailTransport($config)
+	{
+		$this->app['swift.transport'] = $this->app->share(function()
+		{
+			return MailTransport::newInstance();
+		});
+	}
+
+	/**
+	 * Register the Mailgun Swift Transport instance.
+	 *
+	 * @param  array  $config
+	 * @return void
+	 */
+	protected function registerMailgunTransport($config)
+	{
+		$mailgun = $this->app['config']->get('services.mailgun', array());
+
+		$this->app->bindShared('swift.transport', function() use ($mailgun)
+		{
+			return new MailgunTransport($mailgun['secret'], $mailgun['domain']);
+		});
+	}
+
+	/**
+	 * Register the Mandrill Swift Transport instance.
+	 *
+	 * @param  array  $config
+	 * @return void
+	 */
+	protected function registerMandrillTransport($config)
+	{
+		$mandrill = $this->app['config']->get('services.mandrill', array());
+
+		$this->app->bindShared('swift.transport', function() use ($mandrill)
+		{
+			return new MandrillTransport($mandrill['secret']);
+		});
+	}
+
+	/**
+	 * Register the "Log" Swift Transport instance.
+	 *
+	 * @param  array  $config
+	 * @return void
+	 */
+	protected function registerLogTransport($config)
+	{
+		$this->app->bindShared('swift.transport', function($app)
+		{
+			return new LogTransport($app->make('Psr\Log\LoggerInterface'));
+		});
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('mailer', 'swift.mailer', 'swift.transport');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php b/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php
new file mode 100755
index 0000000..fb10040
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php
@@ -0,0 +1,504 @@
+<?php namespace Illuminate\Mail;
+
+use Closure;
+use Swift_Mailer;
+use Swift_Message;
+use Illuminate\Log\Writer;
+use Illuminate\View\Factory;
+use Illuminate\Events\Dispatcher;
+use Illuminate\Queue\QueueManager;
+use Illuminate\Container\Container;
+use Illuminate\Support\SerializableClosure;
+
+class Mailer {
+
+	/**
+	 * The view factory instance.
+	 *
+	 * @var \Illuminate\View\Factory
+	 */
+	protected $views;
+
+	/**
+	 * The Swift Mailer instance.
+	 *
+	 * @var \Swift_Mailer
+	 */
+	protected $swift;
+
+	/**
+	 * The event dispatcher instance.
+	 *
+	 * @var \Illuminate\Events\Dispatcher
+	 */
+	protected $events;
+
+	/**
+	 * The global from address and name.
+	 *
+	 * @var array
+	 */
+	protected $from;
+
+	/**
+	 * The log writer instance.
+	 *
+	 * @var \Illuminate\Log\Writer
+	 */
+	protected $logger;
+
+	/**
+	 * The IoC container instance.
+	 *
+	 * @var \Illuminate\Container\Container
+	 */
+	protected $container;
+
+	/*
+	 * The QueueManager instance.
+	 *
+	 * @var \Illuminate\Queue\QueueManager
+	 */
+	protected $queue;
+
+	/**
+	 * Indicates if the actual sending is disabled.
+	 *
+	 * @var bool
+	 */
+	protected $pretending = false;
+
+	/**
+	 * Array of failed recipients.
+	 *
+	 * @var array
+	 */
+	protected $failedRecipients = array();
+
+	/**
+	 * Array of parsed views containing html and text view name.
+	 *
+	 * @var array
+	 */
+	protected $parsedViews = array();
+
+	/**
+	 * Create a new Mailer instance.
+	 *
+	 * @param  \Illuminate\View\Factory  $views
+	 * @param  \Swift_Mailer  $swift
+	 * @param  \Illuminate\Events\Dispatcher  $events
+	 * @return void
+	 */
+	public function __construct(Factory $views, Swift_Mailer $swift, Dispatcher $events = null)
+	{
+		$this->views = $views;
+		$this->swift = $swift;
+		$this->events = $events;
+	}
+
+	/**
+	 * Set the global from address and name.
+	 *
+	 * @param  string  $address
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function alwaysFrom($address, $name = null)
+	{
+		$this->from = compact('address', 'name');
+	}
+
+	/**
+	 * Send a new message when only a plain part.
+	 *
+	 * @param  string  $view
+	 * @param  array   $data
+	 * @param  mixed   $callback
+	 * @return int
+	 */
+	public function plain($view, array $data, $callback)
+	{
+		return $this->send(array('text' => $view), $data, $callback);
+	}
+
+	/**
+	 * Send a new message using a view.
+	 *
+	 * @param  string|array  $view
+	 * @param  array  $data
+	 * @param  \Closure|string  $callback
+	 * @return void
+	 */
+	public function send($view, array $data, $callback)
+	{
+		// First we need to parse the view, which could either be a string or an array
+		// containing both an HTML and plain text versions of the view which should
+		// be used when sending an e-mail. We will extract both of them out here.
+		list($view, $plain) = $this->parseView($view);
+
+		$data['message'] = $message = $this->createMessage();
+
+		$this->callMessageBuilder($callback, $message);
+
+		// Once we have retrieved the view content for the e-mail we will set the body
+		// of this message using the HTML type, which will provide a simple wrapper
+		// to creating view based emails that are able to receive arrays of data.
+		$this->addContent($message, $view, $plain, $data);
+
+		$message = $message->getSwiftMessage();
+
+		$this->sendSwiftMessage($message);
+	}
+
+	/**
+	 * Queue a new e-mail message for sending.
+	 *
+	 * @param  string|array  $view
+	 * @param  array   $data
+	 * @param  \Closure|string  $callback
+	 * @param  string  $queue
+	 * @return mixed
+	 */
+	public function queue($view, array $data, $callback, $queue = null)
+	{
+		$callback = $this->buildQueueCallable($callback);
+
+		return $this->queue->push('mailer@handleQueuedMessage', compact('view', 'data', 'callback'), $queue);
+	}
+
+	/**
+	 * Queue a new e-mail message for sending on the given queue.
+	 *
+	 * @param  string  $queue
+	 * @param  string|array  $view
+	 * @param  array   $data
+	 * @param  \Closure|string  $callback
+	 * @return mixed
+	 */
+	public function queueOn($queue, $view, array $data, $callback)
+	{
+		return $this->queue($view, $data, $callback, $queue);
+	}
+
+	/**
+	 * Queue a new e-mail message for sending after (n) seconds.
+	 *
+	 * @param  int  $delay
+	 * @param  string|array  $view
+	 * @param  array  $data
+	 * @param  \Closure|string  $callback
+	 * @param  string  $queue
+	 * @return mixed
+	 */
+	public function later($delay, $view, array $data, $callback, $queue = null)
+	{
+		$callback = $this->buildQueueCallable($callback);
+
+		return $this->queue->later($delay, 'mailer@handleQueuedMessage', compact('view', 'data', 'callback'), $queue);
+	}
+
+	/**
+	 * Queue a new e-mail message for sending after (n) seconds on the given queue.
+	 *
+	 * @param  string  $queue
+	 * @param  int  $delay
+	 * @param  string|array  $view
+	 * @param  array  $data
+	 * @param  \Closure|string  $callback
+	 * @return mixed
+	 */
+	public function laterOn($queue, $delay, $view, array $data, $callback)
+	{
+		return $this->later($delay, $view, $data, $callback, $queue);
+	}
+
+	/**
+	 * Build the callable for a queued e-mail job.
+	 *
+	 * @param  mixed  $callback
+	 * @return mixed
+	 */
+	protected function buildQueueCallable($callback)
+	{
+		if ( ! $callback instanceof Closure) return $callback;
+
+		return serialize(new SerializableClosure($callback));
+	}
+
+	/**
+	 * Handle a queued e-mail message job.
+	 *
+	 * @param  \Illuminate\Queue\Jobs\Job  $job
+	 * @param  array  $data
+	 * @return void
+	 */
+	public function handleQueuedMessage($job, $data)
+	{
+		$this->send($data['view'], $data['data'], $this->getQueuedCallable($data));
+
+		$job->delete();
+	}
+
+	/**
+	 * Get the true callable for a queued e-mail message.
+	 *
+	 * @param  array  $data
+	 * @return mixed
+	 */
+	protected function getQueuedCallable(array $data)
+	{
+		if (str_contains($data['callback'], 'SerializableClosure'))
+		{
+			return with(unserialize($data['callback']))->getClosure();
+		}
+
+		return $data['callback'];
+	}
+
+	/**
+	 * Add the content to a given message.
+	 *
+	 * @param  \Illuminate\Mail\Message  $message
+	 * @param  string  $view
+	 * @param  string  $plain
+	 * @param  array   $data
+	 * @return void
+	 */
+	protected function addContent($message, $view, $plain, $data)
+	{
+		if (isset($view))
+		{
+			$message->setBody($this->getView($view, $data), 'text/html');
+		}
+
+		if (isset($plain))
+		{
+			$message->addPart($this->getView($plain, $data), 'text/plain');
+		}
+	}
+
+	/**
+	 * Parse the given view name or array.
+	 *
+	 * @param  string|array  $view
+	 * @return array
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	protected function parseView($view)
+	{
+		if (is_string($view)) return array($view, null);
+
+		// If the given view is an array with numeric keys, we will just assume that
+		// both a "pretty" and "plain" view were provided, so we will return this
+		// array as is, since must should contain both views with numeric keys.
+		if (is_array($view) && isset($view[0]))
+		{
+			return $view;
+		}
+
+		// If the view is an array, but doesn't contain numeric keys, we will assume
+		// the the views are being explicitly specified and will extract them via
+		// named keys instead, allowing the developers to use one or the other.
+		elseif (is_array($view))
+		{
+			return array(
+				array_get($view, 'html'), array_get($view, 'text')
+			);
+		}
+
+		throw new \InvalidArgumentException("Invalid view.");
+	}
+
+	/**
+	 * Send a Swift Message instance.
+	 *
+	 * @param  \Swift_Message  $message
+	 * @return void
+	 */
+	protected function sendSwiftMessage($message)
+	{
+		if ($this->events)
+		{
+			$this->events->fire('mailer.sending', array($message));
+		}
+
+		if ( ! $this->pretending)
+		{
+			$this->swift->send($message, $this->failedRecipients);
+		}
+		elseif (isset($this->logger))
+		{
+			$this->logMessage($message);
+		}
+	}
+
+	/**
+	 * Log that a message was sent.
+	 *
+	 * @param  \Swift_Message  $message
+	 * @return void
+	 */
+	protected function logMessage($message)
+	{
+		$emails = implode(', ', array_keys((array) $message->getTo()));
+
+		$this->logger->info("Pretending to mail message to: {$emails}");
+	}
+
+	/**
+	 * Call the provided message builder.
+	 *
+	 * @param  \Closure|string  $callback
+	 * @param  \Illuminate\Mail\Message  $message
+	 * @return mixed
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	protected function callMessageBuilder($callback, $message)
+	{
+		if ($callback instanceof Closure)
+		{
+			return call_user_func($callback, $message);
+		}
+		elseif (is_string($callback))
+		{
+			return $this->container[$callback]->mail($message);
+		}
+
+		throw new \InvalidArgumentException("Callback is not valid.");
+	}
+
+	/**
+	 * Create a new message instance.
+	 *
+	 * @return \Illuminate\Mail\Message
+	 */
+	protected function createMessage()
+	{
+		$message = new Message(new Swift_Message);
+
+		// If a global from address has been specified we will set it on every message
+		// instances so the developer does not have to repeat themselves every time
+		// they create a new message. We will just go ahead and push the address.
+		if (isset($this->from['address']))
+		{
+			$message->from($this->from['address'], $this->from['name']);
+		}
+
+		return $message;
+	}
+
+	/**
+	 * Render the given view.
+	 *
+	 * @param  string  $view
+	 * @param  array   $data
+	 * @return \Illuminate\View\View
+	 */
+	protected function getView($view, $data)
+	{
+		return $this->views->make($view, $data)->render();
+	}
+
+	/**
+	 * Tell the mailer to not really send messages.
+	 *
+	 * @param  bool  $value
+	 * @return void
+	 */
+	public function pretend($value = true)
+	{
+		$this->pretending = $value;
+	}
+
+	/**
+	 * Check if the mailer is pretending to send messages.
+	 *
+	 * @return bool
+	 */
+	public function isPretending()
+	{
+		return $this->pretending;
+	}
+
+	/**
+	 * Get the view factory instance.
+	 *
+	 * @return \Illuminate\View\Factory
+	 */
+	public function getViewFactory()
+	{
+		return $this->views;
+	}
+
+	/**
+	 * Get the Swift Mailer instance.
+	 *
+	 * @return \Swift_Mailer
+	 */
+	public function getSwiftMailer()
+	{
+		return $this->swift;
+	}
+
+	/**
+	 * Get the array of failed recipients.
+	 *
+	 * @return array
+	 */
+	public function failures()
+	{
+		return $this->failedRecipients;
+	}
+
+	/**
+	 * Set the Swift Mailer instance.
+	 *
+	 * @param  \Swift_Mailer  $swift
+	 * @return void
+	 */
+	public function setSwiftMailer($swift)
+	{
+		$this->swift = $swift;
+	}
+
+	/**
+	 * Set the log writer instance.
+	 *
+	 * @param  \Illuminate\Log\Writer  $logger
+	 * @return $this
+	 */
+	public function setLogger(Writer $logger)
+	{
+		$this->logger = $logger;
+
+		return $this;
+	}
+
+	/**
+	 * Set the queue manager instance.
+	 *
+	 * @param  \Illuminate\Queue\QueueManager  $queue
+	 * @return $this
+	 */
+	public function setQueue(QueueManager $queue)
+	{
+		$this->queue = $queue;
+
+		return $this;
+	}
+
+	/**
+	 * Set the IoC container instance.
+	 *
+	 * @param  \Illuminate\Container\Container  $container
+	 * @return void
+	 */
+	public function setContainer(Container $container)
+	{
+		$this->container = $container;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Mail/Message.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Message.php b/vendor/laravel/framework/src/Illuminate/Mail/Message.php
new file mode 100755
index 0000000..4085571
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Mail/Message.php
@@ -0,0 +1,295 @@
+<?php namespace Illuminate\Mail;
+
+use Swift_Image;
+use Swift_Attachment;
+
+class Message {
+
+	/**
+	 * The Swift Message instance.
+	 *
+	 * @var \Swift_Message
+	 */
+	protected $swift;
+
+	/**
+	 * Create a new message instance.
+	 *
+	 * @param  \Swift_Message  $swift
+	 * @return void
+	 */
+	public function __construct($swift)
+	{
+		$this->swift = $swift;
+	}
+
+	/**
+	 * Add a "from" address to the message.
+	 *
+	 * @param  string  $address
+	 * @param  string  $name
+	 * @return $this
+	 */
+	public function from($address, $name = null)
+	{
+		$this->swift->setFrom($address, $name);
+
+		return $this;
+	}
+
+	/**
+	 * Set the "sender" of the message.
+	 *
+	 * @param  string  $address
+	 * @param  string  $name
+	 * @return $this
+	 */
+	public function sender($address, $name = null)
+	{
+		$this->swift->setSender($address, $name);
+
+		return $this;
+	}
+
+	/**
+	 * Set the "return path" of the message.
+	 *
+	 * @param  string  $address
+	 * @return $this
+	 */
+	public function returnPath($address)
+	{
+		$this->swift->setReturnPath($address);
+
+		return $this;
+	}
+
+	/**
+	 * Add a recipient to the message.
+	 *
+	 * @param  string|array  $address
+	 * @param  string  $name
+	 * @return $this
+	 */
+	public function to($address, $name = null)
+	{
+		return $this->addAddresses($address, $name, 'To');
+	}
+
+	/**
+	 * Add a carbon copy to the message.
+	 *
+	 * @param  string  $address
+	 * @param  string  $name
+	 * @return $this
+	 */
+	public function cc($address, $name = null)
+	{
+		return $this->addAddresses($address, $name, 'Cc');
+	}
+
+	/**
+	 * Add a blind carbon copy to the message.
+	 *
+	 * @param  string  $address
+	 * @param  string  $name
+	 * @return $this
+	 */
+	public function bcc($address, $name = null)
+	{
+		return $this->addAddresses($address, $name, 'Bcc');
+	}
+
+	/**
+	 * Add a reply to address to the message.
+	 *
+	 * @param  string  $address
+	 * @param  string  $name
+	 * @return $this
+	 */
+	public function replyTo($address, $name = null)
+	{
+		return $this->addAddresses($address, $name, 'ReplyTo');
+	}
+
+	/**
+	 * Add a recipient to the message.
+	 *
+	 * @param  string|array  $address
+	 * @param  string  $name
+	 * @param  string  $type
+	 * @return $this
+	 */
+	protected function addAddresses($address, $name, $type)
+	{
+		if (is_array($address))
+		{
+			$this->swift->{"set{$type}"}($address, $name);
+		}
+		else
+		{
+			$this->swift->{"add{$type}"}($address, $name);
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Set the subject of the message.
+	 *
+	 * @param  string  $subject
+	 * @return $this
+	 */
+	public function subject($subject)
+	{
+		$this->swift->setSubject($subject);
+
+		return $this;
+	}
+
+	/**
+	 * Set the message priority level.
+	 *
+	 * @param  int  $level
+	 * @return $this
+	 */
+	public function priority($level)
+	{
+		$this->swift->setPriority($level);
+
+		return $this;
+	}
+
+	/**
+	 * Attach a file to the message.
+	 *
+	 * @param  string  $file
+	 * @param  array   $options
+	 * @return $this
+	 */
+	public function attach($file, array $options = array())
+	{
+		$attachment = $this->createAttachmentFromPath($file);
+
+		return $this->prepAttachment($attachment, $options);
+	}
+
+	/**
+	 * Create a Swift Attachment instance.
+	 *
+	 * @param  string  $file
+	 * @return \Swift_Attachment
+	 */
+	protected function createAttachmentFromPath($file)
+	{
+		return Swift_Attachment::fromPath($file);
+	}
+
+	/**
+	 * Attach in-memory data as an attachment.
+	 *
+	 * @param  string  $data
+	 * @param  string  $name
+	 * @param  array   $options
+	 * @return $this
+	 */
+	public function attachData($data, $name, array $options = array())
+	{
+		$attachment = $this->createAttachmentFromData($data, $name);
+
+		return $this->prepAttachment($attachment, $options);
+	}
+
+	/**
+	 * Create a Swift Attachment instance from data.
+	 *
+	 * @param  string  $data
+	 * @param  string  $name
+	 * @return \Swift_Attachment
+	 */
+	protected function createAttachmentFromData($data, $name)
+	{
+		return Swift_Attachment::newInstance($data, $name);
+	}
+
+	/**
+	 * Embed a file in the message and get the CID.
+	 *
+	 * @param  string  $file
+	 * @return string
+	 */
+	public function embed($file)
+	{
+		return $this->swift->embed(Swift_Image::fromPath($file));
+	}
+
+	/**
+	 * Embed in-memory data in the message and get the CID.
+	 *
+	 * @param  string  $data
+	 * @param  string  $name
+	 * @param  string  $contentType
+	 * @return string
+	 */
+	public function embedData($data, $name, $contentType = null)
+	{
+		$image = Swift_Image::newInstance($data, $name, $contentType);
+
+		return $this->swift->embed($image);
+	}
+
+	/**
+	 * Prepare and attach the given attachment.
+	 *
+	 * @param  \Swift_Attachment  $attachment
+	 * @param  array  $options
+	 * @return $this
+	 */
+	protected function prepAttachment($attachment, $options = array())
+	{
+		// First we will check for a MIME type on the message, which instructs the
+		// mail client on what type of attachment the file is so that it may be
+		// downloaded correctly by the user. The MIME option is not required.
+		if (isset($options['mime']))
+		{
+			$attachment->setContentType($options['mime']);
+		}
+
+		// If an alternative name was given as an option, we will set that on this
+		// attachment so that it will be downloaded with the desired names from
+		// the developer, otherwise the default file names will get assigned.
+		if (isset($options['as']))
+		{
+			$attachment->setFilename($options['as']);
+		}
+
+		$this->swift->attach($attachment);
+
+		return $this;
+	}
+
+	/**
+	 * Get the underlying Swift Message instance.
+	 *
+	 * @return \Swift_Message
+	 */
+	public function getSwiftMessage()
+	{
+		return $this->swift;
+	}
+
+	/**
+	 * Dynamically pass missing methods to the Swift instance.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 */
+	public function __call($method, $parameters)
+	{
+		$callable = array($this->swift, $method);
+
+		return call_user_func_array($callable, $parameters);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Mail/Transport/LogTransport.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Transport/LogTransport.php b/vendor/laravel/framework/src/Illuminate/Mail/Transport/LogTransport.php
new file mode 100644
index 0000000..1fe8136
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Mail/Transport/LogTransport.php
@@ -0,0 +1,87 @@
+<?php namespace Illuminate\Mail\Transport;
+
+use Swift_Transport;
+use Swift_Mime_Message;
+use Swift_Mime_MimeEntity;
+use Psr\Log\LoggerInterface;
+use Swift_Events_EventListener;
+
+class LogTransport implements Swift_Transport {
+
+	/**
+	 * The Logger instance.
+	 *
+	 * @var \Psr\Log\LoggerInterface
+	 */
+	protected $logger;
+
+	/**
+	 * Create a new log transport instance.
+	 *
+	 * @param  \Psr\Log\LoggerInterface  $logger
+	 * @return void
+	 */
+	public function __construct(LoggerInterface $logger)
+	{
+		$this->logger = $logger;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function isStarted()
+	{
+		return true;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function start()
+	{
+		return true;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function stop()
+	{
+		return true;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function send(Swift_Mime_Message $message, &$failedRecipients = null)
+	{
+		$this->logger->debug($this->getMimeEntityString($message));
+	}
+
+	/**
+	 * Get a loggable string out of a Swiftmailer entity.
+	 *
+	 * @param  \Swift_Mime_MimeEntity $entity
+	 * @return string
+	 */
+	protected function getMimeEntityString(Swift_Mime_MimeEntity $entity)
+	{
+		$string = (string) $entity->getHeaders().PHP_EOL.$entity->getBody();
+
+		foreach ($entity->getChildren() as $children)
+		{
+			$string .= PHP_EOL.PHP_EOL.$this->getMimeEntityString($children);
+		}
+
+		return $string;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function registerPlugin(Swift_Events_EventListener $plugin)
+	{
+		//
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Mail/Transport/MailgunTransport.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Transport/MailgunTransport.php b/vendor/laravel/framework/src/Illuminate/Mail/Transport/MailgunTransport.php
new file mode 100644
index 0000000..3b19f88
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Mail/Transport/MailgunTransport.php
@@ -0,0 +1,168 @@
+<?php namespace Illuminate\Mail\Transport;
+
+use Swift_Transport;
+use GuzzleHttp\Client;
+use Swift_Mime_Message;
+use GuzzleHttp\Post\PostFile;
+use Swift_Events_EventListener;
+
+class MailgunTransport implements Swift_Transport {
+
+	/**
+	 * The Mailgun API key.
+	 *
+	 * @var string
+	 */
+	protected $key;
+
+	/**
+	 * The Mailgun domain.
+	 *
+	 * @var string
+	 */
+	protected $domain;
+
+	/**
+	 * THe Mailgun API end-point.
+	 *
+	 * @var string
+	 */
+	protected $url;
+
+	/**
+	 * Create a new Mailgun transport instance.
+	 *
+	 * @param  string  $key
+	 * @param  string  $domain
+	 * @return void
+	 */
+	public function __construct($key, $domain)
+	{
+		$this->key = $key;
+		$this->setDomain($domain);
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function isStarted()
+	{
+		return true;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function start()
+	{
+		return true;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function stop()
+	{
+		return true;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function send(Swift_Mime_Message $message, &$failedRecipients = null)
+	{
+		$client = $this->getHttpClient();
+
+		$client->post($this->url, ['auth' => ['api', $this->key],
+			'body' => [
+				'to' => $this->getTo($message),
+				'message' => new PostFile('message', (string) $message),
+			],
+		]);
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function registerPlugin(Swift_Events_EventListener $plugin)
+	{
+		//
+	}
+
+	/**
+	 * Get the "to" payload field for the API request.
+	 *
+	 * @param  \Swift_Mime_Message  $message
+	 * @return array
+	 */
+	protected function getTo(Swift_Mime_Message $message)
+	{
+		$formatted = [];
+
+		$contacts = array_merge(
+			(array) $message->getTo(), (array) $message->getCc(), (array) $message->getBcc()
+		);
+
+		foreach ($contacts as $address => $display)
+		{
+			$formatted[] = $display ? $display." <$address>" : $address;
+		}
+
+		return implode(',', $formatted);
+	}
+
+	/**
+	 * Get a new HTTP client instance.
+	 *
+	 * @return \GuzzleHttp\Client
+	 */
+	protected function getHttpClient()
+	{
+		return new Client;
+	}
+
+	/**
+	 * Get the API key being used by the transport.
+	 *
+	 * @return string
+	 */
+	public function getKey()
+	{
+		return $this->key;
+	}
+
+	/**
+	 * Set the API key being used by the transport.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function setKey($key)
+	{
+		return $this->key = $key;
+	}
+
+	/**
+	 * Get the domain being used by the transport.
+	 *
+	 * @return string
+	 */
+	public function getDomain()
+	{
+		return $this->domain;
+	}
+
+	/**
+	 * Set the domain being used by the transport.
+	 *
+	 * @param  string  $domain
+	 * @return void
+	 */
+	public function setDomain($domain)
+	{
+		$this->url = 'https://api.mailgun.net/v2/'.$domain.'/messages.mime';
+
+		return $this->domain = $domain;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Mail/Transport/MandrillTransport.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Transport/MandrillTransport.php b/vendor/laravel/framework/src/Illuminate/Mail/Transport/MandrillTransport.php
new file mode 100644
index 0000000..daa823b
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Mail/Transport/MandrillTransport.php
@@ -0,0 +1,107 @@
+<?php namespace Illuminate\Mail\Transport;
+
+use Swift_Transport;
+use GuzzleHttp\Client;
+use Swift_Mime_Message;
+use Swift_Events_EventListener;
+
+class MandrillTransport implements Swift_Transport {
+
+	/**
+	 * The Mandrill API key.
+	 *
+	 * @var string
+	 */
+	protected $key;
+
+	/**
+	 * Create a new Mandrill transport instance.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function __construct($key)
+	{
+		$this->key = $key;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function isStarted()
+	{
+		return true;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function start()
+	{
+		return true;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function stop()
+	{
+		return true;
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function send(Swift_Mime_Message $message, &$failedRecipients = null)
+	{
+		$client = $this->getHttpClient();
+
+		$client->post('https://mandrillapp.com/api/1.0/messages/send-raw.json', [
+			'body' => [
+				'key' => $this->key,
+				'raw_message' => (string) $message,
+				'async' => false,
+			],
+		]);
+	}
+
+	/**
+	 * {@inheritdoc}
+	 */
+	public function registerPlugin(Swift_Events_EventListener $plugin)
+	{
+		//
+	}
+
+	/**
+	 * Get a new HTTP client instance.
+	 *
+	 * @return \GuzzleHttp\Client
+	 */
+	protected function getHttpClient()
+	{
+		return new Client;
+	}
+
+	/**
+	 * Get the API key being used by the transport.
+	 *
+	 * @return string
+	 */
+	public function getKey()
+	{
+		return $this->key;
+	}
+
+	/**
+	 * Set the API key being used by the transport.
+	 *
+	 * @param  string  $key
+	 * @return void
+	 */
+	public function setKey($key)
+	{
+		return $this->key = $key;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Mail/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Mail/composer.json b/vendor/laravel/framework/src/Illuminate/Mail/composer.json
new file mode 100755
index 0000000..0fe7384
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Mail/composer.json
@@ -0,0 +1,33 @@
+{
+    "name": "illuminate/mail",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/container": "4.2.*",
+        "illuminate/log": "4.2.*",
+        "illuminate/support": "4.2.*",
+        "illuminate/view": "4.2.*",
+        "swiftmailer/swiftmailer": "~5.1"
+    },
+    "require-dev": {
+        "illuminate/queue": "4.2.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Mail": ""
+        }
+    },
+    "target-dir": "Illuminate/Mail",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Pagination/BootstrapPresenter.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/BootstrapPresenter.php b/vendor/laravel/framework/src/Illuminate/Pagination/BootstrapPresenter.php
new file mode 100644
index 0000000..dc9c7c2
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Pagination/BootstrapPresenter.php
@@ -0,0 +1,42 @@
+<?php namespace Illuminate\Pagination;
+
+class BootstrapPresenter extends Presenter {
+
+	/**
+	 * Get HTML wrapper for a page link.
+	 *
+	 * @param  string  $url
+	 * @param  int  $page
+	 * @param  string  $rel
+	 * @return string
+	 */
+	public function getPageLinkWrapper($url, $page, $rel = null)
+	{
+		$rel = is_null($rel) ? '' : ' rel="'.$rel.'"';
+
+		return '<li><a href="'.$url.'"'.$rel.'>'.$page.'</a></li>';
+	}
+
+	/**
+	 * Get HTML wrapper for disabled text.
+	 *
+	 * @param  string  $text
+	 * @return string
+	 */
+	public function getDisabledTextWrapper($text)
+	{
+		return '<li class="disabled"><span>'.$text.'</span></li>';
+	}
+
+	/**
+	 * Get HTML wrapper for active text.
+	 *
+	 * @param  string  $text
+	 * @return string
+	 */
+	public function getActivePageWrapper($text)
+	{
+		return '<li class="active"><span>'.$text.'</span></li>';
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Pagination/Factory.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/Factory.php b/vendor/laravel/framework/src/Illuminate/Pagination/Factory.php
new file mode 100755
index 0000000..4026495
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Pagination/Factory.php
@@ -0,0 +1,289 @@
+<?php namespace Illuminate\Pagination;
+
+use Illuminate\Http\Request;
+use Illuminate\View\Factory as ViewFactory;
+use Symfony\Component\Translation\TranslatorInterface;
+
+class Factory {
+
+	/**
+	 * The request instance.
+	 *
+	 * @var \Symfony\Component\HttpFoundation\Request
+	 */
+	protected $request;
+
+	/**
+	 * The view factory instance.
+	 *
+	 * @var \Illuminate\View\Factory
+	 */
+	protected $view;
+
+	/**
+	 * The translator implementation.
+	 *
+	 * @var \Symfony\Component\Translation\TranslatorInterface
+	 */
+	protected $trans;
+
+	/**
+	 * The name of the pagination view.
+	 *
+	 * @var string
+	 */
+	protected $viewName;
+
+	/**
+	 * The number of the current page.
+	 *
+	 * @var int
+	 */
+	protected $currentPage;
+
+	/**
+	 * The locale to be used by the translator.
+	 *
+	 * @var string
+	 */
+	protected $locale;
+
+	/**
+	 * The base URL in use by the paginator.
+	 *
+	 * @var string
+	 */
+	protected $baseUrl;
+
+	/**
+	 * The input parameter used for the current page.
+	 *
+	 * @var string
+	 */
+	protected $pageName;
+
+	/**
+	 * Create a new pagination factory.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @param  \Illuminate\View\Factory  $view
+	 * @param  \Symfony\Component\Translation\TranslatorInterface  $trans
+	 * @param  string  $pageName
+	 * @return void
+	 */
+	public function __construct(Request $request, ViewFactory $view, TranslatorInterface $trans, $pageName = 'page')
+	{
+		$this->view = $view;
+		$this->trans = $trans;
+		$this->request = $request;
+		$this->pageName = $pageName;
+		$this->setupPaginationEnvironment();
+	}
+
+	/**
+	 * Setup the pagination environment.
+	 *
+	 * @return void
+	 */
+	protected function setupPaginationEnvironment()
+	{
+		$this->view->addNamespace('pagination', __DIR__.'/views');
+	}
+
+	/**
+	 * Get a new paginator instance.
+	 *
+	 * @param  array  $items
+	 * @param  int    $total
+	 * @param  int|null  $perPage
+	 * @return \Illuminate\Pagination\Paginator
+	 */
+	public function make(array $items, $total, $perPage = null)
+	{
+		$paginator = new Paginator($this, $items, $total, $perPage);
+
+		return $paginator->setupPaginationContext();
+	}
+
+	/**
+	 * Get the pagination view.
+	 *
+	 * @param  \Illuminate\Pagination\Paginator  $paginator
+	 * @param  string  $view
+	 * @return \Illuminate\View\View
+	 */
+	public function getPaginationView(Paginator $paginator, $view = null)
+	{
+		$data = array('environment' => $this, 'paginator' => $paginator);
+
+		return $this->view->make($this->getViewName($view), $data);
+	}
+
+	/**
+	 * Get the number of the current page.
+	 *
+	 * @return int
+	 */
+	public function getCurrentPage()
+	{
+		$page = (int) $this->currentPage ?: $this->request->input($this->pageName, 1);
+
+		if ($page < 1 || filter_var($page, FILTER_VALIDATE_INT) === false)
+		{
+			return 1;
+		}
+
+		return $page;
+	}
+
+	/**
+	 * Set the number of the current page.
+	 *
+	 * @param  int  $number
+	 * @return void
+	 */
+	public function setCurrentPage($number)
+	{
+		$this->currentPage = $number;
+	}
+
+	/**
+	 * Get the root URL for the request.
+	 *
+	 * @return string
+	 */
+	public function getCurrentUrl()
+	{
+		return $this->baseUrl ?: $this->request->url();
+	}
+
+	/**
+	 * Set the base URL in use by the paginator.
+	 *
+	 * @param  string  $baseUrl
+	 * @return void
+	 */
+	public function setBaseUrl($baseUrl)
+	{
+		$this->baseUrl = $baseUrl;
+	}
+
+	/**
+	 * Set the input page parameter name used by the paginator.
+	 *
+	 * @param  string  $pageName
+	 * @return void
+	 */
+	public function setPageName($pageName)
+	{
+		$this->pageName = $pageName;
+	}
+
+	/**
+	 * Get the input page parameter name used by the paginator.
+	 *
+	 * @return string
+	 */
+	public function getPageName()
+	{
+		return $this->pageName;
+	}
+
+	/**
+	 * Get the name of the pagination view.
+	 *
+	 * @param  string  $view
+	 * @return string
+	 */
+	public function getViewName($view = null)
+	{
+		if ( ! is_null($view)) return $view;
+
+		return $this->viewName ?: 'pagination::slider';
+	}
+
+	/**
+	 * Set the name of the pagination view.
+	 *
+	 * @param  string  $viewName
+	 * @return void
+	 */
+	public function setViewName($viewName)
+	{
+		$this->viewName = $viewName;
+	}
+
+	/**
+	 * Get the locale of the paginator.
+	 *
+	 * @return string
+	 */
+	public function getLocale()
+	{
+		return $this->locale;
+	}
+
+	/**
+	 * Set the locale of the paginator.
+	 *
+	 * @param  string  $locale
+	 * @return void
+	 */
+	public function setLocale($locale)
+	{
+		$this->locale = $locale;
+	}
+
+	/**
+	 * Get the active request instance.
+	 *
+	 * @return \Symfony\Component\HttpFoundation\Request
+	 */
+	public function getRequest()
+	{
+		return $this->request;
+	}
+
+	/**
+	 * Set the active request instance.
+	 *
+	 * @param  \Symfony\Component\HttpFoundation\Request  $request
+	 * @return void
+	 */
+	public function setRequest(Request $request)
+	{
+		$this->request = $request;
+	}
+
+	/**
+	 * Get the current view factory.
+	 *
+	 * @return \Illuminate\View\Factory
+	 */
+	public function getViewFactory()
+	{
+		return $this->view;
+	}
+
+	/**
+	 * Set the current view factory.
+	 *
+	 * @param  \Illuminate\View\Factory  $view
+	 * @return void
+	 */
+	public function setViewFactory(ViewFactory $view)
+	{
+		$this->view = $view;
+	}
+
+	/**
+	 * Get the translator instance.
+	 *
+	 * @return \Symfony\Component\Translation\TranslatorInterface
+	 */
+	public function getTranslator()
+	{
+		return $this->trans;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Pagination/PaginationServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/PaginationServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Pagination/PaginationServiceProvider.php
new file mode 100755
index 0000000..dfec6df
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Pagination/PaginationServiceProvider.php
@@ -0,0 +1,43 @@
+<?php namespace Illuminate\Pagination;
+
+use Illuminate\Support\ServiceProvider;
+
+class PaginationServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->app->bindShared('paginator', function($app)
+		{
+			$paginator = new Factory($app['request'], $app['view'], $app['translator']);
+
+			$paginator->setViewName($app['config']['view.pagination']);
+
+			$app->refresh('request', $paginator, 'setRequest');
+
+			return $paginator;
+		});
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('paginator');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Pagination/Paginator.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/Paginator.php b/vendor/laravel/framework/src/Illuminate/Pagination/Paginator.php
new file mode 100755
index 0000000..7c1f8b7
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Pagination/Paginator.php
@@ -0,0 +1,544 @@
+<?php namespace Illuminate\Pagination;
+
+use Countable;
+use ArrayAccess;
+use ArrayIterator;
+use IteratorAggregate;
+use Illuminate\Support\Collection;
+use Illuminate\Support\Contracts\JsonableInterface;
+use Illuminate\Support\Contracts\ArrayableInterface;
+
+class Paginator implements ArrayableInterface, ArrayAccess, Countable, IteratorAggregate, JsonableInterface {
+
+	/**
+	 * The pagination factory.
+	 *
+	 * @var \Illuminate\Pagination\Factory
+	 */
+	protected $factory;
+
+	/**
+	 * The items being paginated.
+	 *
+	 * @var array
+	 */
+	protected $items;
+
+	/**
+	 * The total number of items.
+	 *
+	 * @var int
+	 */
+	protected $total;
+
+	/**
+	 * Indicates if a pagination doing "quick" pagination has more items.
+	 *
+	 * @var bool
+	 */
+	protected $hasMore;
+
+	/**
+	 * The amount of items to show per page.
+	 *
+	 * @var int
+	 */
+	protected $perPage;
+
+	/**
+	 * Get the current page for the request.
+	 *
+	 * @var int
+	 */
+	protected $currentPage;
+
+	/**
+	 * Get the last available page number.
+	 *
+	 * @return int
+	 */
+	protected $lastPage;
+
+	/**
+	 * The number of the first item in this range.
+	 *
+	 * @var int
+	 */
+	protected $from;
+
+	/**
+	 * The number of the last item in this range.
+	 *
+	 * @var int
+	 */
+	protected $to;
+
+	/**
+	 * All of the additional query string values.
+	 *
+	 * @var array
+	 */
+	protected $query = array();
+
+	/**
+	 * The fragment to be appended to all URLs.
+	 *
+	 * @var string
+	 */
+	protected $fragment;
+
+	/**
+	 * Create a new Paginator instance.
+	 *
+	 * @param  \Illuminate\Pagination\Factory  $factory
+	 * @param  array     $items
+	 * @param  int       $total
+	 * @param  int|null  $perPage
+	 * @return void
+	 */
+	public function __construct(Factory $factory, array $items, $total, $perPage = null)
+	{
+		$this->factory = $factory;
+
+		if (is_null($perPage))
+		{
+			$this->perPage = (int) $total;
+			$this->hasMore = count($items) > $this->perPage;
+			$this->items = array_slice($items, 0, $this->perPage);
+		}
+		else
+		{
+			$this->items = $items;
+			$this->total = (int) $total;
+			$this->perPage = (int) $perPage;
+		}
+	}
+
+	/**
+	 * Setup the pagination context (current and last page).
+	 *
+	 * @return $this
+	 */
+	public function setupPaginationContext()
+	{
+		$this->calculateCurrentAndLastPages();
+
+		$this->calculateItemRanges();
+
+		return $this;
+	}
+
+	/**
+	 * Calculate the current and last pages for this instance.
+	 *
+	 * @return void
+	 */
+	protected function calculateCurrentAndLastPages()
+	{
+		if ($this->isQuickPaginating())
+		{
+			$this->currentPage = $this->factory->getCurrentPage();
+
+			$this->lastPage = $this->hasMore ? $this->currentPage + 1 : $this->currentPage;
+		}
+		else
+		{
+			$this->lastPage = max((int) ceil($this->total / $this->perPage), 1);
+
+			$this->currentPage = $this->calculateCurrentPage($this->lastPage);
+		}
+	}
+
+	/**
+	 * Calculate the first and last item number for this instance.
+	 *
+	 * @return void
+	 */
+	protected function calculateItemRanges()
+	{
+		$this->from = $this->total ? ($this->currentPage - 1) * $this->perPage + 1 : 0;
+
+		$this->to = min($this->total, $this->currentPage * $this->perPage);
+	}
+
+	/**
+	 * Get the current page for the request.
+	 *
+	 * @param  int  $lastPage
+	 * @return int
+	 */
+	protected function calculateCurrentPage($lastPage)
+	{
+		$page = $this->factory->getCurrentPage();
+
+		// The page number will get validated and adjusted if it either less than one
+		// or greater than the last page available based on the count of the given
+		// items array. If it's greater than the last, we'll give back the last.
+		if (is_numeric($page) && $page > $lastPage)
+		{
+			return $lastPage > 0 ? $lastPage : 1;
+		}
+
+		return $this->isValidPageNumber($page) ? (int) $page : 1;
+	}
+
+	/**
+	 * Determine if the given value is a valid page number.
+	 *
+	 * @param  int  $page
+	 * @return bool
+	 */
+	protected function isValidPageNumber($page)
+	{
+		return $page >= 1 && filter_var($page, FILTER_VALIDATE_INT) !== false;
+	}
+
+	/**
+	 * Get the pagination links view.
+	 *
+	 * @param  string  $view
+	 * @return \Illuminate\View\View
+	 */
+	public function links($view = null)
+	{
+		return $this->factory->getPaginationView($this, $view);
+	}
+
+	/**
+	 * Get a URL for a given page number.
+	 *
+	 * @param  int  $page
+	 * @return string
+	 */
+	public function getUrl($page)
+	{
+		$parameters = array(
+			$this->factory->getPageName() => $page,
+		);
+
+		// If we have any extra query string key / value pairs that need to be added
+		// onto the URL, we will put them in query string form and then attach it
+		// to the URL. This allows for extra information like sortings storage.
+		if (count($this->query) > 0)
+		{
+			$parameters = array_merge($this->query, $parameters);
+		}
+
+		$fragment = $this->buildFragment();
+
+		return $this->factory->getCurrentUrl().'?'.http_build_query($parameters, null, '&').$fragment;
+	}
+
+	/**
+	 * Get / set the URL fragment to be appended to URLs.
+	 *
+	 * @param  string|null  $fragment
+	 * @return $this|string
+	 */
+	public function fragment($fragment = null)
+	{
+		if (is_null($fragment)) return $this->fragment;
+
+		$this->fragment = $fragment;
+
+		return $this;
+	}
+
+	/**
+	 * Build the full fragment portion of a URL.
+	 *
+	 * @return string
+	 */
+	protected function buildFragment()
+	{
+		return $this->fragment ? '#'.$this->fragment : '';
+	}
+
+	/**
+	 * Add a query string value to the paginator.
+	 *
+	 * @param  string  $key
+	 * @param  string  $value
+	 * @return $this
+	 */
+	public function appends($key, $value = null)
+	{
+		if (is_array($key)) return $this->appendArray($key);
+
+		return $this->addQuery($key, $value);
+	}
+
+	/**
+	 * Add an array of query string values.
+	 *
+	 * @param  array  $keys
+	 * @return $this
+	 */
+	protected function appendArray(array $keys)
+	{
+		foreach ($keys as $key => $value)
+		{
+			$this->addQuery($key, $value);
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Add a query string value to the paginator.
+	 *
+	 * @param  string  $key
+	 * @param  string  $value
+	 * @return $this
+	 */
+	public function addQuery($key, $value)
+	{
+		if ($key !== $this->factory->getPageName())
+		{
+			$this->query[$key] = $value;
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Determine if the paginator is doing "quick" pagination.
+	 *
+	 * @return bool
+	 */
+	public function isQuickPaginating()
+	{
+		return is_null($this->total);
+	}
+
+	/**
+	 * Get the current page for the request.
+	 *
+	 * @param  int|null  $total
+	 * @return int
+	 */
+	public function getCurrentPage($total = null)
+	{
+		if (is_null($total))
+		{
+			return $this->currentPage;
+		}
+
+		return min($this->currentPage, (int) ceil($total / $this->perPage));
+	}
+
+	/**
+	 * Get the last page that should be available.
+	 *
+	 * @return int
+	 */
+	public function getLastPage()
+	{
+		return $this->lastPage;
+	}
+
+	/**
+	 * Get the number of the first item on the paginator.
+	 *
+	 * @return int
+	 */
+	public function getFrom()
+	{
+		return $this->from;
+	}
+
+	/**
+	 * Get the number of the last item on the paginator.
+	 *
+	 * @return int
+	 */
+	public function getTo()
+	{
+		return $this->to;
+	}
+
+	/**
+	 * Get the number of items to be displayed per page.
+	 *
+	 * @return int
+	 */
+	public function getPerPage()
+	{
+		return $this->perPage;
+	}
+
+	/**
+	 * Get a collection instance containing the items.
+	 *
+	 * @return \Illuminate\Support\Collection
+	 */
+	public function getCollection()
+	{
+		return new Collection($this->items);
+	}
+
+	/**
+	 * Get the items being paginated.
+	 *
+	 * @return array
+	 */
+	public function getItems()
+	{
+		return $this->items;
+	}
+
+	/**
+	 * Set the items being paginated.
+	 *
+	 * @param  mixed  $items
+	 * @return void
+	 */
+	public function setItems($items)
+	{
+		$this->items = $items;
+	}
+
+	/**
+	 * Get the total number of items in the collection.
+	 *
+	 * @return int
+	 */
+	public function getTotal()
+	{
+		return $this->total;
+	}
+
+	/**
+	* Set the base URL in use by the paginator.
+	*
+	* @param  string  $baseUrl
+	* @return void
+	*/
+	public function setBaseUrl($baseUrl)
+	{
+		$this->factory->setBaseUrl($baseUrl);
+	}
+
+	/**
+	 * Get the pagination factory.
+	 *
+	 * @return \Illuminate\Pagination\Factory
+	 */
+	public function getFactory()
+	{
+		return $this->factory;
+	}
+
+	/**
+	 * Get an iterator for the items.
+	 *
+	 * @return \ArrayIterator
+	 */
+	public function getIterator()
+	{
+		return new ArrayIterator($this->items);
+	}
+
+	/**
+	 * Determine if the list of items is empty or not.
+	 *
+	 * @return bool
+	 */
+	public function isEmpty()
+	{
+		return empty($this->items);
+	}
+
+	/**
+	 * Get the number of items for the current page.
+	 *
+	 * @return int
+	 */
+	public function count()
+	{
+		return count($this->items);
+	}
+
+	/**
+	 * Determine if the given item exists.
+	 *
+	 * @param  mixed  $key
+	 * @return bool
+	 */
+	public function offsetExists($key)
+	{
+		return array_key_exists($key, $this->items);
+	}
+
+	/**
+	 * Get the item at the given offset.
+	 *
+	 * @param  mixed  $key
+	 * @return mixed
+	 */
+	public function offsetGet($key)
+	{
+		return $this->items[$key];
+	}
+
+	/**
+	 * Set the item at the given offset.
+	 *
+	 * @param  mixed  $key
+	 * @param  mixed  $value
+	 * @return void
+	 */
+	public function offsetSet($key, $value)
+	{
+		$this->items[$key] = $value;
+	}
+
+	/**
+	 * Unset the item at the given key.
+	 *
+	 * @param  mixed  $key
+	 * @return void
+	 */
+	public function offsetUnset($key)
+	{
+		unset($this->items[$key]);
+	}
+
+	/**
+	 * Get the instance as an array.
+	 *
+	 * @return array
+	 */
+	public function toArray()
+	{
+		return array(
+			'total' => $this->total, 'per_page' => $this->perPage,
+			'current_page' => $this->currentPage, 'last_page' => $this->lastPage,
+			'from' => $this->from, 'to' => $this->to, 'data' => $this->getCollection()->toArray(),
+		);
+	}
+
+	/**
+	 * Convert the object to its JSON representation.
+	 *
+	 * @param  int  $options
+	 * @return string
+	 */
+	public function toJson($options = 0)
+	{
+		return json_encode($this->toArray(), $options);
+	}
+
+	/**
+	 * Call a method on the underlying Collection
+	 *
+	 * @param  string  $method
+	 * @param  array   $arguments
+	 * @return mixed
+	 */
+	public function __call($method, $arguments)
+	{
+		return call_user_func_array(array($this->getCollection(), $method), $arguments);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Pagination/Presenter.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/Presenter.php b/vendor/laravel/framework/src/Illuminate/Pagination/Presenter.php
new file mode 100755
index 0000000..ea77be8
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Pagination/Presenter.php
@@ -0,0 +1,277 @@
+<?php namespace Illuminate\Pagination;
+
+abstract class Presenter {
+
+	/**
+	 * The paginator instance being rendered.
+	 *
+	 * @var \Illuminate\Pagination\Paginator
+	 */
+	protected $paginator;
+
+	/**
+	 * The current page of the paginator.
+	 *
+	 * @var int
+	 */
+	protected $currentPage;
+
+	/**
+	 * The last available page of the paginator.
+	 *
+	 * @var int
+	 */
+	protected $lastPage;
+
+	/**
+	 * Create a new Presenter instance.
+	 *
+	 * @param  \Illuminate\Pagination\Paginator  $paginator
+	 * @return void
+	 */
+	public function __construct(Paginator $paginator)
+	{
+		$this->paginator = $paginator;
+		$this->lastPage = $this->paginator->getLastPage();
+		$this->currentPage = $this->paginator->getCurrentPage();
+	}
+
+	/**
+	 * Get HTML wrapper for a page link.
+	 *
+	 * @param  string  $url
+	 * @param  int  $page
+	 * @param  string  $rel
+	 * @return string
+	 */
+	abstract public function getPageLinkWrapper($url, $page, $rel = null);
+
+	/**
+	 * Get HTML wrapper for disabled text.
+	 *
+	 * @param  string  $text
+	 * @return string
+	 */
+	abstract public function getDisabledTextWrapper($text);
+
+	/**
+	 * Get HTML wrapper for active text.
+	 *
+	 * @param  string  $text
+	 * @return string
+	 */
+	abstract public function getActivePageWrapper($text);
+
+	/**
+	 * Render the Pagination contents.
+	 *
+	 * @return string
+	 */
+	public function render()
+	{
+		// The hard-coded thirteen represents the minimum number of pages we need to
+		// be able to create a sliding page window. If we have less than that, we
+		// will just render a simple range of page links insteadof the sliding.
+		if ($this->lastPage < 13)
+		{
+			$content = $this->getPageRange(1, $this->lastPage);
+		}
+		else
+		{
+			$content = $this->getPageSlider();
+		}
+
+		return $this->getPrevious().$content.$this->getNext();
+	}
+
+	/**
+	 * Create a range of pagination links.
+	 *
+	 * @param  int  $start
+	 * @param  int  $end
+	 * @return string
+	 */
+	public function getPageRange($start, $end)
+	{
+		$pages = array();
+
+		for ($page = $start; $page <= $end; $page++)
+		{
+			// If the current page is equal to the page we're iterating on, we will create a
+			// disabled link for that page. Otherwise, we can create a typical active one
+			// for the link. We will use this implementing class's methods to get HTML.
+			if ($this->currentPage == $page)
+			{
+				$pages[] = $this->getActivePageWrapper($page);
+			}
+			else
+			{
+				$pages[] = $this->getLink($page);
+			}
+		}
+
+		return implode('', $pages);
+	}
+
+	/**
+	 * Create a pagination slider link window.
+	 *
+	 * @return string
+	 */
+	protected function getPageSlider()
+	{
+		$window = 6;
+
+		// If the current page is very close to the beginning of the page range, we will
+		// just render the beginning of the page range, followed by the last 2 of the
+		// links in this list, since we will not have room to create a full slider.
+		if ($this->currentPage <= $window)
+		{
+			$ending = $this->getFinish();
+
+			return $this->getPageRange(1, $window + 2).$ending;
+		}
+
+		// If the current page is close to the ending of the page range we will just get
+		// this first couple pages, followed by a larger window of these ending pages
+		// since we're too close to the end of the list to create a full on slider.
+		elseif ($this->currentPage >= $this->lastPage - $window)
+		{
+			$start = $this->lastPage - 8;
+
+			$content = $this->getPageRange($start, $this->lastPage);
+
+			return $this->getStart().$content;
+		}
+
+		// If we have enough room on both sides of the current page to build a slider we
+		// will surround it with both the beginning and ending caps, with this window
+		// of pages in the middle providing a Google style sliding paginator setup.
+		else
+		{
+			$content = $this->getAdjacentRange();
+
+			return $this->getStart().$content.$this->getFinish();
+		}
+	}
+
+	/**
+	 * Get the page range for the current page window.
+	 *
+	 * @return string
+	 */
+	public function getAdjacentRange()
+	{
+		return $this->getPageRange($this->currentPage - 3, $this->currentPage + 3);
+	}
+
+	/**
+	 * Create the beginning leader of a pagination slider.
+	 *
+	 * @return string
+	 */
+	public function getStart()
+	{
+		return $this->getPageRange(1, 2).$this->getDots();
+	}
+
+	/**
+	 * Create the ending cap of a pagination slider.
+	 *
+	 * @return string
+	 */
+	public function getFinish()
+	{
+		$content = $this->getPageRange($this->lastPage - 1, $this->lastPage);
+
+		return $this->getDots().$content;
+	}
+
+	/**
+	 * Get the previous page pagination element.
+	 *
+	 * @param  string  $text
+	 * @return string
+	 */
+	public function getPrevious($text = '&laquo;')
+	{
+		// If the current page is less than or equal to one, it means we can't go any
+		// further back in the pages, so we will render a disabled previous button
+		// when that is the case. Otherwise, we will give it an active "status".
+		if ($this->currentPage <= 1)
+		{
+			return $this->getDisabledTextWrapper($text);
+		}
+
+		$url = $this->paginator->getUrl($this->currentPage - 1);
+
+		return $this->getPageLinkWrapper($url, $text, 'prev');
+	}
+
+	/**
+	 * Get the next page pagination element.
+	 *
+	 * @param  string  $text
+	 * @return string
+	 */
+	public function getNext($text = '&raquo;')
+	{
+		// If the current page is greater than or equal to the last page, it means we
+		// can't go any further into the pages, as we're already on this last page
+		// that is available, so we will make it the "next" link style disabled.
+		if ($this->currentPage >= $this->lastPage)
+		{
+			return $this->getDisabledTextWrapper($text);
+		}
+
+		$url = $this->paginator->getUrl($this->currentPage + 1);
+
+		return $this->getPageLinkWrapper($url, $text, 'next');
+	}
+
+	/**
+	 * Get a pagination "dot" element.
+	 *
+	 * @return string
+	 */
+	public function getDots()
+	{
+		return $this->getDisabledTextWrapper("...");
+	}
+
+	/**
+	 * Create a pagination slider link.
+	 *
+	 * @param  mixed   $page
+	 * @return string
+	 */
+	public function getLink($page)
+	{
+		$url = $this->paginator->getUrl($page);
+
+		return $this->getPageLinkWrapper($url, $page);
+	}
+
+	/**
+	 * Set the value of the current page.
+	 *
+	 * @param  int   $page
+	 * @return void
+	 */
+	public function setCurrentPage($page)
+	{
+		$this->currentPage = $page;
+	}
+
+	/**
+	 * Set the value of the last page.
+	 *
+	 * @param  int   $page
+	 * @return void
+	 */
+	public function setLastPage($page)
+	{
+		$this->lastPage = $page;
+	}
+
+}


[17/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Grammar.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Grammar.php b/vendor/laravel/framework/src/Illuminate/Database/Grammar.php
new file mode 100755
index 0000000..d7ed02b
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Grammar.php
@@ -0,0 +1,179 @@
+<?php namespace Illuminate\Database;
+
+abstract class Grammar {
+
+	/**
+	 * The grammar table prefix.
+	 *
+	 * @var string
+	 */
+	protected $tablePrefix = '';
+
+	/**
+	 * Wrap an array of values.
+	 *
+	 * @param  array  $values
+	 * @return array
+	 */
+	public function wrapArray(array $values)
+	{
+		return array_map(array($this, 'wrap'), $values);
+	}
+
+	/**
+	 * Wrap a table in keyword identifiers.
+	 *
+	 * @param  string  $table
+	 * @return string
+	 */
+	public function wrapTable($table)
+	{
+		if ($this->isExpression($table)) return $this->getValue($table);
+
+		return $this->wrap($this->tablePrefix.$table);
+	}
+
+	/**
+	 * Wrap a value in keyword identifiers.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	public function wrap($value)
+	{
+		if ($this->isExpression($value)) return $this->getValue($value);
+
+		// If the value being wrapped has a column alias we will need to separate out
+		// the pieces so we can wrap each of the segments of the expression on it
+		// own, and then joins them both back together with the "as" connector.
+		if (strpos(strtolower($value), ' as ') !== false)
+		{
+			$segments = explode(' ', $value);
+
+			return $this->wrap($segments[0]).' as '.$this->wrapValue($segments[2]);
+		}
+
+		$wrapped = array();
+
+		$segments = explode('.', $value);
+
+		// If the value is not an aliased table expression, we'll just wrap it like
+		// normal, so if there is more than one segment, we will wrap the first
+		// segments as if it was a table and the rest as just regular values.
+		foreach ($segments as $key => $segment)
+		{
+			if ($key == 0 && count($segments) > 1)
+			{
+				$wrapped[] = $this->wrapTable($segment);
+			}
+			else
+			{
+				$wrapped[] = $this->wrapValue($segment);
+			}
+		}
+
+		return implode('.', $wrapped);
+	}
+
+	/**
+	 * Wrap a single string in keyword identifiers.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected function wrapValue($value)
+	{
+		if ($value === '*') return $value;
+
+		return '"'.str_replace('"', '""', $value).'"';
+	}
+
+	/**
+	 * Convert an array of column names into a delimited string.
+	 *
+	 * @param  array   $columns
+	 * @return string
+	 */
+	public function columnize(array $columns)
+	{
+		return implode(', ', array_map(array($this, 'wrap'), $columns));
+	}
+
+	/**
+	 * Create query parameter place-holders for an array.
+	 *
+	 * @param  array   $values
+	 * @return string
+	 */
+	public function parameterize(array $values)
+	{
+		return implode(', ', array_map(array($this, 'parameter'), $values));
+	}
+
+	/**
+	 * Get the appropriate query parameter place-holder for a value.
+	 *
+	 * @param  mixed   $value
+	 * @return string
+	 */
+	public function parameter($value)
+	{
+		return $this->isExpression($value) ? $this->getValue($value) : '?';
+	}
+
+	/**
+	 * Get the value of a raw expression.
+	 *
+	 * @param  \Illuminate\Database\Query\Expression  $expression
+	 * @return string
+	 */
+	public function getValue($expression)
+	{
+		return $expression->getValue();
+	}
+
+	/**
+	 * Determine if the given value is a raw expression.
+	 *
+	 * @param  mixed  $value
+	 * @return bool
+	 */
+	public function isExpression($value)
+	{
+		return $value instanceof Query\Expression;
+	}
+
+	/**
+	 * Get the format for database stored dates.
+	 *
+	 * @return string
+	 */
+	public function getDateFormat()
+	{
+		return 'Y-m-d H:i:s';
+	}
+
+	/**
+	 * Get the grammar's table prefix.
+	 *
+	 * @return string
+	 */
+	public function getTablePrefix()
+	{
+		return $this->tablePrefix;
+	}
+
+	/**
+	 * Set the grammar's table prefix.
+	 *
+	 * @param  string  $prefix
+	 * @return $this
+	 */
+	public function setTablePrefix($prefix)
+	{
+		$this->tablePrefix = $prefix;
+
+		return $this;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/MigrationServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/MigrationServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Database/MigrationServiceProvider.php
new file mode 100755
index 0000000..f7f0fcc
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/MigrationServiceProvider.php
@@ -0,0 +1,217 @@
+<?php namespace Illuminate\Database;
+
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Database\Migrations\Migrator;
+use Illuminate\Database\Migrations\MigrationCreator;
+use Illuminate\Database\Console\Migrations\ResetCommand;
+use Illuminate\Database\Console\Migrations\RefreshCommand;
+use Illuminate\Database\Console\Migrations\InstallCommand;
+use Illuminate\Database\Console\Migrations\MigrateCommand;
+use Illuminate\Database\Console\Migrations\RollbackCommand;
+use Illuminate\Database\Console\Migrations\MigrateMakeCommand;
+use Illuminate\Database\Migrations\DatabaseMigrationRepository;
+
+class MigrationServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->registerRepository();
+
+		// Once we have registered the migrator instance we will go ahead and register
+		// all of the migration related commands that are used by the "Artisan" CLI
+		// so that they may be easily accessed for registering with the consoles.
+		$this->registerMigrator();
+
+		$this->registerCommands();
+	}
+
+	/**
+	 * Register the migration repository service.
+	 *
+	 * @return void
+	 */
+	protected function registerRepository()
+	{
+		$this->app->bindShared('migration.repository', function($app)
+		{
+			$table = $app['config']['database.migrations'];
+
+			return new DatabaseMigrationRepository($app['db'], $table);
+		});
+	}
+
+	/**
+	 * Register the migrator service.
+	 *
+	 * @return void
+	 */
+	protected function registerMigrator()
+	{
+		// The migrator is responsible for actually running and rollback the migration
+		// files in the application. We'll pass in our database connection resolver
+		// so the migrator can resolve any of these connections when it needs to.
+		$this->app->bindShared('migrator', function($app)
+		{
+			$repository = $app['migration.repository'];
+
+			return new Migrator($repository, $app['db'], $app['files']);
+		});
+	}
+
+	/**
+	 * Register all of the migration commands.
+	 *
+	 * @return void
+	 */
+	protected function registerCommands()
+	{
+		$commands = array('Migrate', 'Rollback', 'Reset', 'Refresh', 'Install', 'Make');
+
+		// We'll simply spin through the list of commands that are migration related
+		// and register each one of them with an application container. They will
+		// be resolved in the Artisan start file and registered on the console.
+		foreach ($commands as $command)
+		{
+			$this->{'register'.$command.'Command'}();
+		}
+
+		// Once the commands are registered in the application IoC container we will
+		// register them with the Artisan start event so that these are available
+		// when the Artisan application actually starts up and is getting used.
+		$this->commands(
+			'command.migrate', 'command.migrate.make',
+			'command.migrate.install', 'command.migrate.rollback',
+			'command.migrate.reset', 'command.migrate.refresh'
+		);
+	}
+
+	/**
+	 * Register the "migrate" migration command.
+	 *
+	 * @return void
+	 */
+	protected function registerMigrateCommand()
+	{
+		$this->app->bindShared('command.migrate', function($app)
+		{
+			$packagePath = $app['path.base'].'/vendor';
+
+			return new MigrateCommand($app['migrator'], $packagePath);
+		});
+	}
+
+	/**
+	 * Register the "rollback" migration command.
+	 *
+	 * @return void
+	 */
+	protected function registerRollbackCommand()
+	{
+		$this->app->bindShared('command.migrate.rollback', function($app)
+		{
+			return new RollbackCommand($app['migrator']);
+		});
+	}
+
+	/**
+	 * Register the "reset" migration command.
+	 *
+	 * @return void
+	 */
+	protected function registerResetCommand()
+	{
+		$this->app->bindShared('command.migrate.reset', function($app)
+		{
+			return new ResetCommand($app['migrator']);
+		});
+	}
+
+	/**
+	 * Register the "refresh" migration command.
+	 *
+	 * @return void
+	 */
+	protected function registerRefreshCommand()
+	{
+		$this->app->bindShared('command.migrate.refresh', function()
+		{
+			return new RefreshCommand;
+		});
+	}
+
+	/**
+	 * Register the "install" migration command.
+	 *
+	 * @return void
+	 */
+	protected function registerInstallCommand()
+	{
+		$this->app->bindShared('command.migrate.install', function($app)
+		{
+			return new InstallCommand($app['migration.repository']);
+		});
+	}
+
+	/**
+	 * Register the "install" migration command.
+	 *
+	 * @return void
+	 */
+	protected function registerMakeCommand()
+	{
+		$this->registerCreator();
+
+		$this->app->bindShared('command.migrate.make', function($app)
+		{
+			// Once we have the migration creator registered, we will create the command
+			// and inject the creator. The creator is responsible for the actual file
+			// creation of the migrations, and may be extended by these developers.
+			$creator = $app['migration.creator'];
+
+			$packagePath = $app['path.base'].'/vendor';
+
+			return new MigrateMakeCommand($creator, $packagePath);
+		});
+	}
+
+	/**
+	 * Register the migration creator.
+	 *
+	 * @return void
+	 */
+	protected function registerCreator()
+	{
+		$this->app->bindShared('migration.creator', function($app)
+		{
+			return new MigrationCreator($app['files']);
+		});
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array(
+			'migrator', 'migration.repository', 'command.migrate',
+			'command.migrate.rollback', 'command.migrate.reset',
+			'command.migrate.refresh', 'command.migrate.install',
+			'migration.creator', 'command.migrate.make',
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Migrations/DatabaseMigrationRepository.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Migrations/DatabaseMigrationRepository.php b/vendor/laravel/framework/src/Illuminate/Database/Migrations/DatabaseMigrationRepository.php
new file mode 100755
index 0000000..8894710
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Migrations/DatabaseMigrationRepository.php
@@ -0,0 +1,181 @@
+<?php namespace Illuminate\Database\Migrations;
+
+use Illuminate\Database\ConnectionResolverInterface as Resolver;
+
+class DatabaseMigrationRepository implements MigrationRepositoryInterface {
+
+	/**
+	 * The database connection resolver instance.
+	 *
+	 * @var \Illuminate\Database\ConnectionResolverInterface
+	 */
+	protected $resolver;
+
+	/**
+	 * The name of the migration table.
+	 *
+	 * @var string
+	 */
+	protected $table;
+
+	/**
+	 * The name of the database connection to use.
+	 *
+	 * @var string
+	 */
+	protected $connection;
+
+	/**
+	 * Create a new database migration repository instance.
+	 *
+	 * @param  \Illuminate\Database\ConnectionResolverInterface  $resolver
+	 * @param  string  $table
+	 * @return void
+	 */
+	public function __construct(Resolver $resolver, $table)
+	{
+		$this->table = $table;
+		$this->resolver = $resolver;
+	}
+
+	/**
+	 * Get the ran migrations.
+	 *
+	 * @return array
+	 */
+	public function getRan()
+	{
+		return $this->table()->lists('migration');
+	}
+
+	/**
+	 * Get the last migration batch.
+	 *
+	 * @return array
+	 */
+	public function getLast()
+	{
+		$query = $this->table()->where('batch', $this->getLastBatchNumber());
+
+		return $query->orderBy('migration', 'desc')->get();
+	}
+
+	/**
+	 * Log that a migration was run.
+	 *
+	 * @param  string  $file
+	 * @param  int     $batch
+	 * @return void
+	 */
+	public function log($file, $batch)
+	{
+		$record = array('migration' => $file, 'batch' => $batch);
+
+		$this->table()->insert($record);
+	}
+
+	/**
+	 * Remove a migration from the log.
+	 *
+	 * @param  object  $migration
+	 * @return void
+	 */
+	public function delete($migration)
+	{
+		$this->table()->where('migration', $migration->migration)->delete();
+	}
+
+	/**
+	 * Get the next migration batch number.
+	 *
+	 * @return int
+	 */
+	public function getNextBatchNumber()
+	{
+		return $this->getLastBatchNumber() + 1;
+	}
+
+	/**
+	 * Get the last migration batch number.
+	 *
+	 * @return int
+	 */
+	public function getLastBatchNumber()
+	{
+		return $this->table()->max('batch');
+	}
+
+	/**
+	 * Create the migration repository data store.
+	 *
+	 * @return void
+	 */
+	public function createRepository()
+	{
+		$schema = $this->getConnection()->getSchemaBuilder();
+
+		$schema->create($this->table, function($table)
+		{
+			// The migrations table is responsible for keeping track of which of the
+			// migrations have actually run for the application. We'll create the
+			// table to hold the migration file's path as well as the batch ID.
+			$table->string('migration');
+
+			$table->integer('batch');
+		});
+	}
+
+	/**
+	 * Determine if the migration repository exists.
+	 *
+	 * @return bool
+	 */
+	public function repositoryExists()
+	{
+		$schema = $this->getConnection()->getSchemaBuilder();
+
+		return $schema->hasTable($this->table);
+	}
+
+	/**
+	 * Get a query builder for the migration table.
+	 *
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	protected function table()
+	{
+		return $this->getConnection()->table($this->table);
+	}
+
+	/**
+	 * Get the connection resolver instance.
+	 *
+	 * @return \Illuminate\Database\ConnectionResolverInterface
+	 */
+	public function getConnectionResolver()
+	{
+		return $this->resolver;
+	}
+
+	/**
+	 * Resolve the database connection instance.
+	 *
+	 * @return \Illuminate\Database\Connection
+	 */
+	public function getConnection()
+	{
+		return $this->resolver->connection($this->connection);
+	}
+
+	/**
+	 * Set the information source to gather data.
+	 *
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function setSource($name)
+	{
+		$this->connection = $name;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migration.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migration.php b/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migration.php
new file mode 100755
index 0000000..eb75d14
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migration.php
@@ -0,0 +1,22 @@
+<?php namespace Illuminate\Database\Migrations;
+
+abstract class Migration {
+
+	/**
+	 * The name of the database connection to use.
+	 *
+	 * @var string
+	 */
+	protected $connection;
+
+	/**
+	 * Get the migration connection name.
+	 *
+	 * @return string
+	 */
+	public function getConnection()
+	{
+		return $this->connection;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Migrations/MigrationCreator.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Migrations/MigrationCreator.php b/vendor/laravel/framework/src/Illuminate/Database/Migrations/MigrationCreator.php
new file mode 100755
index 0000000..e70b627
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Migrations/MigrationCreator.php
@@ -0,0 +1,183 @@
+<?php namespace Illuminate\Database\Migrations;
+
+use Closure;
+use Illuminate\Filesystem\Filesystem;
+
+class MigrationCreator {
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * The registered post create hooks.
+	 *
+	 * @var array
+	 */
+	protected $postCreate = array();
+
+	/**
+	 * Create a new migration creator instance.
+	 *
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @return void
+	 */
+	public function __construct(Filesystem $files)
+	{
+		$this->files = $files;
+	}
+
+	/**
+	 * Create a new migration at the given path.
+	 *
+	 * @param  string  $name
+	 * @param  string  $path
+	 * @param  string  $table
+	 * @param  bool    $create
+	 * @return string
+	 */
+	public function create($name, $path, $table = null, $create = false)
+	{
+		$path = $this->getPath($name, $path);
+
+		// First we will get the stub file for the migration, which serves as a type
+		// of template for the migration. Once we have those we will populate the
+		// various place-holders, save the file, and run the post create event.
+		$stub = $this->getStub($table, $create);
+
+		$this->files->put($path, $this->populateStub($name, $stub, $table));
+
+		$this->firePostCreateHooks();
+
+		return $path;
+	}
+
+	/**
+	 * Get the migration stub file.
+	 *
+	 * @param  string  $table
+	 * @param  bool    $create
+	 * @return string
+	 */
+	protected function getStub($table, $create)
+	{
+		if (is_null($table))
+		{
+			return $this->files->get($this->getStubPath().'/blank.stub');
+		}
+
+		// We also have stubs for creating new tables and modifying existing tables
+		// to save the developer some typing when they are creating a new tables
+		// or modifying existing tables. We'll grab the appropriate stub here.
+		else
+		{
+			$stub = $create ? 'create.stub' : 'update.stub';
+
+			return $this->files->get($this->getStubPath()."/{$stub}");
+		}
+	}
+
+	/**
+	 * Populate the place-holders in the migration stub.
+	 *
+	 * @param  string  $name
+	 * @param  string  $stub
+	 * @param  string  $table
+	 * @return string
+	 */
+	protected function populateStub($name, $stub, $table)
+	{
+		$stub = str_replace('{{class}}', $this->getClassName($name), $stub);
+
+		// Here we will replace the table place-holders with the table specified by
+		// the developer, which is useful for quickly creating a tables creation
+		// or update migration from the console instead of typing it manually.
+		if ( ! is_null($table))
+		{
+			$stub = str_replace('{{table}}', $table, $stub);
+		}
+
+		return $stub;
+	}
+
+	/**
+	 * Get the class name of a migration name.
+	 *
+	 * @param  string  $name
+	 * @return string
+	 */
+	protected function getClassName($name)
+	{
+		return studly_case($name);
+	}
+
+	/**
+	 * Fire the registered post create hooks.
+	 *
+	 * @return void
+	 */
+	protected function firePostCreateHooks()
+	{
+		foreach ($this->postCreate as $callback)
+		{
+			call_user_func($callback);
+		}
+	}
+
+	/**
+	 * Register a post migration create hook.
+	 *
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function afterCreate(Closure $callback)
+	{
+		$this->postCreate[] = $callback;
+	}
+
+	/**
+	 * Get the full path name to the migration.
+	 *
+	 * @param  string  $name
+	 * @param  string  $path
+	 * @return string
+	 */
+	protected function getPath($name, $path)
+	{
+		return $path.'/'.$this->getDatePrefix().'_'.$name.'.php';
+	}
+
+	/**
+	 * Get the date prefix for the migration.
+	 *
+	 * @return string
+	 */
+	protected function getDatePrefix()
+	{
+		return date('Y_m_d_His');
+	}
+
+	/**
+	 * Get the path to the stubs.
+	 *
+	 * @return string
+	 */
+	public function getStubPath()
+	{
+		return __DIR__.'/stubs';
+	}
+
+	/**
+	 * Get the filesystem instance.
+	 *
+	 * @return \Illuminate\Filesystem\Filesystem
+	 */
+	public function getFilesystem()
+	{
+		return $this->files;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Migrations/MigrationRepositoryInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Migrations/MigrationRepositoryInterface.php b/vendor/laravel/framework/src/Illuminate/Database/Migrations/MigrationRepositoryInterface.php
new file mode 100755
index 0000000..dfafa15
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Migrations/MigrationRepositoryInterface.php
@@ -0,0 +1,65 @@
+<?php namespace Illuminate\Database\Migrations;
+
+interface MigrationRepositoryInterface {
+
+	/**
+	 * Get the ran migrations for a given package.
+	 *
+	 * @return array
+	 */
+	public function getRan();
+
+	/**
+	 * Get the last migration batch.
+	 *
+	 * @return array
+	 */
+	public function getLast();
+
+	/**
+	 * Log that a migration was run.
+	 *
+	 * @param  string  $file
+	 * @param  int     $batch
+	 * @return void
+	 */
+	public function log($file, $batch);
+
+	/**
+	 * Remove a migration from the log.
+	 *
+	 * @param  object  $migration
+	 * @return void
+	 */
+	public function delete($migration);
+
+	/**
+	 * Get the next migration batch number.
+	 *
+	 * @return int
+	 */
+	public function getNextBatchNumber();
+
+	/**
+	 * Create the migration repository data store.
+	 *
+	 * @return void
+	 */
+	public function createRepository();
+
+	/**
+	 * Determine if the migration repository exists.
+	 *
+	 * @return bool
+	 */
+	public function repositoryExists();
+
+	/**
+	 * Set the information source to gather data.
+	 *
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function setSource($name);
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php b/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php
new file mode 100755
index 0000000..fcb0e41
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php
@@ -0,0 +1,384 @@
+<?php namespace Illuminate\Database\Migrations;
+
+use Illuminate\Filesystem\Filesystem;
+use Illuminate\Database\ConnectionResolverInterface as Resolver;
+
+class Migrator {
+
+	/**
+	 * The migration repository implementation.
+	 *
+	 * @var \Illuminate\Database\Migrations\MigrationRepositoryInterface
+	 */
+	protected $repository;
+
+	/**
+	 * The filesystem instance.
+	 *
+	 * @var \Illuminate\Filesystem\Filesystem
+	 */
+	protected $files;
+
+	/**
+	 * The connection resolver instance.
+	 *
+	 * @var \Illuminate\Database\ConnectionResolverInterface
+	 */
+	protected $resolver;
+
+	/**
+	 * The name of the default connection.
+	 *
+	 * @var string
+	 */
+	protected $connection;
+
+	/**
+	 * The notes for the current operation.
+	 *
+	 * @var array
+	 */
+	protected $notes = array();
+
+	/**
+	 * Create a new migrator instance.
+	 *
+	 * @param  \Illuminate\Database\Migrations\MigrationRepositoryInterface  $repository
+	 * @param  \Illuminate\Database\ConnectionResolverInterface  $resolver
+	 * @param  \Illuminate\Filesystem\Filesystem  $files
+	 * @return void
+	 */
+	public function __construct(MigrationRepositoryInterface $repository,
+								Resolver $resolver,
+                                Filesystem $files)
+	{
+		$this->files = $files;
+		$this->resolver = $resolver;
+		$this->repository = $repository;
+	}
+
+	/**
+	 * Run the outstanding migrations at a given path.
+	 *
+	 * @param  string  $path
+	 * @param  bool    $pretend
+	 * @return void
+	 */
+	public function run($path, $pretend = false)
+	{
+		$this->notes = array();
+
+		$files = $this->getMigrationFiles($path);
+
+		// Once we grab all of the migration files for the path, we will compare them
+		// against the migrations that have already been run for this package then
+		// run each of the outstanding migrations against a database connection.
+		$ran = $this->repository->getRan();
+
+		$migrations = array_diff($files, $ran);
+
+		$this->requireFiles($path, $migrations);
+
+		$this->runMigrationList($migrations, $pretend);
+	}
+
+	/**
+	 * Run an array of migrations.
+	 *
+	 * @param  array  $migrations
+	 * @param  bool   $pretend
+	 * @return void
+	 */
+	public function runMigrationList($migrations, $pretend = false)
+	{
+		// First we will just make sure that there are any migrations to run. If there
+		// aren't, we will just make a note of it to the developer so they're aware
+		// that all of the migrations have been run against this database system.
+		if (count($migrations) == 0)
+		{
+			$this->note('<info>Nothing to migrate.</info>');
+
+			return;
+		}
+
+		$batch = $this->repository->getNextBatchNumber();
+
+		// Once we have the array of migrations, we will spin through them and run the
+		// migrations "up" so the changes are made to the databases. We'll then log
+		// that the migration was run so we don't repeat it next time we execute.
+		foreach ($migrations as $file)
+		{
+			$this->runUp($file, $batch, $pretend);
+		}
+	}
+
+	/**
+	 * Run "up" a migration instance.
+	 *
+	 * @param  string  $file
+	 * @param  int     $batch
+	 * @param  bool    $pretend
+	 * @return void
+	 */
+	protected function runUp($file, $batch, $pretend)
+	{
+		// First we will resolve a "real" instance of the migration class from this
+		// migration file name. Once we have the instances we can run the actual
+		// command such as "up" or "down", or we can just simulate the action.
+		$migration = $this->resolve($file);
+
+		if ($pretend)
+		{
+			return $this->pretendToRun($migration, 'up');
+		}
+
+		$migration->up();
+
+		// Once we have run a migrations class, we will log that it was run in this
+		// repository so that we don't try to run it next time we do a migration
+		// in the application. A migration repository keeps the migrate order.
+		$this->repository->log($file, $batch);
+
+		$this->note("<info>Migrated:</info> $file");
+	}
+
+	/**
+	 * Rollback the last migration operation.
+	 *
+	 * @param  bool  $pretend
+	 * @return int
+	 */
+	public function rollback($pretend = false)
+	{
+		$this->notes = array();
+
+		// We want to pull in the last batch of migrations that ran on the previous
+		// migration operation. We'll then reverse those migrations and run each
+		// of them "down" to reverse the last migration "operation" which ran.
+		$migrations = $this->repository->getLast();
+
+		if (count($migrations) == 0)
+		{
+			$this->note('<info>Nothing to rollback.</info>');
+
+			return count($migrations);
+		}
+
+		// We need to reverse these migrations so that they are "downed" in reverse
+		// to what they run on "up". It lets us backtrack through the migrations
+		// and properly reverse the entire database schema operation that ran.
+		foreach ($migrations as $migration)
+		{
+			$this->runDown((object) $migration, $pretend);
+		}
+
+		return count($migrations);
+	}
+
+	/**
+	 * Run "down" a migration instance.
+	 *
+	 * @param  object  $migration
+	 * @param  bool    $pretend
+	 * @return void
+	 */
+	protected function runDown($migration, $pretend)
+	{
+		$file = $migration->migration;
+
+		// First we will get the file name of the migration so we can resolve out an
+		// instance of the migration. Once we get an instance we can either run a
+		// pretend execution of the migration or we can run the real migration.
+		$instance = $this->resolve($file);
+
+		if ($pretend)
+		{
+			return $this->pretendToRun($instance, 'down');
+		}
+
+		$instance->down();
+
+		// Once we have successfully run the migration "down" we will remove it from
+		// the migration repository so it will be considered to have not been run
+		// by the application then will be able to fire by any later operation.
+		$this->repository->delete($migration);
+
+		$this->note("<info>Rolled back:</info> $file");
+	}
+
+	/**
+	 * Get all of the migration files in a given path.
+	 *
+	 * @param  string  $path
+	 * @return array
+	 */
+	public function getMigrationFiles($path)
+	{
+		$files = $this->files->glob($path.'/*_*.php');
+
+		// Once we have the array of files in the directory we will just remove the
+		// extension and take the basename of the file which is all we need when
+		// finding the migrations that haven't been run against the databases.
+		if ($files === false) return array();
+
+		$files = array_map(function($file)
+		{
+			return str_replace('.php', '', basename($file));
+
+		}, $files);
+
+		// Once we have all of the formatted file names we will sort them and since
+		// they all start with a timestamp this should give us the migrations in
+		// the order they were actually created by the application developers.
+		sort($files);
+
+		return $files;
+	}
+
+	/**
+	 * Require in all the migration files in a given path.
+	 *
+	 * @param  string  $path
+	 * @param  array   $files
+	 * @return void
+	 */
+	public function requireFiles($path, array $files)
+	{
+		foreach ($files as $file) $this->files->requireOnce($path.'/'.$file.'.php');
+	}
+
+	/**
+	 * Pretend to run the migrations.
+	 *
+	 * @param  object  $migration
+	 * @param  string  $method
+	 * @return void
+	 */
+	protected function pretendToRun($migration, $method)
+	{
+		foreach ($this->getQueries($migration, $method) as $query)
+		{
+			$name = get_class($migration);
+
+			$this->note("<info>{$name}:</info> {$query['query']}");
+		}
+	}
+
+	/**
+	 * Get all of the queries that would be run for a migration.
+	 *
+	 * @param  object  $migration
+	 * @param  string  $method
+	 * @return array
+	 */
+	protected function getQueries($migration, $method)
+	{
+		$connection = $migration->getConnection();
+
+		// Now that we have the connections we can resolve it and pretend to run the
+		// queries against the database returning the array of raw SQL statements
+		// that would get fired against the database system for this migration.
+		$db = $this->resolveConnection($connection);
+
+		return $db->pretend(function() use ($migration, $method)
+		{
+			$migration->$method();
+		});
+	}
+
+	/**
+	 * Resolve a migration instance from a file.
+	 *
+	 * @param  string  $file
+	 * @return object
+	 */
+	public function resolve($file)
+	{
+		$file = implode('_', array_slice(explode('_', $file), 4));
+
+		$class = studly_case($file);
+
+		return new $class;
+	}
+
+	/**
+	 * Raise a note event for the migrator.
+	 *
+	 * @param  string  $message
+	 * @return void
+	 */
+	protected function note($message)
+	{
+		$this->notes[] = $message;
+	}
+
+	/**
+	 * Get the notes for the last operation.
+	 *
+	 * @return array
+	 */
+	public function getNotes()
+	{
+		return $this->notes;
+	}
+
+	/**
+	 * Resolve the database connection instance.
+	 *
+	 * @param  string  $connection
+	 * @return \Illuminate\Database\Connection
+	 */
+	public function resolveConnection($connection)
+	{
+		return $this->resolver->connection($connection);
+	}
+
+	/**
+	 * Set the default connection name.
+	 *
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function setConnection($name)
+	{
+		if ( ! is_null($name))
+		{
+			$this->resolver->setDefaultConnection($name);
+		}
+
+		$this->repository->setSource($name);
+
+		$this->connection = $name;
+	}
+
+	/**
+	 * Get the migration repository instance.
+	 *
+	 * @return \Illuminate\Database\Migrations\MigrationRepositoryInterface
+	 */
+	public function getRepository()
+	{
+		return $this->repository;
+	}
+
+	/**
+	 * Determine if the migration repository exists.
+	 *
+	 * @return bool
+	 */
+	public function repositoryExists()
+	{
+		return $this->repository->repositoryExists();
+	}
+
+	/**
+	 * Get the file system instance.
+	 *
+	 * @return \Illuminate\Filesystem\Filesystem
+	 */
+	public function getFilesystem()
+	{
+		return $this->files;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/blank.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/blank.stub b/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/blank.stub
new file mode 100755
index 0000000..a711201
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/blank.stub
@@ -0,0 +1,28 @@
+<?php
+
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class {{class}} extends Migration {
+
+	/**
+	 * Run the migrations.
+	 *
+	 * @return void
+	 */
+	public function up()
+	{
+		//
+	}
+
+	/**
+	 * Reverse the migrations.
+	 *
+	 * @return void
+	 */
+	public function down()
+	{
+		//
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/create.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/create.stub b/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/create.stub
new file mode 100755
index 0000000..0f15b3e
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/create.stub
@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class {{class}} extends Migration {
+
+	/**
+	 * Run the migrations.
+	 *
+	 * @return void
+	 */
+	public function up()
+	{
+		Schema::create('{{table}}', function(Blueprint $table)
+		{
+			$table->increments('id');
+			$table->timestamps();
+		});
+	}
+
+	/**
+	 * Reverse the migrations.
+	 *
+	 * @return void
+	 */
+	public function down()
+	{
+		Schema::drop('{{table}}');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/update.stub
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/update.stub b/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/update.stub
new file mode 100755
index 0000000..cc2c904
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/update.stub
@@ -0,0 +1,34 @@
+<?php
+
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class {{class}} extends Migration {
+
+	/**
+	 * Run the migrations.
+	 *
+	 * @return void
+	 */
+	public function up()
+	{
+		Schema::table('{{table}}', function(Blueprint $table)
+		{
+			//
+		});
+	}
+
+	/**
+	 * Reverse the migrations.
+	 *
+	 * @return void
+	 */
+	public function down()
+	{
+		Schema::table('{{table}}', function(Blueprint $table)
+		{
+			//
+		});
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php b/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php
new file mode 100755
index 0000000..ac1e9d1
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php
@@ -0,0 +1,62 @@
+<?php namespace Illuminate\Database;
+
+use Illuminate\Database\Schema\MySqlBuilder;
+use Doctrine\DBAL\Driver\PDOMySql\Driver as DoctrineDriver;
+use Illuminate\Database\Query\Grammars\MySqlGrammar as QueryGrammar;
+use Illuminate\Database\Schema\Grammars\MySqlGrammar as SchemaGrammar;
+
+class MySqlConnection extends Connection {
+
+	/**
+	 * Get a schema builder instance for the connection.
+	 *
+	 * @return \Illuminate\Database\Schema\MySqlBuilder
+	 */
+	public function getSchemaBuilder()
+	{
+		if (is_null($this->schemaGrammar)) { $this->useDefaultSchemaGrammar(); }
+
+		return new MySqlBuilder($this);
+	}
+
+	/**
+	 * Get the default query grammar instance.
+	 *
+	 * @return \Illuminate\Database\Query\Grammars\MySqlGrammar
+	 */
+	protected function getDefaultQueryGrammar()
+	{
+		return $this->withTablePrefix(new QueryGrammar);
+	}
+
+	/**
+	 * Get the default schema grammar instance.
+	 *
+	 * @return \Illuminate\Database\Schema\Grammars\MySqlGrammar
+	 */
+	protected function getDefaultSchemaGrammar()
+	{
+		return $this->withTablePrefix(new SchemaGrammar);
+	}
+
+	/**
+	 * Get the default post processor instance.
+	 *
+	 * @return \Illuminate\Database\Query\Processors\Processor
+	 */
+	protected function getDefaultPostProcessor()
+	{
+		return new Query\Processors\MySqlProcessor;
+	}
+
+	/**
+	 * Get the Doctrine DBAL driver.
+	 *
+	 * @return \Doctrine\DBAL\Driver\PDOMySql\Driver
+	 */
+	protected function getDoctrineDriver()
+	{
+		return new DoctrineDriver;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/PostgresConnection.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/PostgresConnection.php b/vendor/laravel/framework/src/Illuminate/Database/PostgresConnection.php
new file mode 100755
index 0000000..56b6c4e
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/PostgresConnection.php
@@ -0,0 +1,50 @@
+<?php namespace Illuminate\Database;
+
+use Doctrine\DBAL\Driver\PDOPgSql\Driver as DoctrineDriver;
+use Illuminate\Database\Query\Processors\PostgresProcessor;
+use Illuminate\Database\Query\Grammars\PostgresGrammar as QueryGrammar;
+use Illuminate\Database\Schema\Grammars\PostgresGrammar as SchemaGrammar;
+
+class PostgresConnection extends Connection {
+
+	/**
+	 * Get the default query grammar instance.
+	 *
+	 * @return \Illuminate\Database\Query\Grammars\PostgresGrammar
+	 */
+	protected function getDefaultQueryGrammar()
+	{
+		return $this->withTablePrefix(new QueryGrammar);
+	}
+
+	/**
+	 * Get the default schema grammar instance.
+	 *
+	 * @return \Illuminate\Database\Schema\Grammars\PostgresGrammar
+	 */
+	protected function getDefaultSchemaGrammar()
+	{
+		return $this->withTablePrefix(new SchemaGrammar);
+	}
+
+	/**
+	 * Get the default post processor instance.
+	 *
+	 * @return \Illuminate\Database\Query\Processors\PostgresProcessor
+	 */
+	protected function getDefaultPostProcessor()
+	{
+		return new PostgresProcessor;
+	}
+
+	/**
+	 * Get the Doctrine DBAL driver.
+	 *
+	 * @return \Doctrine\DBAL\Driver\PDOPgSql\Driver
+	 */
+	protected function getDoctrineDriver()
+	{
+		return new DoctrineDriver;
+	}
+
+}


[20/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Connectors/SQLiteConnector.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Connectors/SQLiteConnector.php b/vendor/laravel/framework/src/Illuminate/Database/Connectors/SQLiteConnector.php
new file mode 100755
index 0000000..596ef28
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Connectors/SQLiteConnector.php
@@ -0,0 +1,38 @@
+<?php namespace Illuminate\Database\Connectors;
+
+class SQLiteConnector extends Connector implements ConnectorInterface {
+
+	/**
+	 * Establish a database connection.
+	 *
+	 * @param  array  $config
+	 * @return \PDO
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	public function connect(array $config)
+	{
+		$options = $this->getOptions($config);
+
+		// SQLite supports "in-memory" databases that only last as long as the owning
+		// connection does. These are useful for tests or for short lifetime store
+		// querying. In-memory databases may only have a single open connection.
+		if ($config['database'] == ':memory:')
+		{
+			return $this->createConnection('sqlite::memory:', $config, $options);
+		}
+
+		$path = realpath($config['database']);
+
+		// Here we'll verify that the SQLite database exists before going any further
+		// as the developer probably wants to know if the database exists and this
+		// SQLite driver will not throw any exception if it does not by default.
+		if ($path === false)
+		{
+			throw new \InvalidArgumentException("Database does not exist.");
+		}
+
+		return $this->createConnection("sqlite:{$path}", $config, $options);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Connectors/SqlServerConnector.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Connectors/SqlServerConnector.php b/vendor/laravel/framework/src/Illuminate/Database/Connectors/SqlServerConnector.php
new file mode 100755
index 0000000..d1d9a53
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Connectors/SqlServerConnector.php
@@ -0,0 +1,69 @@
+<?php namespace Illuminate\Database\Connectors;
+
+use PDO;
+
+class SqlServerConnector extends Connector implements ConnectorInterface {
+
+	/**
+	 * The PDO connection options.
+	 *
+	 * @var array
+	 */
+	protected $options = array(
+			PDO::ATTR_CASE => PDO::CASE_NATURAL,
+			PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+			PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
+			PDO::ATTR_STRINGIFY_FETCHES => false,
+	);
+
+	/**
+	 * Establish a database connection.
+	 *
+	 * @param  array  $config
+	 * @return \PDO
+	 */
+	public function connect(array $config)
+	{
+		$options = $this->getOptions($config);
+
+		return $this->createConnection($this->getDsn($config), $config, $options);
+	}
+
+	/**
+	 * Create a DSN string from a configuration.
+	 *
+	 * @param  array   $config
+	 * @return string
+	 */
+	protected function getDsn(array $config)
+	{
+		extract($config);
+
+		// First we will create the basic DSN setup as well as the port if it is in
+		// in the configuration options. This will give us the basic DSN we will
+		// need to establish the PDO connections and return them back for use.
+		if (in_array('dblib', $this->getAvailableDrivers()))
+		{
+			$port = isset($config['port']) ? ':'.$port : '';
+
+			return "dblib:host={$host}{$port};dbname={$database}";
+		}
+
+		$port = isset($config['port']) ? ','.$port : '';
+
+		$dbName = $database != '' ? ";Database={$database}" : '';
+
+		return "sqlsrv:Server={$host}{$port}{$dbName}";
+	}
+
+	/**
+	 * Get the available PDO drivers.
+	 *
+	 * @return array
+	 */
+	protected function getAvailableDrivers()
+	{
+		return PDO::getAvailableDrivers();
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/BaseCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/BaseCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/BaseCommand.php
new file mode 100755
index 0000000..7dfef57
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/BaseCommand.php
@@ -0,0 +1,49 @@
+<?php namespace Illuminate\Database\Console\Migrations;
+
+use Illuminate\Console\Command;
+
+class BaseCommand extends Command {
+
+	/**
+	 * Get the path to the migration directory.
+	 *
+	 * @return string
+	 */
+	protected function getMigrationPath()
+	{
+		$path = $this->input->getOption('path');
+
+		// First, we will check to see if a path option has been defined. If it has
+		// we will use the path relative to the root of this installation folder
+		// so that migrations may be run for any path within the applications.
+		if ( ! is_null($path))
+		{
+			return $this->laravel['path.base'].'/'.$path;
+		}
+
+		$package = $this->input->getOption('package');
+
+		// If the package is in the list of migration paths we received we will put
+		// the migrations in that path. Otherwise, we will assume the package is
+		// is in the package directories and will place them in that location.
+		if ( ! is_null($package))
+		{
+			return $this->packagePath.'/'.$package.'/src/migrations';
+		}
+
+		$bench = $this->input->getOption('bench');
+
+		// Finally we will check for the workbench option, which is a shortcut into
+		// specifying the full path for a "workbench" project. Workbenches allow
+		// developers to develop packages along side a "standard" app install.
+		if ( ! is_null($bench))
+		{
+			$path = "/workbench/{$bench}/src/migrations";
+
+			return $this->laravel['path.base'].$path;
+		}
+
+		return $this->laravel['path'].'/database/migrations';
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/InstallCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/InstallCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/InstallCommand.php
new file mode 100755
index 0000000..d89c0c4
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/InstallCommand.php
@@ -0,0 +1,69 @@
+<?php namespace Illuminate\Database\Console\Migrations;
+
+use Illuminate\Console\Command;
+use Symfony\Component\Console\Input\InputOption;
+use Illuminate\Database\Migrations\MigrationRepositoryInterface;
+
+class InstallCommand extends Command {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'migrate:install';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Create the migration repository';
+
+	/**
+	 * The repository instance.
+	 *
+	 * @var \Illuminate\Database\Migrations\MigrationRepositoryInterface
+	 */
+	protected $repository;
+
+	/**
+	 * Create a new migration install command instance.
+	 *
+	 * @param  \Illuminate\Database\Migrations\MigrationRepositoryInterface  $repository
+	 * @return void
+	 */
+	public function __construct(MigrationRepositoryInterface $repository)
+	{
+		parent::__construct();
+
+		$this->repository = $repository;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		$this->repository->setSource($this->input->getOption('database'));
+
+		$this->repository->createRepository();
+
+		$this->info("Migration table created successfully.");
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('database', null, InputOption::VALUE_OPTIONAL, 'The database connection to use.'),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php
new file mode 100755
index 0000000..035192f
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php
@@ -0,0 +1,130 @@
+<?php namespace Illuminate\Database\Console\Migrations;
+
+use Illuminate\Console\ConfirmableTrait;
+use Illuminate\Database\Migrations\Migrator;
+use Symfony\Component\Console\Input\InputOption;
+
+class MigrateCommand extends BaseCommand {
+
+	use ConfirmableTrait;
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'migrate';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Run the database migrations';
+
+	/**
+	 * The migrator instance.
+	 *
+	 * @var \Illuminate\Database\Migrations\Migrator
+	 */
+	protected $migrator;
+
+	/**
+	 * The path to the packages directory (vendor).
+	 */
+	protected $packagePath;
+
+	/**
+	 * Create a new migration command instance.
+	 *
+	 * @param  \Illuminate\Database\Migrations\Migrator  $migrator
+	 * @param  string  $packagePath
+	 * @return void
+	 */
+	public function __construct(Migrator $migrator, $packagePath)
+	{
+		parent::__construct();
+
+		$this->migrator = $migrator;
+		$this->packagePath = $packagePath;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		if ( ! $this->confirmToProceed()) return;
+
+		$this->prepareDatabase();
+
+		// The pretend option can be used for "simulating" the migration and grabbing
+		// the SQL queries that would fire if the migration were to be run against
+		// a database for real, which is helpful for double checking migrations.
+		$pretend = $this->input->getOption('pretend');
+
+		$path = $this->getMigrationPath();
+
+		$this->migrator->run($path, $pretend);
+
+		// Once the migrator has run we will grab the note output and send it out to
+		// the console screen, since the migrator itself functions without having
+		// any instances of the OutputInterface contract passed into the class.
+		foreach ($this->migrator->getNotes() as $note)
+		{
+			$this->output->writeln($note);
+		}
+
+		// Finally, if the "seed" option has been given, we will re-run the database
+		// seed task to re-populate the database, which is convenient when adding
+		// a migration and a seed at the same time, as it is only this command.
+		if ($this->input->getOption('seed'))
+		{
+			$this->call('db:seed', ['--force' => true]);
+		}
+	}
+
+	/**
+	 * Prepare the migration database for running.
+	 *
+	 * @return void
+	 */
+	protected function prepareDatabase()
+	{
+		$this->migrator->setConnection($this->input->getOption('database'));
+
+		if ( ! $this->migrator->repositoryExists())
+		{
+			$options = array('--database' => $this->input->getOption('database'));
+
+			$this->call('migrate:install', $options);
+		}
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('bench', null, InputOption::VALUE_OPTIONAL, 'The name of the workbench to migrate.', null),
+
+			array('database', null, InputOption::VALUE_OPTIONAL, 'The database connection to use.'),
+
+			array('force', null, InputOption::VALUE_NONE, 'Force the operation to run when in production.'),
+
+			array('path', null, InputOption::VALUE_OPTIONAL, 'The path to migration files.', null),
+
+			array('package', null, InputOption::VALUE_OPTIONAL, 'The package to migrate.', null),
+
+			array('pretend', null, InputOption::VALUE_NONE, 'Dump the SQL queries that would be run.'),
+
+			array('seed', null, InputOption::VALUE_NONE, 'Indicates if the seed task should be re-run.'),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php
new file mode 100644
index 0000000..5fc6933
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php
@@ -0,0 +1,127 @@
+<?php namespace Illuminate\Database\Console\Migrations;
+
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputArgument;
+use Illuminate\Database\Migrations\MigrationCreator;
+
+class MigrateMakeCommand extends BaseCommand {
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'migrate:make';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Create a new migration file';
+
+	/**
+	 * The migration creator instance.
+	 *
+	 * @var \Illuminate\Database\Migrations\MigrationCreator
+	 */
+	protected $creator;
+
+	/**
+	 * The path to the packages directory (vendor).
+	 *
+	 * @var string
+	 */
+	protected $packagePath;
+
+	/**
+	 * Create a new migration install command instance.
+	 *
+	 * @param  \Illuminate\Database\Migrations\MigrationCreator  $creator
+	 * @param  string  $packagePath
+	 * @return void
+	 */
+	public function __construct(MigrationCreator $creator, $packagePath)
+	{
+		parent::__construct();
+
+		$this->creator = $creator;
+		$this->packagePath = $packagePath;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		// It's possible for the developer to specify the tables to modify in this
+		// schema operation. The developer may also specify if this table needs
+		// to be freshly created so we can create the appropriate migrations.
+		$name = $this->input->getArgument('name');
+
+		$table = $this->input->getOption('table');
+
+		$create = $this->input->getOption('create');
+
+		if ( ! $table && is_string($create)) $table = $create;
+
+		// Now we are ready to write the migration out to disk. Once we've written
+		// the migration out, we will dump-autoload for the entire framework to
+		// make sure that the migrations are registered by the class loaders.
+		$this->writeMigration($name, $table, $create);
+
+		$this->call('dump-autoload');
+	}
+
+	/**
+	 * Write the migration file to disk.
+	 *
+	 * @param  string  $name
+	 * @param  string  $table
+	 * @param  bool    $create
+	 * @return string
+	 */
+	protected function writeMigration($name, $table, $create)
+	{
+		$path = $this->getMigrationPath();
+
+		$file = pathinfo($this->creator->create($name, $path, $table, $create), PATHINFO_FILENAME);
+
+		$this->line("<info>Created Migration:</info> $file");
+	}
+
+	/**
+	 * Get the console command arguments.
+	 *
+	 * @return array
+	 */
+	protected function getArguments()
+	{
+		return array(
+			array('name', InputArgument::REQUIRED, 'The name of the migration'),
+		);
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('bench', null, InputOption::VALUE_OPTIONAL, 'The workbench the migration belongs to.', null),
+
+			array('create', null, InputOption::VALUE_OPTIONAL, 'The table to be created.'),
+
+			array('package', null, InputOption::VALUE_OPTIONAL, 'The package the migration belongs to.', null),
+
+			array('path', null, InputOption::VALUE_OPTIONAL, 'Where to store the migration.', null),
+
+			array('table', null, InputOption::VALUE_OPTIONAL, 'The table to migrate.'),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/RefreshCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/RefreshCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/RefreshCommand.php
new file mode 100755
index 0000000..2adc6e8
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/RefreshCommand.php
@@ -0,0 +1,96 @@
+<?php namespace Illuminate\Database\Console\Migrations;
+
+use Illuminate\Console\Command;
+use Illuminate\Console\ConfirmableTrait;
+use Symfony\Component\Console\Input\InputOption;
+
+class RefreshCommand extends Command {
+
+	use ConfirmableTrait;
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'migrate:refresh';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Reset and re-run all migrations';
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		if ( ! $this->confirmToProceed()) return;
+
+		$database = $this->input->getOption('database');
+
+		$force = $this->input->getOption('force');
+
+		$this->call('migrate:reset', array(
+			'--database' => $database, '--force' => $force
+		));
+
+		// The refresh command is essentially just a brief aggregate of a few other of
+		// the migration commands and just provides a convenient wrapper to execute
+		// them in succession. We'll also see if we need to re-seed the database.
+		$this->call('migrate', array(
+			'--database' => $database, '--force' => $force
+		));
+
+		if ($this->needsSeeding())
+		{
+			$this->runSeeder($database);
+		}
+	}
+
+	/**
+	 * Determine if the developer has requested database seeding.
+	 *
+	 * @return bool
+	 */
+	protected function needsSeeding()
+	{
+		return $this->option('seed') || $this->option('seeder');
+	}
+
+	/**
+	 * Run the database seeder command.
+	 *
+	 * @param  string  $database
+	 * @return void
+	 */
+	protected function runSeeder($database)
+	{
+		$class = $this->option('seeder') ?: 'DatabaseSeeder';
+
+		$this->call('db:seed', array('--database' => $database, '--class' => $class));
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('database', null, InputOption::VALUE_OPTIONAL, 'The database connection to use.'),
+
+			array('force', null, InputOption::VALUE_NONE, 'Force the operation to run when in production.'),
+
+			array('seed', null, InputOption::VALUE_NONE, 'Indicates if the seed task should be re-run.'),
+
+			array('seeder', null, InputOption::VALUE_OPTIONAL, 'The class name of the root seeder.'),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/ResetCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/ResetCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/ResetCommand.php
new file mode 100755
index 0000000..f81fa90
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/ResetCommand.php
@@ -0,0 +1,91 @@
+<?php namespace Illuminate\Database\Console\Migrations;
+
+use Illuminate\Console\Command;
+use Illuminate\Console\ConfirmableTrait;
+use Illuminate\Database\Migrations\Migrator;
+use Symfony\Component\Console\Input\InputOption;
+
+class ResetCommand extends Command {
+
+	use ConfirmableTrait;
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'migrate:reset';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Rollback all database migrations';
+
+	/**
+	 * The migrator instance.
+	 *
+	 * @var \Illuminate\Database\Migrations\Migrator
+	 */
+	protected $migrator;
+
+	/**
+	 * Create a new migration rollback command instance.
+	 *
+	 * @param  \Illuminate\Database\Migrations\Migrator  $migrator
+	 * @return void
+	 */
+	public function __construct(Migrator $migrator)
+	{
+		parent::__construct();
+
+		$this->migrator = $migrator;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		if ( ! $this->confirmToProceed()) return;
+
+		$this->migrator->setConnection($this->input->getOption('database'));
+
+		$pretend = $this->input->getOption('pretend');
+
+		while (true)
+		{
+			$count = $this->migrator->rollback($pretend);
+
+			// Once the migrator has run we will grab the note output and send it out to
+			// the console screen, since the migrator itself functions without having
+			// any instances of the OutputInterface contract passed into the class.
+			foreach ($this->migrator->getNotes() as $note)
+			{
+				$this->output->writeln($note);
+			}
+
+			if ($count == 0) break;
+		}
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('database', null, InputOption::VALUE_OPTIONAL, 'The database connection to use.'),
+
+			array('force', null, InputOption::VALUE_NONE, 'Force the operation to run when in production.'),
+
+			array('pretend', null, InputOption::VALUE_NONE, 'Dump the SQL queries that would be run.'),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/RollbackCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/RollbackCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/RollbackCommand.php
new file mode 100755
index 0000000..c11198f
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/RollbackCommand.php
@@ -0,0 +1,86 @@
+<?php namespace Illuminate\Database\Console\Migrations;
+
+use Illuminate\Console\Command;
+use Illuminate\Console\ConfirmableTrait;
+use Illuminate\Database\Migrations\Migrator;
+use Symfony\Component\Console\Input\InputOption;
+
+class RollbackCommand extends Command {
+
+	use ConfirmableTrait;
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'migrate:rollback';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Rollback the last database migration';
+
+	/**
+	 * The migrator instance.
+	 *
+	 * @var \Illuminate\Database\Migrations\Migrator
+	 */
+	protected $migrator;
+
+	/**
+	 * Create a new migration rollback command instance.
+	 *
+	 * @param  \Illuminate\Database\Migrations\Migrator  $migrator
+	 * @return void
+	 */
+	public function __construct(Migrator $migrator)
+	{
+		parent::__construct();
+
+		$this->migrator = $migrator;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		if ( ! $this->confirmToProceed()) return;
+
+		$this->migrator->setConnection($this->input->getOption('database'));
+
+		$pretend = $this->input->getOption('pretend');
+
+		$this->migrator->rollback($pretend);
+
+		// Once the migrator has run we will grab the note output and send it out to
+		// the console screen, since the migrator itself functions without having
+		// any instances of the OutputInterface contract passed into the class.
+		foreach ($this->migrator->getNotes() as $note)
+		{
+			$this->output->writeln($note);
+		}
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('database', null, InputOption::VALUE_OPTIONAL, 'The database connection to use.'),
+
+			array('force', null, InputOption::VALUE_NONE, 'Force the operation to run when in production.'),
+
+			array('pretend', null, InputOption::VALUE_NONE, 'Dump the SQL queries that would be run.'),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Console/SeedCommand.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/SeedCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/SeedCommand.php
new file mode 100755
index 0000000..cba115b
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Console/SeedCommand.php
@@ -0,0 +1,100 @@
+<?php namespace Illuminate\Database\Console;
+
+use Illuminate\Console\Command;
+use Illuminate\Console\ConfirmableTrait;
+use Symfony\Component\Console\Input\InputOption;
+use Illuminate\Database\ConnectionResolverInterface as Resolver;
+
+class SeedCommand extends Command {
+
+	use ConfirmableTrait;
+
+	/**
+	 * The console command name.
+	 *
+	 * @var string
+	 */
+	protected $name = 'db:seed';
+
+	/**
+	 * The console command description.
+	 *
+	 * @var string
+	 */
+	protected $description = 'Seed the database with records';
+
+	/**
+	 * The connection resolver instance.
+	 *
+	 * @var \Illuminate\Database\ConnectionResolverInterface
+	 */
+	protected $resolver;
+
+	/**
+	 * Create a new database seed command instance.
+	 *
+	 * @param  \Illuminate\Database\ConnectionResolverInterface  $resolver
+	 * @return void
+	 */
+	public function __construct(Resolver $resolver)
+	{
+		parent::__construct();
+
+		$this->resolver = $resolver;
+	}
+
+	/**
+	 * Execute the console command.
+	 *
+	 * @return void
+	 */
+	public function fire()
+	{
+		if ( ! $this->confirmToProceed()) return;
+
+		$this->resolver->setDefaultConnection($this->getDatabase());
+
+		$this->getSeeder()->run();
+	}
+
+	/**
+	 * Get a seeder instance from the container.
+	 *
+	 * @return \Illuminate\Database\Seeder
+	 */
+	protected function getSeeder()
+	{
+		$class = $this->laravel->make($this->input->getOption('class'));
+
+		return $class->setContainer($this->laravel)->setCommand($this);
+	}
+
+	/**
+	 * Get the name of the database connection to use.
+	 *
+	 * @return string
+	 */
+	protected function getDatabase()
+	{
+		$database = $this->input->getOption('database');
+
+		return $database ?: $this->laravel['config']['database.default'];
+	}
+
+	/**
+	 * Get the console command options.
+	 *
+	 * @return array
+	 */
+	protected function getOptions()
+	{
+		return array(
+			array('class', null, InputOption::VALUE_OPTIONAL, 'The class name of the root seeder', 'DatabaseSeeder'),
+
+			array('database', null, InputOption::VALUE_OPTIONAL, 'The database connection to seed'),
+
+			array('force', null, InputOption::VALUE_NONE, 'Force the operation to run when in production.'),
+		);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php b/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php
new file mode 100755
index 0000000..e30d5d3
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php
@@ -0,0 +1,324 @@
+<?php namespace Illuminate\Database;
+
+use Illuminate\Support\Str;
+use Illuminate\Database\Connectors\ConnectionFactory;
+
+class DatabaseManager implements ConnectionResolverInterface {
+
+	/**
+	 * The application instance.
+	 *
+	 * @var \Illuminate\Foundation\Application
+	 */
+	protected $app;
+
+	/**
+	 * The database connection factory instance.
+	 *
+	 * @var \Illuminate\Database\Connectors\ConnectionFactory
+	 */
+	protected $factory;
+
+	/**
+	 * The active connection instances.
+	 *
+	 * @var array
+	 */
+	protected $connections = array();
+
+	/**
+	 * The custom connection resolvers.
+	 *
+	 * @var array
+	 */
+	protected $extensions = array();
+
+	/**
+	 * Create a new database manager instance.
+	 *
+	 * @param  \Illuminate\Foundation\Application  $app
+	 * @param  \Illuminate\Database\Connectors\ConnectionFactory  $factory
+	 * @return void
+	 */
+	public function __construct($app, ConnectionFactory $factory)
+	{
+		$this->app = $app;
+		$this->factory = $factory;
+	}
+
+	/**
+	 * Get a database connection instance.
+	 *
+	 * @param  string  $name
+	 * @return \Illuminate\Database\Connection
+	 */
+	public function connection($name = null)
+	{
+		list($name, $type) = $this->parseConnectionName($name);
+
+		// If we haven't created this connection, we'll create it based on the config
+		// provided in the application. Once we've created the connections we will
+		// set the "fetch mode" for PDO which determines the query return types.
+		if ( ! isset($this->connections[$name]))
+		{
+			$connection = $this->makeConnection($name);
+
+			$this->setPdoForType($connection, $type);
+
+			$this->connections[$name] = $this->prepare($connection);
+		}
+
+		return $this->connections[$name];
+	}
+
+	/**
+	 * Parse the connection into an array of the name and read / write type.
+	 *
+	 * @param  string  $name
+	 * @return array
+	 */
+	protected function parseConnectionName($name)
+	{
+		$name = $name ?: $this->getDefaultConnection();
+
+		return Str::endsWith($name, ['::read', '::write'])
+                            ? explode('::', $name, 2) : [$name, null];
+	}
+
+	/**
+	 * Disconnect from the given database and remove from local cache.
+	 *
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function purge($name = null)
+	{
+		$this->disconnect($name);
+
+		unset($this->connections[$name]);
+	}
+
+	/**
+	 * Disconnect from the given database.
+	 *
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function disconnect($name = null)
+	{
+		if (isset($this->connections[$name = $name ?: $this->getDefaultConnection()]))
+		{
+			$this->connections[$name]->disconnect();
+		}
+	}
+
+	/**
+	 * Reconnect to the given database.
+	 *
+	 * @param  string  $name
+	 * @return \Illuminate\Database\Connection
+	 */
+	public function reconnect($name = null)
+	{
+		$this->disconnect($name = $name ?: $this->getDefaultConnection());
+
+		if ( ! isset($this->connections[$name]))
+		{
+			return $this->connection($name);
+		}
+
+		return $this->refreshPdoConnections($name);
+	}
+
+	/**
+	 * Refresh the PDO connections on a given connection.
+	 *
+	 * @param  string  $name
+	 * @return \Illuminate\Database\Connection
+	 */
+	protected function refreshPdoConnections($name)
+	{
+		$fresh = $this->makeConnection($name);
+
+		return $this->connections[$name]
+                                ->setPdo($fresh->getPdo())
+                                ->setReadPdo($fresh->getReadPdo());
+	}
+
+	/**
+	 * Make the database connection instance.
+	 *
+	 * @param  string  $name
+	 * @return \Illuminate\Database\Connection
+	 */
+	protected function makeConnection($name)
+	{
+		$config = $this->getConfig($name);
+
+		// First we will check by the connection name to see if an extension has been
+		// registered specifically for that connection. If it has we will call the
+		// Closure and pass it the config allowing it to resolve the connection.
+		if (isset($this->extensions[$name]))
+		{
+			return call_user_func($this->extensions[$name], $config, $name);
+		}
+
+		$driver = $config['driver'];
+
+		// Next we will check to see if an extension has been registered for a driver
+		// and will call the Closure if so, which allows us to have a more generic
+		// resolver for the drivers themselves which applies to all connections.
+		if (isset($this->extensions[$driver]))
+		{
+			return call_user_func($this->extensions[$driver], $config, $name);
+		}
+
+		return $this->factory->make($config, $name);
+	}
+
+	/**
+	 * Prepare the database connection instance.
+	 *
+	 * @param  \Illuminate\Database\Connection  $connection
+	 * @return \Illuminate\Database\Connection
+	 */
+	protected function prepare(Connection $connection)
+	{
+		$connection->setFetchMode($this->app['config']['database.fetch']);
+
+		if ($this->app->bound('events'))
+		{
+			$connection->setEventDispatcher($this->app['events']);
+		}
+
+		// The database connection can also utilize a cache manager instance when cache
+		// functionality is used on queries, which provides an expressive interface
+		// to caching both fluent queries and Eloquent queries that are executed.
+		$app = $this->app;
+
+		$connection->setCacheManager(function() use ($app)
+		{
+			return $app['cache'];
+		});
+
+		// We will setup a Closure to resolve the paginator instance on the connection
+		// since the Paginator isn't used on every request and needs quite a few of
+		// our dependencies. It'll be more efficient to lazily resolve instances.
+		$connection->setPaginator(function() use ($app)
+		{
+			return $app['paginator'];
+		});
+
+		// Here we'll set a reconnector callback. This reconnector can be any callable
+		// so we will set a Closure to reconnect from this manager with the name of
+		// the connection, which will allow us to reconnect from the connections.
+		$connection->setReconnector(function($connection)
+		{
+			$this->reconnect($connection->getName());
+		});
+
+		return $connection;
+	}
+
+	/**
+	 * Prepare the read write mode for database connection instance.
+	 *
+	 * @param  \Illuminate\Database\Connection  $connection
+	 * @param  string  $type
+	 * @return \Illuminate\Database\Connection
+	 */
+	protected function setPdoForType(Connection $connection, $type = null)
+	{
+		if ($type == 'read')
+		{
+			$connection->setPdo($connection->getReadPdo());
+		}
+		elseif ($type == 'write')
+		{
+			$connection->setReadPdo($connection->getPdo());
+		}
+
+		return $connection;
+	}
+
+	/**
+	 * Get the configuration for a connection.
+	 *
+	 * @param  string  $name
+	 * @return array
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	protected function getConfig($name)
+	{
+		$name = $name ?: $this->getDefaultConnection();
+
+		// To get the database connection configuration, we will just pull each of the
+		// connection configurations and get the configurations for the given name.
+		// If the configuration doesn't exist, we'll throw an exception and bail.
+		$connections = $this->app['config']['database.connections'];
+
+		if (is_null($config = array_get($connections, $name)))
+		{
+			throw new \InvalidArgumentException("Database [$name] not configured.");
+		}
+
+		return $config;
+	}
+
+	/**
+	 * Get the default connection name.
+	 *
+	 * @return string
+	 */
+	public function getDefaultConnection()
+	{
+		return $this->app['config']['database.default'];
+	}
+
+	/**
+	 * Set the default connection name.
+	 *
+	 * @param  string  $name
+	 * @return void
+	 */
+	public function setDefaultConnection($name)
+	{
+		$this->app['config']['database.default'] = $name;
+	}
+
+	/**
+	 * Register an extension connection resolver.
+	 *
+	 * @param  string    $name
+	 * @param  callable  $resolver
+	 * @return void
+	 */
+	public function extend($name, callable $resolver)
+	{
+		$this->extensions[$name] = $resolver;
+	}
+
+	/**
+	 * Return all of the created connections.
+	 *
+	 * @return array
+	 */
+	public function getConnections()
+	{
+		return $this->connections;
+	}
+
+	/**
+	 * Dynamically pass methods to the default connection.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 */
+	public function __call($method, $parameters)
+	{
+		return call_user_func_array(array($this->connection(), $method), $parameters);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/DatabaseServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/DatabaseServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Database/DatabaseServiceProvider.php
new file mode 100755
index 0000000..4926422
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/DatabaseServiceProvider.php
@@ -0,0 +1,45 @@
+<?php namespace Illuminate\Database;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Database\Connectors\ConnectionFactory;
+
+class DatabaseServiceProvider extends ServiceProvider {
+
+	/**
+	 * Bootstrap the application events.
+	 *
+	 * @return void
+	 */
+	public function boot()
+	{
+		Model::setConnectionResolver($this->app['db']);
+
+		Model::setEventDispatcher($this->app['events']);
+	}
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		// The connection factory is used to create the actual connection instances on
+		// the database. We will inject the factory into the manager so that it may
+		// make the connections while they are actually needed and not of before.
+		$this->app->bindShared('db.factory', function($app)
+		{
+			return new ConnectionFactory($app);
+		});
+
+		// The database manager is used to resolve various connections, since multiple
+		// connections might be managed. It also implements the connection resolver
+		// interface which may be used by other components requiring connections.
+		$this->app->bindShared('db', function($app)
+		{
+			return new DatabaseManager($app, $app['db.factory']);
+		});
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php
new file mode 100755
index 0000000..088b1c5
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php
@@ -0,0 +1,987 @@
+<?php namespace Illuminate\Database\Eloquent;
+
+use Closure;
+use Illuminate\Database\Query\Expression;
+use Illuminate\Database\Eloquent\Relations\Relation;
+use Illuminate\Database\Query\Builder as QueryBuilder;
+
+class Builder {
+
+	/**
+	 * The base query builder instance.
+	 *
+	 * @var \Illuminate\Database\Query\Builder
+	 */
+	protected $query;
+
+	/**
+	 * The model being queried.
+	 *
+	 * @var \Illuminate\Database\Eloquent\Model
+	 */
+	protected $model;
+
+	/**
+	 * The relationships that should be eager loaded.
+	 *
+	 * @var array
+	 */
+	protected $eagerLoad = array();
+
+	/**
+	 * All of the registered builder macros.
+	 *
+	 * @var array
+	 */
+	protected $macros = array();
+
+	/**
+	 * A replacement for the typical delete function.
+	 *
+	 * @var \Closure
+	 */
+	protected $onDelete;
+
+	/**
+	 * The methods that should be returned from query builder.
+	 *
+	 * @var array
+	 */
+	protected $passthru = array(
+		'toSql', 'lists', 'insert', 'insertGetId', 'pluck', 'count',
+		'min', 'max', 'avg', 'sum', 'exists', 'getBindings',
+	);
+
+	/**
+	 * Create a new Eloquent query builder instance.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @return void
+	 */
+	public function __construct(QueryBuilder $query)
+	{
+		$this->query = $query;
+	}
+
+	/**
+	 * Find a model by its primary key.
+	 *
+	 * @param  mixed  $id
+	 * @param  array  $columns
+	 * @return \Illuminate\Database\Eloquent\Model|static|null
+	 */
+	public function find($id, $columns = array('*'))
+	{
+		if (is_array($id))
+		{
+			return $this->findMany($id, $columns);
+		}
+
+		$this->query->where($this->model->getQualifiedKeyName(), '=', $id);
+
+		return $this->first($columns);
+	}
+
+	/**
+	 * Find a model by its primary key.
+	 *
+	 * @param  array  $id
+	 * @param  array  $columns
+	 * @return \Illuminate\Database\Eloquent\Model|Collection|static
+	 */
+	public function findMany($id, $columns = array('*'))
+	{
+		if (empty($id)) return $this->model->newCollection();
+
+		$this->query->whereIn($this->model->getQualifiedKeyName(), $id);
+
+		return $this->get($columns);
+	}
+
+	/**
+	 * Find a model by its primary key or throw an exception.
+	 *
+	 * @param  mixed  $id
+	 * @param  array  $columns
+	 * @return \Illuminate\Database\Eloquent\Model|static
+	 *
+	 * @throws \Illuminate\Database\Eloquent\ModelNotFoundException
+	 */
+	public function findOrFail($id, $columns = array('*'))
+	{
+		if ( ! is_null($model = $this->find($id, $columns))) return $model;
+
+		throw (new ModelNotFoundException)->setModel(get_class($this->model));
+	}
+
+	/**
+	 * Execute the query and get the first result.
+	 *
+	 * @param  array  $columns
+	 * @return \Illuminate\Database\Eloquent\Model|static|null
+	 */
+	public function first($columns = array('*'))
+	{
+		return $this->take(1)->get($columns)->first();
+	}
+
+	/**
+	 * Execute the query and get the first result or throw an exception.
+	 *
+	 * @param  array  $columns
+	 * @return \Illuminate\Database\Eloquent\Model|static
+	 *
+	 * @throws \Illuminate\Database\Eloquent\ModelNotFoundException
+	 */
+	public function firstOrFail($columns = array('*'))
+	{
+		if ( ! is_null($model = $this->first($columns))) return $model;
+
+		throw (new ModelNotFoundException)->setModel(get_class($this->model));
+	}
+
+	/**
+	 * Execute the query as a "select" statement.
+	 *
+	 * @param  array  $columns
+	 * @return \Illuminate\Database\Eloquent\Collection|static[]
+	 */
+	public function get($columns = array('*'))
+	{
+		$models = $this->getModels($columns);
+
+		// If we actually found models we will also eager load any relationships that
+		// have been specified as needing to be eager loaded, which will solve the
+		// n+1 query issue for the developers to avoid running a lot of queries.
+		if (count($models) > 0)
+		{
+			$models = $this->eagerLoadRelations($models);
+		}
+
+		return $this->model->newCollection($models);
+	}
+
+	/**
+	 * Pluck a single column from the database.
+	 *
+	 * @param  string  $column
+	 * @return mixed
+	 */
+	public function pluck($column)
+	{
+		$result = $this->first(array($column));
+
+		if ($result) return $result->{$column};
+	}
+
+	/**
+	 * Chunk the results of the query.
+	 *
+	 * @param  int  $count
+	 * @param  callable  $callback
+	 * @return void
+	 */
+	public function chunk($count, callable $callback)
+	{
+		$results = $this->forPage($page = 1, $count)->get();
+
+		while (count($results) > 0)
+		{
+			// On each chunk result set, we will pass them to the callback and then let the
+			// developer take care of everything within the callback, which allows us to
+			// keep the memory low for spinning through large result sets for working.
+			call_user_func($callback, $results);
+
+			$page++;
+
+			$results = $this->forPage($page, $count)->get();
+		}
+	}
+
+	/**
+	 * Get an array with the values of a given column.
+	 *
+	 * @param  string  $column
+	 * @param  string  $key
+	 * @return array
+	 */
+	public function lists($column, $key = null)
+	{
+		$results = $this->query->lists($column, $key);
+
+		// If the model has a mutator for the requested column, we will spin through
+		// the results and mutate the values so that the mutated version of these
+		// columns are returned as you would expect from these Eloquent models.
+		if ($this->model->hasGetMutator($column))
+		{
+			foreach ($results as $key => &$value)
+			{
+				$fill = array($column => $value);
+
+				$value = $this->model->newFromBuilder($fill)->$column;
+			}
+		}
+
+		return $results;
+	}
+
+	/**
+	 * Get a paginator for the "select" statement.
+	 *
+	 * @param  int    $perPage
+	 * @param  array  $columns
+	 * @return \Illuminate\Pagination\Paginator
+	 */
+	public function paginate($perPage = null, $columns = array('*'))
+	{
+		$perPage = $perPage ?: $this->model->getPerPage();
+
+		$paginator = $this->query->getConnection()->getPaginator();
+
+		if (isset($this->query->groups))
+		{
+			return $this->groupedPaginate($paginator, $perPage, $columns);
+		}
+
+		return $this->ungroupedPaginate($paginator, $perPage, $columns);
+	}
+
+	/**
+	 * Get a paginator for a grouped statement.
+	 *
+	 * @param  \Illuminate\Pagination\Factory  $paginator
+	 * @param  int    $perPage
+	 * @param  array  $columns
+	 * @return \Illuminate\Pagination\Paginator
+	 */
+	protected function groupedPaginate($paginator, $perPage, $columns)
+	{
+		$results = $this->get($columns)->all();
+
+		return $this->query->buildRawPaginator($paginator, $results, $perPage);
+	}
+
+	/**
+	 * Get a paginator for an ungrouped statement.
+	 *
+	 * @param  \Illuminate\Pagination\Factory  $paginator
+	 * @param  int    $perPage
+	 * @param  array  $columns
+	 * @return \Illuminate\Pagination\Paginator
+	 */
+	protected function ungroupedPaginate($paginator, $perPage, $columns)
+	{
+		$total = $this->query->getPaginationCount();
+
+		// Once we have the paginator we need to set the limit and offset values for
+		// the query so we can get the properly paginated items. Once we have an
+		// array of items we can create the paginator instances for the items.
+		$page = $paginator->getCurrentPage($total);
+
+		$this->query->forPage($page, $perPage);
+
+		return $paginator->make($this->get($columns)->all(), $total, $perPage);
+	}
+
+	/**
+	 * Get a paginator only supporting simple next and previous links.
+	 *
+	 * This is more efficient on larger data-sets, etc.
+	 *
+	 * @param  int    $perPage
+	 * @param  array  $columns
+	 * @return \Illuminate\Pagination\Paginator
+	 */
+	public function simplePaginate($perPage = null, $columns = array('*'))
+	{
+		$paginator = $this->query->getConnection()->getPaginator();
+
+		$page = $paginator->getCurrentPage();
+
+		$perPage = $perPage ?: $this->model->getPerPage();
+
+		$this->query->skip(($page - 1) * $perPage)->take($perPage + 1);
+
+		return $paginator->make($this->get($columns)->all(), $perPage);
+	}
+
+	/**
+	 * Update a record in the database.
+	 *
+	 * @param  array  $values
+	 * @return int
+	 */
+	public function update(array $values)
+	{
+		return $this->query->update($this->addUpdatedAtColumn($values));
+	}
+
+	/**
+	 * Increment a column's value by a given amount.
+	 *
+	 * @param  string  $column
+	 * @param  int     $amount
+	 * @param  array   $extra
+	 * @return int
+	 */
+	public function increment($column, $amount = 1, array $extra = array())
+	{
+		$extra = $this->addUpdatedAtColumn($extra);
+
+		return $this->query->increment($column, $amount, $extra);
+	}
+
+	/**
+	 * Decrement a column's value by a given amount.
+	 *
+	 * @param  string  $column
+	 * @param  int     $amount
+	 * @param  array   $extra
+	 * @return int
+	 */
+	public function decrement($column, $amount = 1, array $extra = array())
+	{
+		$extra = $this->addUpdatedAtColumn($extra);
+
+		return $this->query->decrement($column, $amount, $extra);
+	}
+
+	/**
+	 * Add the "updated at" column to an array of values.
+	 *
+	 * @param  array  $values
+	 * @return array
+	 */
+	protected function addUpdatedAtColumn(array $values)
+	{
+		if ( ! $this->model->usesTimestamps()) return $values;
+
+		$column = $this->model->getUpdatedAtColumn();
+
+		return array_add($values, $column, $this->model->freshTimestampString());
+	}
+
+	/**
+	 * Delete a record from the database.
+	 *
+	 * @return mixed
+	 */
+	public function delete()
+	{
+		if (isset($this->onDelete))
+		{
+			return call_user_func($this->onDelete, $this);
+		}
+
+		return $this->query->delete();
+	}
+
+	/**
+	 * Run the default delete function on the builder.
+	 *
+	 * @return mixed
+	 */
+	public function forceDelete()
+	{
+		return $this->query->delete();
+	}
+
+	/**
+	 * Register a replacement for the default delete function.
+	 *
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function onDelete(Closure $callback)
+	{
+		$this->onDelete = $callback;
+	}
+
+	/**
+	 * Get the hydrated models without eager loading.
+	 *
+	 * @param  array  $columns
+	 * @return \Illuminate\Database\Eloquent\Model[]
+	 */
+	public function getModels($columns = array('*'))
+	{
+		// First, we will simply get the raw results from the query builders which we
+		// can use to populate an array with Eloquent models. We will pass columns
+		// that should be selected as well, which are typically just everything.
+		$results = $this->query->get($columns);
+
+		$connection = $this->model->getConnectionName();
+
+		$models = array();
+
+		// Once we have the results, we can spin through them and instantiate a fresh
+		// model instance for each records we retrieved from the database. We will
+		// also set the proper connection name for the model after we create it.
+		foreach ($results as $result)
+		{
+			$models[] = $model = $this->model->newFromBuilder($result);
+
+			$model->setConnection($connection);
+		}
+
+		return $models;
+	}
+
+	/**
+	 * Eager load the relationships for the models.
+	 *
+	 * @param  array  $models
+	 * @return array
+	 */
+	public function eagerLoadRelations(array $models)
+	{
+		foreach ($this->eagerLoad as $name => $constraints)
+		{
+			// For nested eager loads we'll skip loading them here and they will be set as an
+			// eager load on the query to retrieve the relation so that they will be eager
+			// loaded on that query, because that is where they get hydrated as models.
+			if (strpos($name, '.') === false)
+			{
+				$models = $this->loadRelation($models, $name, $constraints);
+			}
+		}
+
+		return $models;
+	}
+
+	/**
+	 * Eagerly load the relationship on a set of models.
+	 *
+	 * @param  array     $models
+	 * @param  string    $name
+	 * @param  \Closure  $constraints
+	 * @return array
+	 */
+	protected function loadRelation(array $models, $name, Closure $constraints)
+	{
+		// First we will "back up" the existing where conditions on the query so we can
+		// add our eager constraints. Then we will merge the wheres that were on the
+		// query back to it in order that any where conditions might be specified.
+		$relation = $this->getRelation($name);
+
+		$relation->addEagerConstraints($models);
+
+		call_user_func($constraints, $relation);
+
+		$models = $relation->initRelation($models, $name);
+
+		// Once we have the results, we just match those back up to their parent models
+		// using the relationship instance. Then we just return the finished arrays
+		// of models which have been eagerly hydrated and are readied for return.
+		$results = $relation->getEager();
+
+		return $relation->match($models, $results, $name);
+	}
+
+	/**
+	 * Get the relation instance for the given relation name.
+	 *
+	 * @param  string  $relation
+	 * @return \Illuminate\Database\Eloquent\Relations\Relation
+	 */
+	public function getRelation($relation)
+	{
+		// We want to run a relationship query without any constrains so that we will
+		// not have to remove these where clauses manually which gets really hacky
+		// and is error prone while we remove the developer's own where clauses.
+		$query = Relation::noConstraints(function() use ($relation)
+		{
+			return $this->getModel()->$relation();
+		});
+
+		$nested = $this->nestedRelations($relation);
+
+		// If there are nested relationships set on the query, we will put those onto
+		// the query instances so that they can be handled after this relationship
+		// is loaded. In this way they will all trickle down as they are loaded.
+		if (count($nested) > 0)
+		{
+			$query->getQuery()->with($nested);
+		}
+
+		return $query;
+	}
+
+	/**
+	 * Get the deeply nested relations for a given top-level relation.
+	 *
+	 * @param  string  $relation
+	 * @return array
+	 */
+	protected function nestedRelations($relation)
+	{
+		$nested = array();
+
+		// We are basically looking for any relationships that are nested deeper than
+		// the given top-level relationship. We will just check for any relations
+		// that start with the given top relations and adds them to our arrays.
+		foreach ($this->eagerLoad as $name => $constraints)
+		{
+			if ($this->isNested($name, $relation))
+			{
+				$nested[substr($name, strlen($relation.'.'))] = $constraints;
+			}
+		}
+
+		return $nested;
+	}
+
+	/**
+	 * Determine if the relationship is nested.
+	 *
+	 * @param  string  $name
+	 * @param  string  $relation
+	 * @return bool
+	 */
+	protected function isNested($name, $relation)
+	{
+		$dots = str_contains($name, '.');
+
+		return $dots && starts_with($name, $relation.'.');
+	}
+
+	/**
+	 * Add a basic where clause to the query.
+	 *
+	 * @param  string  $column
+	 * @param  string  $operator
+	 * @param  mixed   $value
+	 * @param  string  $boolean
+	 * @return $this
+	 */
+	public function where($column, $operator = null, $value = null, $boolean = 'and')
+	{
+		if ($column instanceof Closure)
+		{
+			$query = $this->model->newQueryWithoutScopes();
+
+			call_user_func($column, $query);
+
+			$this->query->addNestedWhereQuery($query->getQuery(), $boolean);
+		}
+		else
+		{
+			call_user_func_array(array($this->query, 'where'), func_get_args());
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Add an "or where" clause to the query.
+	 *
+	 * @param  string  $column
+	 * @param  string  $operator
+	 * @param  mixed   $value
+	 * @return \Illuminate\Database\Eloquent\Builder|static
+	 */
+	public function orWhere($column, $operator = null, $value = null)
+	{
+		return $this->where($column, $operator, $value, 'or');
+	}
+
+	/**
+	 * Add a relationship count condition to the query.
+	 *
+	 * @param  string  $relation
+	 * @param  string  $operator
+	 * @param  int     $count
+	 * @param  string  $boolean
+	 * @param  \Closure|null  $callback
+	 * @return \Illuminate\Database\Eloquent\Builder|static
+	 */
+	public function has($relation, $operator = '>=', $count = 1, $boolean = 'and', Closure $callback = null)
+	{
+		if (strpos($relation, '.') !== false)
+		{
+			return $this->hasNested($relation, $operator, $count, $boolean, $callback);
+		}
+
+		$relation = $this->getHasRelationQuery($relation);
+
+		$query = $relation->getRelationCountQuery($relation->getRelated()->newQuery(), $this);
+
+		if ($callback) call_user_func($callback, $query);
+
+		return $this->addHasWhere($query, $relation, $operator, $count, $boolean);
+	}
+
+	/**
+	 * Add nested relationship count conditions to the query.
+	 *
+	 * @param  string  $relations
+	 * @param  string  $operator
+	 * @param  int     $count
+	 * @param  string  $boolean
+	 * @param  \Closure  $callback
+	 * @return \Illuminate\Database\Eloquent\Builder|static
+	 */
+	protected function hasNested($relations, $operator = '>=', $count = 1, $boolean = 'and', $callback = null)
+	{
+		$relations = explode('.', $relations);
+
+		// In order to nest "has", we need to add count relation constraints on the
+		// callback Closure. We'll do this by simply passing the Closure its own
+		// reference to itself so it calls itself recursively on each segment.
+		$closure = function ($q) use (&$closure, &$relations, $operator, $count, $boolean, $callback)
+		{
+			if (count($relations) > 1)
+			{
+				$q->whereHas(array_shift($relations), $closure);
+			}
+			else
+			{
+				$q->has(array_shift($relations), $operator, $count, $boolean, $callback);
+			}
+		};
+
+		return $this->whereHas(array_shift($relations), $closure);
+	}
+
+	/**
+	 * Add a relationship count condition to the query.
+	 *
+	 * @param  string  $relation
+	 * @param  string  $boolean
+	 * @param  \Closure|null  $callback
+	 * @return \Illuminate\Database\Eloquent\Builder|static
+	 */
+	public function doesntHave($relation, $boolean = 'and', Closure $callback = null)
+	{
+		return $this->has($relation, '<', 1, $boolean, $callback);
+	}
+
+	/**
+	 * Add a relationship count condition to the query with where clauses.
+	 *
+	 * @param  string    $relation
+	 * @param  \Closure  $callback
+	 * @param  string    $operator
+	 * @param  int       $count
+	 * @return \Illuminate\Database\Eloquent\Builder|static
+	 */
+	public function whereHas($relation, Closure $callback, $operator = '>=', $count = 1)
+	{
+		return $this->has($relation, $operator, $count, 'and', $callback);
+	}
+
+	/**
+	 * Add a relationship count condition to the query with where clauses.
+	 *
+	 * @param  string  $relation
+	 * @param  \Closure|null  $callback
+	 * @return \Illuminate\Database\Eloquent\Builder|static
+	 */
+	public function whereDoesntHave($relation, Closure $callback = null)
+	{
+		return $this->doesntHave($relation, 'and', $callback);
+	}
+
+	/**
+	 * Add a relationship count condition to the query with an "or".
+	 *
+	 * @param  string  $relation
+	 * @param  string  $operator
+	 * @param  int     $count
+	 * @return \Illuminate\Database\Eloquent\Builder|static
+	 */
+	public function orHas($relation, $operator = '>=', $count = 1)
+	{
+		return $this->has($relation, $operator, $count, 'or');
+	}
+
+	/**
+	 * Add a relationship count condition to the query with where clauses and an "or".
+	 *
+	 * @param  string    $relation
+	 * @param  \Closure  $callback
+	 * @param  string    $operator
+	 * @param  int       $count
+	 * @return \Illuminate\Database\Eloquent\Builder|static
+	 */
+	public function orWhereHas($relation, Closure $callback, $operator = '>=', $count = 1)
+	{
+		return $this->has($relation, $operator, $count, 'or', $callback);
+	}
+
+	/**
+	 * Add the "has" condition where clause to the query.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $hasQuery
+	 * @param  \Illuminate\Database\Eloquent\Relations\Relation  $relation
+	 * @param  string  $operator
+	 * @param  int  $count
+	 * @param  string  $boolean
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	protected function addHasWhere(Builder $hasQuery, Relation $relation, $operator, $count, $boolean)
+	{
+		$this->mergeWheresToHas($hasQuery, $relation);
+
+		if (is_numeric($count))
+		{
+			$count = new Expression($count);
+		}
+
+		return $this->where(new Expression('('.$hasQuery->toSql().')'), $operator, $count, $boolean);
+	}
+
+	/**
+	 * Merge the "wheres" from a relation query to a has query.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Builder  $hasQuery
+	 * @param  \Illuminate\Database\Eloquent\Relations\Relation  $relation
+	 * @return void
+	 */
+	protected function mergeWheresToHas(Builder $hasQuery, Relation $relation)
+	{
+		// Here we have the "has" query and the original relation. We need to copy over any
+		// where clauses the developer may have put in the relationship function over to
+		// the has query, and then copy the bindings from the "has" query to the main.
+		$relationQuery = $relation->getBaseQuery();
+
+		$hasQuery = $hasQuery->getModel()->removeGlobalScopes($hasQuery);
+
+		$hasQuery->mergeWheres(
+			$relationQuery->wheres, $relationQuery->getBindings()
+		);
+
+		$this->query->mergeBindings($hasQuery->getQuery());
+	}
+
+	/**
+	 * Get the "has relation" base query instance.
+	 *
+	 * @param  string  $relation
+	 * @return \Illuminate\Database\Eloquent\Builder
+	 */
+	protected function getHasRelationQuery($relation)
+	{
+		return Relation::noConstraints(function() use ($relation)
+		{
+			return $this->getModel()->$relation();
+		});
+	}
+
+	/**
+	 * Set the relationships that should be eager loaded.
+	 *
+	 * @param  mixed  $relations
+	 * @return $this
+	 */
+	public function with($relations)
+	{
+		if (is_string($relations)) $relations = func_get_args();
+
+		$eagers = $this->parseRelations($relations);
+
+		$this->eagerLoad = array_merge($this->eagerLoad, $eagers);
+
+		return $this;
+	}
+
+	/**
+	 * Parse a list of relations into individuals.
+	 *
+	 * @param  array  $relations
+	 * @return array
+	 */
+	protected function parseRelations(array $relations)
+	{
+		$results = array();
+
+		foreach ($relations as $name => $constraints)
+		{
+			// If the "relation" value is actually a numeric key, we can assume that no
+			// constraints have been specified for the eager load and we'll just put
+			// an empty Closure with the loader so that we can treat all the same.
+			if (is_numeric($name))
+			{
+				$f = function() {};
+
+				list($name, $constraints) = array($constraints, $f);
+			}
+
+			// We need to separate out any nested includes. Which allows the developers
+			// to load deep relationships using "dots" without stating each level of
+			// the relationship with its own key in the array of eager load names.
+			$results = $this->parseNested($name, $results);
+
+			$results[$name] = $constraints;
+		}
+
+		return $results;
+	}
+
+	/**
+	 * Parse the nested relationships in a relation.
+	 *
+	 * @param  string  $name
+	 * @param  array   $results
+	 * @return array
+	 */
+	protected function parseNested($name, $results)
+	{
+		$progress = array();
+
+		// If the relation has already been set on the result array, we will not set it
+		// again, since that would override any constraints that were already placed
+		// on the relationships. We will only set the ones that are not specified.
+		foreach (explode('.', $name) as $segment)
+		{
+			$progress[] = $segment;
+
+			if ( ! isset($results[$last = implode('.', $progress)]))
+			{
+				$results[$last] = function() {};
+			}
+		}
+
+		return $results;
+	}
+
+	/**
+	 * Call the given model scope on the underlying model.
+	 *
+	 * @param  string  $scope
+	 * @param  array   $parameters
+	 * @return \Illuminate\Database\Query\Builder
+	 */
+	protected function callScope($scope, $parameters)
+	{
+		array_unshift($parameters, $this);
+
+		return call_user_func_array(array($this->model, $scope), $parameters) ?: $this;
+	}
+
+	/**
+	 * Get the underlying query builder instance.
+	 *
+	 * @return \Illuminate\Database\Query\Builder|static
+	 */
+	public function getQuery()
+	{
+		return $this->query;
+	}
+
+	/**
+	 * Set the underlying query builder instance.
+	 *
+	 * @param  \Illuminate\Database\Query\Builder  $query
+	 * @return void
+	 */
+	public function setQuery($query)
+	{
+		$this->query = $query;
+	}
+
+	/**
+	 * Get the relationships being eagerly loaded.
+	 *
+	 * @return array
+	 */
+	public function getEagerLoads()
+	{
+		return $this->eagerLoad;
+	}
+
+	/**
+	 * Set the relationships being eagerly loaded.
+	 *
+	 * @param  array  $eagerLoad
+	 * @return void
+	 */
+	public function setEagerLoads(array $eagerLoad)
+	{
+		$this->eagerLoad = $eagerLoad;
+	}
+
+	/**
+	 * Get the model instance being queried.
+	 *
+	 * @return \Illuminate\Database\Eloquent\Model
+	 */
+	public function getModel()
+	{
+		return $this->model;
+	}
+
+	/**
+	 * Set a model instance for the model being queried.
+	 *
+	 * @param  \Illuminate\Database\Eloquent\Model  $model
+	 * @return $this
+	 */
+	public function setModel(Model $model)
+	{
+		$this->model = $model;
+
+		$this->query->from($model->getTable());
+
+		return $this;
+	}
+
+	/**
+	 * Extend the builder with a given callback.
+	 *
+	 * @param  string    $name
+	 * @param  \Closure  $callback
+	 * @return void
+	 */
+	public function macro($name, Closure $callback)
+	{
+		$this->macros[$name] = $callback;
+	}
+
+	/**
+	 * Get the given macro by name.
+	 *
+	 * @param  string  $name
+	 * @return \Closure
+	 */
+	public function getMacro($name)
+	{
+		return array_get($this->macros, $name);
+	}
+
+	/**
+	 * Dynamically handle calls into the query instance.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 */
+	public function __call($method, $parameters)
+	{
+		if (isset($this->macros[$method]))
+		{
+			array_unshift($parameters, $this);
+
+			return call_user_func_array($this->macros[$method], $parameters);
+		}
+		elseif (method_exists($this->model, $scope = 'scope'.ucfirst($method)))
+		{
+			return $this->callScope($scope, $parameters);
+		}
+
+		$result = call_user_func_array(array($this->query, $method), $parameters);
+
+		return in_array($method, $this->passthru) ? $result : $this;
+	}
+
+	/**
+	 * Force a clone of the underlying query builder when cloning.
+	 *
+	 * @return void
+	 */
+	public function __clone()
+	{
+		$this->query = clone $this->query;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php
new file mode 100755
index 0000000..dc520e5
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php
@@ -0,0 +1,253 @@
+<?php namespace Illuminate\Database\Eloquent;
+
+use Illuminate\Support\Collection as BaseCollection;
+
+class Collection extends BaseCollection {
+
+	/**
+	 * Find a model in the collection by key.
+	 *
+	 * @param  mixed  $key
+	 * @param  mixed  $default
+	 * @return \Illuminate\Database\Eloquent\Model
+	 */
+	public function find($key, $default = null)
+	{
+		if ($key instanceof Model)
+		{
+			$key = $key->getKey();
+		}
+
+		return array_first($this->items, function($itemKey, $model) use ($key)
+		{
+			return $model->getKey() == $key;
+
+		}, $default);
+	}
+
+	/**
+	 * Load a set of relationships onto the collection.
+	 *
+	 * @param  mixed  $relations
+	 * @return $this
+	 */
+	public function load($relations)
+	{
+		if (count($this->items) > 0)
+		{
+			if (is_string($relations)) $relations = func_get_args();
+
+			$query = $this->first()->newQuery()->with($relations);
+
+			$this->items = $query->eagerLoadRelations($this->items);
+		}
+
+		return $this;
+	}
+
+	/**
+	 * Add an item to the collection.
+	 *
+	 * @param  mixed  $item
+	 * @return $this
+	 */
+	public function add($item)
+	{
+		$this->items[] = $item;
+
+		return $this;
+	}
+
+	/**
+	 * Determine if a key exists in the collection.
+	 *
+	 * @param  mixed  $key
+	 * @return bool
+	 */
+	public function contains($key)
+	{
+		return ! is_null($this->find($key));
+	}
+
+	/**
+	 * Fetch a nested element of the collection.
+	 *
+	 * @param  string  $key
+	 * @return static
+	 */
+	public function fetch($key)
+	{
+		return new static(array_fetch($this->toArray(), $key));
+	}
+
+	/**
+	 * Get the max value of a given key.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function max($key)
+	{
+		return $this->reduce(function($result, $item) use ($key)
+		{
+			return (is_null($result) || $item->{$key} > $result) ? $item->{$key} : $result;
+		});
+	}
+
+	/**
+	 * Get the min value of a given key.
+	 *
+	 * @param  string  $key
+	 * @return mixed
+	 */
+	public function min($key)
+	{
+		return $this->reduce(function($result, $item) use ($key)
+		{
+			return (is_null($result) || $item->{$key} < $result) ? $item->{$key} : $result;
+		});
+	}
+
+	/**
+	 * Get the array of primary keys
+	 *
+	 * @return array
+	 */
+	public function modelKeys()
+	{
+		return array_map(function($m) { return $m->getKey(); }, $this->items);
+	}
+
+	/**
+	 * Merge the collection with the given items.
+	 *
+	 * @param  \ArrayAccess|array  $items
+	 * @return static
+	 */
+	public function merge($items)
+	{
+		$dictionary = $this->getDictionary();
+
+		foreach ($items as $item)
+		{
+			$dictionary[$item->getKey()] = $item;
+		}
+
+		return new static(array_values($dictionary));
+	}
+
+	/**
+	 * Diff the collection with the given items.
+	 *
+	 * @param  \ArrayAccess|array  $items
+	 * @return static
+	 */
+	public function diff($items)
+	{
+		$diff = new static;
+
+		$dictionary = $this->getDictionary($items);
+
+		foreach ($this->items as $item)
+		{
+			if ( ! isset($dictionary[$item->getKey()]))
+			{
+				$diff->add($item);
+			}
+		}
+
+		return $diff;
+	}
+
+	/**
+	 * Intersect the collection with the given items.
+	 *
+ 	 * @param  \ArrayAccess|array  $items
+	 * @return static
+	 */
+	public function intersect($items)
+	{
+		$intersect = new static;
+
+		$dictionary = $this->getDictionary($items);
+
+		foreach ($this->items as $item)
+		{
+			if (isset($dictionary[$item->getKey()]))
+			{
+				$intersect->add($item);
+			}
+		}
+
+		return $intersect;
+	}
+
+	/**
+	 * Return only unique items from the collection.
+	 *
+	 * @return static
+	 */
+	public function unique()
+	{
+		$dictionary = $this->getDictionary();
+
+		return new static(array_values($dictionary));
+	}
+
+	/**
+	 * Returns only the models from the collection with the specified keys.
+	 *
+	 * @param  mixed  $keys
+	 * @return static
+	 */
+	public function only($keys)
+	{
+		$dictionary = array_only($this->getDictionary(), $keys);
+
+		return new static(array_values($dictionary));
+	}
+
+	/**
+	 * Returns all models in the collection except the models with specified keys.
+	 *
+	 * @param  mixed  $keys
+	 * @return static
+	 */
+	public function except($keys)
+	{
+		$dictionary = array_except($this->getDictionary(), $keys);
+
+		return new static(array_values($dictionary));
+	}
+
+	/**
+	 * Get a dictionary keyed by primary keys.
+	 *
+	 * @param  \ArrayAccess|array  $items
+	 * @return array
+	 */
+	public function getDictionary($items = null)
+	{
+		$items = is_null($items) ? $this->items : $items;
+
+		$dictionary = array();
+
+		foreach ($items as $value)
+		{
+			$dictionary[$value->getKey()] = $value;
+		}
+
+		return $dictionary;
+	}
+
+	/**
+	 * Get a base Support collection instance from this collection.
+	 *
+	 * @return \Illuminate\Support\Collection
+	 */
+	public function toBase()
+	{
+		return new BaseCollection($this->items);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Database/Eloquent/MassAssignmentException.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/MassAssignmentException.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/MassAssignmentException.php
new file mode 100755
index 0000000..c7fe78e
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/MassAssignmentException.php
@@ -0,0 +1,3 @@
+<?php namespace Illuminate\Database\Eloquent;
+
+class MassAssignmentException extends \RuntimeException {}


[25/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php b/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php
new file mode 100644
index 0000000..61ee86c
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * Whoops - php errors for cool kids
+ * @author Filipe Dobreira <http://github.com/filp>
+ */
+
+namespace Whoops\Handler;
+
+use SimpleXMLElement;
+use Whoops\Exception\Formatter;
+
+/**
+ * Catches an exception and converts it to an XML
+ * response. Additionally can also return exception
+ * frames for consumption by an API.
+ */
+class XmlResponseHandler extends Handler
+{
+    /**
+     * @var bool
+     */
+    private $returnFrames = false;
+
+    /**
+     * @param  bool|null  $returnFrames
+     * @return bool|$this
+     */
+    public function addTraceToOutput($returnFrames = null)
+    {
+        if (func_num_args() == 0) {
+            return $this->returnFrames;
+        }
+
+        $this->returnFrames = (bool) $returnFrames;
+        return $this;
+    }
+
+    /**
+     * @return int
+     */
+    public function handle()
+    {
+        $response = array(
+            'error' => Formatter::formatExceptionAsDataArray(
+                $this->getInspector(),
+                $this->addTraceToOutput()
+            ),
+        );
+
+        echo $this->toXml($response);
+
+        return Handler::QUIT;
+    }
+
+    /**
+     * @param  SimpleXMLElement  $node Node to append data to, will be modified in place
+     * @param  array|Traversable $data
+     * @return SimpleXMLElement  The modified node, for chaining
+     */
+    private static function addDataToNode(\SimpleXMLElement $node, $data)
+    {
+        assert('is_array($data) || $node instanceof Traversable');
+
+        foreach ($data as $key => $value) {
+            if (is_numeric($key)) {
+                // Convert the key to a valid string
+                $key = "unknownNode_". (string) $key;
+            }
+
+            // Delete any char not allowed in XML element names
+            $key = preg_replace('/[^a-z0-9\-\_\.\:]/i', '', $key);
+
+            if (is_array($value)) {
+                $child = $node->addChild($key);
+                self::addDataToNode($child, $value);
+            } else {
+                $value = str_replace('&', '&amp;', print_r($value, true));
+                $node->addChild($key, $value);
+            }
+        }
+
+        return $node;
+    }
+
+    /**
+     * The main function for converting to an XML document.
+     *
+     * @param  array|Traversable $data
+     * @return string            XML
+     */
+    private static function toXml($data)
+    {
+        assert('is_array($data) || $node instanceof Traversable');
+
+        $node = simplexml_load_string("<?xml version='1.0' encoding='utf-8'?><root />");
+
+        return self::addDataToNode($node, $data)->asXML();
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Provider/Phalcon/WhoopsServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Provider/Phalcon/WhoopsServiceProvider.php b/vendor/filp/whoops/src/Whoops/Provider/Phalcon/WhoopsServiceProvider.php
new file mode 100644
index 0000000..d8d5781
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Provider/Phalcon/WhoopsServiceProvider.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * Whoops - php errors for cool kids
+ * @author Filipe Dobreira <http://github.com/filp>
+ */
+
+namespace Whoops\Provider\Phalcon;
+
+use Phalcon\DI;
+use Phalcon\DI\Exception;
+use Whoops\Handler\JsonResponseHandler;
+use Whoops\Handler\PrettyPageHandler;
+use Whoops\Run;
+
+class WhoopsServiceProvider
+{
+    /**
+     * @param DI $di
+     */
+    public function __construct(DI $di = null)
+    {
+        if (!$di) {
+            $di = DI::getDefault();
+        }
+
+        // There's only ever going to be one error page...right?
+        $di->setShared('whoops.pretty_page_handler', function () {
+            return new PrettyPageHandler();
+        });
+
+        // There's only ever going to be one error page...right?
+        $di->setShared('whoops.json_response_handler', function () {
+            $jsonHandler = new JsonResponseHandler();
+            $jsonHandler->onlyForAjaxRequests(true);
+            return $jsonHandler;
+        });
+
+        // Retrieves info on the Phalcon environment and ships it off
+        // to the PrettyPageHandler's data tables:
+        // This works by adding a new handler to the stack that runs
+        // before the error page, retrieving the shared page handler
+        // instance, and working with it to add new data tables
+        $phalcon_info_handler = function () use ($di) {
+            try {
+                $request = $di['request'];
+            } catch (Exception $e) {
+                // This error occurred too early in the application's life
+                // and the request instance is not yet available.
+                return;
+            }
+
+            // Request info:
+            $di['whoops.pretty_page_handler']->addDataTable('Phalcon Application (Request)', array(
+                'URI'         => $request->getScheme().'://'.$request->getServer('HTTP_HOST').$request->getServer('REQUEST_URI'),
+                'Request URI' => $request->getServer('REQUEST_URI'),
+                'Path Info'   => $request->getServer('PATH_INFO'),
+                'Query String' => $request->getServer('QUERY_STRING') ?: '<none>',
+                'HTTP Method' => $request->getMethod(),
+                'Script Name' => $request->getServer('SCRIPT_NAME'),
+                //'Base Path'   => $request->getBasePath(),
+                //'Base URL'    => $request->getBaseUrl(),
+                'Scheme'      => $request->getScheme(),
+                'Port'        => $request->getServer('SERVER_PORT'),
+                'Host'        => $request->getServerName(),
+            ));
+        };
+
+        $di->setShared('whoops', function () use ($di,$phalcon_info_handler) {
+            $run = new Run();
+            $run->pushHandler($di['whoops.pretty_page_handler']);
+            $run->pushHandler($phalcon_info_handler);
+            $run->pushHandler($di['whoops.json_response_handler']);
+            return $run;
+        });
+
+        $di['whoops']->register();
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Provider/Silex/WhoopsServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Provider/Silex/WhoopsServiceProvider.php b/vendor/filp/whoops/src/Whoops/Provider/Silex/WhoopsServiceProvider.php
new file mode 100644
index 0000000..69d01d3
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Provider/Silex/WhoopsServiceProvider.php
@@ -0,0 +1,111 @@
+<?php
+/**
+ * Whoops - php errors for cool kids
+ * @author Filipe Dobreira <http://github.com/filp>
+ */
+
+namespace Whoops\Provider\Silex;
+
+use RuntimeException;
+use Silex\Application;
+use Silex\ServiceProviderInterface;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpKernel\Exception\HttpException;
+use Whoops\Handler\Handler;
+use Whoops\Handler\PlainTextHandler;
+use Whoops\Handler\PrettyPageHandler;
+use Whoops\Run;
+
+class WhoopsServiceProvider implements ServiceProviderInterface
+{
+    /**
+     * @param Application $app
+     */
+    public function register(Application $app)
+    {
+        // There's only ever going to be one error page...right?
+        $app['whoops.error_page_handler'] = $app->share(function () {
+            if (PHP_SAPI === 'cli') {
+                return new PlainTextHandler();
+            } else {
+                return new PrettyPageHandler();
+            }
+        });
+
+        // Retrieves info on the Silex environment and ships it off
+        // to the PrettyPageHandler's data tables:
+        // This works by adding a new handler to the stack that runs
+        // before the error page, retrieving the shared page handler
+        // instance, and working with it to add new data tables
+        $app['whoops.silex_info_handler'] = $app->protect(function () use ($app) {
+            try {
+                /** @var Request $request */
+                $request = $app['request'];
+            } catch (RuntimeException $e) {
+                // This error occurred too early in the application's life
+                // and the request instance is not yet available.
+                return;
+            }
+
+            /** @var Handler $errorPageHandler */
+            $errorPageHandler = $app["whoops.error_page_handler"];
+
+            if ($errorPageHandler instanceof PrettyPageHandler) {
+                /** @var PrettyPageHandler $errorPageHandler */
+
+                // General application info:
+                $errorPageHandler->addDataTable('Silex Application', array(
+                    'Charset'          => $app['charset'],
+                    'Locale'           => $app['locale'],
+                    'Route Class'      => $app['route_class'],
+                    'Dispatcher Class' => $app['dispatcher_class'],
+                    'Application Class' => get_class($app),
+                ));
+
+                // Request info:
+                $errorPageHandler->addDataTable('Silex Application (Request)', array(
+                    'URI'         => $request->getUri(),
+                    'Request URI' => $request->getRequestUri(),
+                    'Path Info'   => $request->getPathInfo(),
+                    'Query String' => $request->getQueryString() ?: '<none>',
+                    'HTTP Method' => $request->getMethod(),
+                    'Script Name' => $request->getScriptName(),
+                    'Base Path'   => $request->getBasePath(),
+                    'Base URL'    => $request->getBaseUrl(),
+                    'Scheme'      => $request->getScheme(),
+                    'Port'        => $request->getPort(),
+                    'Host'        => $request->getHost(),
+                ));
+            }
+        });
+
+        $app['whoops'] = $app->share(function () use ($app) {
+            $run = new Run();
+            $run->allowQuit(false);
+            $run->pushHandler($app['whoops.error_page_handler']);
+            $run->pushHandler($app['whoops.silex_info_handler']);
+            return $run;
+        });
+
+        $app->error(function ($e) use ($app) {
+            $method = Run::EXCEPTION_HANDLER;
+
+            ob_start();
+            $app['whoops']->$method($e);
+            $response = ob_get_clean();
+            $code = $e instanceof HttpException ? $e->getStatusCode() : 500;
+
+            return new Response($response, $code);
+        });
+
+        $app['whoops']->register();
+    }
+
+    /**
+     * @see Silex\ServiceProviderInterface::boot
+     */
+    public function boot(Application $app)
+    {
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css b/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css
new file mode 100644
index 0000000..1430c7a
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css
@@ -0,0 +1,423 @@
+.cf:before, .cf:after {content: " ";display: table;} .cf:after {clear: both;} .cf {*zoom: 1;}
+body {
+  font: 14px helvetica, arial, sans-serif;
+  color: #2B2B2B;
+  background-color: #D4D4D4;
+  padding:0;
+  margin: 0;
+  max-height: 100%;
+}
+  a {
+    text-decoration: none;
+  }
+
+.container{
+    height: 100%;
+    width: 100%;
+    position: fixed;
+    margin: 0;
+    padding: 0;
+    left: 0;
+    top: 0;
+}
+
+.branding {
+  position: absolute;
+  top: 10px;
+  right: 20px;
+  color: #777777;
+  font-size: 10px;
+    z-index: 100;
+}
+  .branding a {
+    color: #CD3F3F;
+  }
+
+header {
+  padding: 30px 20px;
+  color: white;
+  background: #272727;
+  box-sizing: border-box;
+  border-left: 5px solid #CD3F3F;
+}
+  .exc-title {
+    margin: 0;
+    color: #616161;
+    text-shadow: 0 1px 2px rgba(0, 0, 0, .1);
+  }
+    .exc-title-primary { color: #CD3F3F; }
+    .exc-message {
+      font-size: 32px;
+      margin: 5px 0;
+      word-wrap: break-word;
+    }
+
+.stack-container {
+    height: 100%;
+    position: relative;
+}
+
+.details-container {
+  height: 100%;
+  overflow: auto;
+  float: right;
+  width: 70%;
+  background: #DADADA;
+}
+  .details {
+    padding: 10px;
+    padding-left: 5px;
+    border-left: 5px solid rgba(0, 0, 0, .1);
+  }
+
+.frames-container {
+  height: 100%;
+  overflow: auto;
+  float: left;
+  width: 30%;
+  background: #FFF;
+}
+  .frame {
+    padding: 14px;
+    background: #F3F3F3;
+    border-right: 1px solid rgba(0, 0, 0, .2);
+    cursor: pointer;
+  }
+    .frame.active {
+      background-color: #4288CE;
+      color: #F3F3F3;
+              box-shadow: inset -2px 0 0 rgba(255, 255, 255, .1);
+      text-shadow: 0 1px 0 rgba(0, 0, 0, .2);
+    }
+
+    .frame:not(.active):hover {
+      background: #BEE9EA;
+    }
+
+    .frame-class, .frame-function, .frame-index {
+      font-weight: bold;
+    }
+
+    .frame-index {
+      font-size: 11px;
+      color: #BDBDBD;
+    }
+
+    .frame-class {
+      color: #4288CE;
+    }
+      .active .frame-class {
+        color: #BEE9EA;
+      }
+
+    .frame-file {
+      font-family: "Inconsolata", "Fira Mono", "Source Code Pro", Monaco, Consolas, "Lucida Console", monospace;
+      word-wrap:break-word;
+    }
+
+      .frame-file .editor-link {
+        color: #272727;
+      }
+
+    .frame-line {
+      font-weight: bold;
+      color: #4288CE;
+    }
+
+    .active .frame-line { color: #BEE9EA; }
+    .frame-line:before {
+      content: ":";
+    }
+
+    .frame-code {
+      padding: 10px;
+      padding-left: 5px;
+      background: #BDBDBD;
+      display: none;
+      border-left: 5px solid #4288CE;
+    }
+
+    .frame-code.active {
+      display: block;
+    }
+
+    .frame-code .frame-file {
+      background: #C6C6C6;
+      color: #525252;
+      text-shadow: 0 1px 0 #E7E7E7;
+      padding: 10px 10px 5px 10px;
+
+      border-top-right-radius: 6px;
+      border-top-left-radius:  6px;
+
+      border: 1px solid rgba(0, 0, 0, .1);
+      border-bottom: none;
+      box-shadow: inset 0 1px 0 #DADADA;
+    }
+
+    .code-block {
+      padding: 10px;
+      margin: 0;
+      box-shadow: inset 0 0 6px rgba(0, 0, 0, .3);
+    }
+
+    .linenums {
+      margin: 0;
+      margin-left: 10px;
+    }
+
+    .frame-comments {
+      box-shadow: inset 0 0 6px rgba(0, 0, 0, .3);
+      border: 1px solid rgba(0, 0, 0, .2);
+      border-top: none;
+
+      border-bottom-right-radius: 6px;
+      border-bottom-left-radius:  6px;
+
+      padding: 5px;
+      font-size: 12px;
+      background: #404040;
+    }
+
+    .frame-comments.empty {
+      padding: 8px 15px;
+    }
+
+    .frame-comments.empty:before {
+      content: "No comments for this stack frame.";
+      font-style: italic;
+      color: #828282;
+    }
+
+    .frame-comment {
+      padding: 10px;
+      color: #D2D2D2;
+    }
+      .frame-comment a {
+        color: #BEE9EA;
+        font-weight: bold;
+        text-decoration: none;
+      }
+        .frame-comment a:hover {
+          color: #4bb1b1;
+        }
+
+    .frame-comment:not(:last-child) {
+      border-bottom: 1px dotted rgba(0, 0, 0, .3);
+    }
+
+    .frame-comment-context {
+      font-size: 10px;
+      font-weight: bold;
+      color: #86D2B6;
+    }
+
+.data-table-container label {
+  font-size: 16px;
+  font-weight: bold;
+  color: #4288CE;
+  margin: 10px 0;
+  padding: 10px 0;
+
+  display: block;
+  margin-bottom: 5px;
+  padding-bottom: 5px;
+  border-bottom: 1px dotted rgba(0, 0, 0, .2);
+}
+  .data-table {
+    width: 100%;
+    margin: 10px 0;
+  }
+
+  .data-table tbody {
+    font: 13px "Inconsolata", "Fira Mono", "Source Code Pro", Monaco, Consolas, "Lucida Console", monospace;
+  }
+
+  .data-table thead {
+    display: none;
+  }
+
+  .data-table tr {
+    padding: 5px 0;
+  }
+
+  .data-table td:first-child {
+    width: 20%;
+    min-width: 130px;
+    overflow: hidden;
+    font-weight: bold;
+    color: #463C54;
+    padding-right: 5px;
+
+  }
+
+  .data-table td:last-child {
+    width: 80%;
+    -ms-word-break: break-all;
+    word-break: break-all;
+    word-break: break-word;
+    -webkit-hyphens: auto;
+    -moz-hyphens: auto;
+    hyphens: auto;
+  }
+
+  .data-table .empty {
+    color: rgba(0, 0, 0, .3);
+    font-style: italic;
+  }
+
+.handler {
+  padding: 10px;
+  font: 14px "Inconsolata", "Fira Mono", "Source Code Pro", Monaco, Consolas, "Lucida Console", monospace;
+}
+
+.handler.active {
+  color: #BBBBBB;
+  background: #989898;
+  font-weight: bold;
+}
+
+/* prettify code style
+Uses the Doxy theme as a base */
+pre .str, code .str { color: #BCD42A; }  /* string  */
+pre .kwd, code .kwd { color: #4bb1b1;  font-weight: bold; }  /* keyword*/
+pre .com, code .com { color: #888; font-weight: bold; } /* comment */
+pre .typ, code .typ { color: #ef7c61; }  /* type  */
+pre .lit, code .lit { color: #BCD42A; }  /* literal */
+pre .pun, code .pun { color: #fff; font-weight: bold;  } /* punctuation  */
+pre .pln, code .pln { color: #e9e4e5; }  /* plaintext  */
+pre .tag, code .tag { color: #4bb1b1; }  /* html/xml tag  */
+pre .htm, code .htm { color: #dda0dd; }  /* html tag */
+pre .xsl, code .xsl { color: #d0a0d0; }  /* xslt tag */
+pre .atn, code .atn { color: #ef7c61; font-weight: normal;} /* html/xml attribute name */
+pre .atv, code .atv { color: #bcd42a; }  /* html/xml attribute value  */
+pre .dec, code .dec { color: #606; }  /* decimal  */
+pre.prettyprint, code.prettyprint {
+  font-family: "Inconsolata", "Fira Mono", "Source Code Pro", Monaco, Consolas, "Lucida Console", monospace;
+  background: #333;
+  color: #e9e4e5;
+}
+  pre.prettyprint {
+    white-space: pre-wrap;
+  }
+
+  pre.prettyprint a, code.prettyprint a {
+    text-decoration:none;
+  }
+
+  .linenums li {
+    color: #A5A5A5;
+  }
+
+  .linenums li.current{
+    background: rgba(255, 100, 100, .07);
+    padding-top: 4px;
+    padding-left: 1px;
+  }
+    .linenums li.current.active {
+      background: rgba(255, 100, 100, .17);
+    }
+
+#plain-exception {
+	display: none;
+}
+
+#copy-button {
+	display: none;
+	float: right;
+	cursor: pointer;	
+	border: 0;
+}
+
+.clipboard {
+	width:            29px;
+	height:           28px;
+	background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAcCAYAAACdz7SqAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gUUByMD0ZSoGQAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAACAklEQVRIx72Wv0sbYRjHP29y1VoXxR9UskjpXTaHoBUcpGgKkS5OZ1Ec/QeKOIhalEghoOCqQsGhFAWbISKYyaFDS1BKKW0TCYrQSdElXSReh9bkksu9iZdLbnrvvee9z/N83+d9nldo2gvjzd5Hxp4246W6J5tJszsxwvxPIbXzwBQDLgABvM1P6JsAwzCkdopl5vqIuWev2K4QpH/4QjjQci/nPCVny3iaNzMcrVUsC1sChFMpwtTu8dTqx7J9dR3a2BngUb0j7Xr+jtjasBR8f+jpNqqqoqoqmqblxjOJq/8GTfhCK8TWhmmykdhRpEIIhBCWMcD51wQXN3KwY3nvYGYgQPbXOMHJKOlMA77QCvsbugXsOFLZ+5+jGULBtyQuFB4PzlrAVSWSGWaptpdbjAcniaZv6RhcIL6VByvVZqsQouBMdutJkrrVrr1/gdjqN4Ze/3DvyBwcnnF9I7N4gC8YYdqNSHP7uD5G/7pdJRrl/ecIva1t9IRcgpolLk6qQic8eB+6GOkdrDjSf/OiTD91CS4r+jXrMqWkrgvUtuDbeVNTKGzw6SRDto5QBc5Yehlg0WbTc8mwHCeld1u+yZSySySlspTHFmZUeIkrgBYvtvPcyBdXkqWKq5OLmbk/luqVYjPOd3lxLXf/J/P7mJ0oCL/fX1Yfs4RO5CxW8C97dLBw2Q3fUwAAAABJRU5ErkJggg==');
+	background-repeat: no-repeat;
+}
+
+.help button {
+	cursor: help;
+	height:   28px;
+	float: right;
+	margin-left: 10px;
+}
+
+.help button:hover + #help-overlay {
+	display: block;
+}
+
+#help-overlay {
+	display: none;
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+	background-color: rgba(54, 54, 54, 0.5);
+}
+
+#help-overlay div {
+	width: 200px;
+	padding: 5px;
+	color: #463c54;
+	background-color: white;
+	border-radius: 10px;
+}
+
+#help-clipboard {
+	position: absolute;
+	right: 30px;
+	top: 90px;
+}
+
+#help-framestack {
+	position: absolute;
+	left: 200px;
+	top: 50px;
+}
+
+#help-exc-message {
+	position: absolute;
+	left: 65%;
+	top: 10px;
+}
+
+#help-code {
+	position: absolute;
+	right: 30px;
+	top: 250px;
+}
+
+#help-request {
+	position: absolute;
+	right: 30px;
+	top: 480px;
+}
+
+#help-appinfo {
+	position: absolute;
+	right: 30px;
+	top: 550px;
+}
+
+/* inspired by githubs kbd styles */
+kbd {
+    -moz-border-bottom-colors: none;
+    -moz-border-left-colors: none;
+    -moz-border-right-colors: none;
+    -moz-border-top-colors: none;
+    background-color: #fcfcfc;
+    border-color: #ccc #ccc #bbb;
+    border-image: none;
+    border-radius: 3px;
+    border-style: solid;
+    border-width: 1px;
+    box-shadow: 0 -1px 0 #bbb inset;
+    color: #555;
+    display: inline-block;
+    font-size: 11px;
+    line-height: 10px;
+    padding: 3px 5px;
+    vertical-align: middle;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Resources/js/whoops.base.js
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Resources/js/whoops.base.js b/vendor/filp/whoops/src/Whoops/Resources/js/whoops.base.js
new file mode 100644
index 0000000..e148707
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Resources/js/whoops.base.js
@@ -0,0 +1,79 @@
+Zepto(function($) {
+  prettyPrint();
+
+  var $frameContainer = $('.frames-container');
+  var $container      = $('.details-container');
+  var $activeLine     = $frameContainer.find('.frame.active');
+  var $activeFrame    = $container.find('.frame-code.active');
+  var headerHeight    = $('header').height();
+
+  var highlightCurrentLine = function() {
+    // Highlight the active and neighboring lines for this frame:
+    var activeLineNumber = +($activeLine.find('.frame-line').text());
+    var $lines           = $activeFrame.find('.linenums li');
+    var firstLine        = +($lines.first().val());
+
+    $($lines[activeLineNumber - firstLine - 1]).addClass('current');
+    $($lines[activeLineNumber - firstLine]).addClass('current active');
+    $($lines[activeLineNumber - firstLine + 1]).addClass('current');
+  }
+
+  // Highlight the active for the first frame:
+  highlightCurrentLine();
+
+  $frameContainer.on('click', '.frame', function() {
+    var $this  = $(this);
+    var id     = /frame\-line\-([\d]*)/.exec($this.attr('id'))[1];
+    var $codeFrame = $('#frame-code-' + id);
+
+    if ($codeFrame) {
+      $activeLine.removeClass('active');
+      $activeFrame.removeClass('active');
+
+      $this.addClass('active');
+      $codeFrame.addClass('active');
+
+      $activeLine  = $this;
+      $activeFrame = $codeFrame;
+
+      highlightCurrentLine();
+
+      $container.scrollTop(headerHeight);
+    }
+  });
+  
+  if (typeof ZeroClipboard !== "undefined") {
+	  ZeroClipboard.config({
+		  moviePath: '//ajax.cdnjs.com/ajax/libs/zeroclipboard/1.3.5/ZeroClipboard.swf',
+	  });
+
+	  var clipEl = document.getElementById("copy-button");
+	  var clip = new ZeroClipboard( clipEl );
+	  var $clipEl = $(clipEl);
+
+	  // show the button, when swf could be loaded successfully from CDN
+	  clip.on("load", function() {
+		  $clipEl.show();
+	  });
+  }
+  
+  $(document).on('keydown', function(e) {
+	  if(e.ctrlKey) {
+		  // CTRL+Arrow-UP/Arrow-Down support:
+		  // 1) select the next/prev element 
+		  // 2) make sure the newly selected element is within the view-scope
+		  // 3) focus the (right) container, so arrow-up/down (without ctrl) scroll the details
+		  if (e.which === 38 /* arrow up */) {
+			  $activeLine.prev('.frame').click();
+			  $activeLine[0].scrollIntoView();
+			  $container.focus();
+			  e.preventDefault();
+		  } else if (e.which === 40 /* arrow down */) {
+			  $activeLine.next('.frame').click();
+			  $activeLine[0].scrollIntoView();
+			  $container.focus();
+			  e.preventDefault();
+		  }
+	  } 
+  });
+});

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Resources/js/zepto.min.js
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Resources/js/zepto.min.js b/vendor/filp/whoops/src/Whoops/Resources/js/zepto.min.js
new file mode 100644
index 0000000..0b2f97a
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Resources/js/zepto.min.js
@@ -0,0 +1,2 @@
+/* Zepto v1.1.3 - zepto event ajax form ie - zeptojs.com/license */
+var Zepto=function(){function L(t){return null==t?String(t):j[T.call(t)]||"object"}function Z(t){return"function"==L(t)}function $(t){return null!=t&&t==t.window}function _(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function D(t){return"object"==L(t)}function R(t){return D(t)&&!$(t)&&Object.getPrototypeOf(t)==Object.prototype}function M(t){return"number"==typeof t.length}function k(t){return s.call(t,function(t){return null!=t})}function z(t){return t.length>0?n.fn.concat.apply([],t):t}function F(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function q(t){return t in f?f[t]:f[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function H(t,e){return"number"!=typeof e||c[F(t)]?e:e+"px"}function I(t){var e,n;return u[t]||(e=a.createElement(t),a.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),u[t]=n),u[t]}function V(t){return"ch
 ildren"in t?o.call(t.children):n.map(t.childNodes,function(t){return 1==t.nodeType?t:void 0})}function U(n,i,r){for(e in i)r&&(R(i[e])||A(i[e]))?(R(i[e])&&!R(n[e])&&(n[e]={}),A(i[e])&&!A(n[e])&&(n[e]=[]),U(n[e],i[e],r)):i[e]!==t&&(n[e]=i[e])}function B(t,e){return null==e?n(t):n(t).filter(e)}function J(t,e,n,i){return Z(e)?e.call(t,n,i):e}function X(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function W(e,n){var i=e.className,r=i&&i.baseVal!==t;return n===t?r?i.baseVal:i:void(r?i.baseVal=n:e.className=n)}function Y(t){var e;try{return t?"true"==t||("false"==t?!1:"null"==t?null:/^0/.test(t)||isNaN(e=Number(t))?/^[\[\{]/.test(t)?n.parseJSON(t):t:e):t}catch(i){return t}}function G(t,e){e(t);for(var n in t.childNodes)G(t.childNodes[n],e)}var t,e,n,i,C,N,r=[],o=r.slice,s=r.filter,a=window.document,u={},f={},c={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},l=/^\s*<(\w+|!)[^>]*>/,h=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,p=/<(?!area|br|col|embed|
 hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,d=/^(?:body|html)$/i,m=/([A-Z])/g,g=["val","css","html","text","data","width","height","offset"],v=["after","prepend","before","append"],y=a.createElement("table"),x=a.createElement("tr"),b={tr:a.createElement("tbody"),tbody:y,thead:y,tfoot:y,td:x,th:x,"*":a.createElement("div")},w=/complete|loaded|interactive/,E=/^[\w-]*$/,j={},T=j.toString,S={},O=a.createElement("div"),P={tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},A=Array.isArray||function(t){return t instanceof Array};return S.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var i,r=t.parentNode,o=!r;return o&&(r=O).appendChild(t),i=~S.qsa(r,e
 ).indexOf(t),o&&O.removeChild(t),i},C=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},N=function(t){return s.call(t,function(e,n){return t.indexOf(e)==n})},S.fragment=function(e,i,r){var s,u,f;return h.test(e)&&(s=n(a.createElement(RegExp.$1))),s||(e.replace&&(e=e.replace(p,"<$1></$2>")),i===t&&(i=l.test(e)&&RegExp.$1),i in b||(i="*"),f=b[i],f.innerHTML=""+e,s=n.each(o.call(f.childNodes),function(){f.removeChild(this)})),R(r)&&(u=n(s),n.each(r,function(t,e){g.indexOf(t)>-1?u[t](e):u.attr(t,e)})),s},S.Z=function(t,e){return t=t||[],t.__proto__=n.fn,t.selector=e||"",t},S.isZ=function(t){return t instanceof S.Z},S.init=function(e,i){var r;if(!e)return S.Z();if("string"==typeof e)if(e=e.trim(),"<"==e[0]&&l.test(e))r=S.fragment(e,RegExp.$1,i),e=null;else{if(i!==t)return n(i).find(e);r=S.qsa(a,e)}else{if(Z(e))return n(a).ready(e);if(S.isZ(e))return e;if(A(e))r=k(e);else if(D(e))r=[e],e=null;else if(l.test(e))r=S.fragment(e.trim(),RegExp.$1,i),e=null;els
 e{if(i!==t)return n(i).find(e);r=S.qsa(a,e)}}return S.Z(r,e)},n=function(t,e){return S.init(t,e)},n.extend=function(t){var e,n=o.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach(function(n){U(t,n,e)}),t},S.qsa=function(t,e){var n,i="#"==e[0],r=!i&&"."==e[0],s=i||r?e.slice(1):e,a=E.test(s);return _(t)&&a&&i?(n=t.getElementById(s))?[n]:[]:1!==t.nodeType&&9!==t.nodeType?[]:o.call(a&&!i?r?t.getElementsByClassName(s):t.getElementsByTagName(e):t.querySelectorAll(e))},n.contains=function(t,e){return t!==e&&t.contains(e)},n.type=L,n.isFunction=Z,n.isWindow=$,n.isArray=A,n.isPlainObject=R,n.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},n.inArray=function(t,e,n){return r.indexOf.call(e,t,n)},n.camelCase=C,n.trim=function(t){return null==t?"":String.prototype.trim.call(t)},n.uuid=0,n.support={},n.expr={},n.map=function(t,e){var n,r,o,i=[];if(M(t))for(r=0;r<t.length;r++)n=e(t[r],r),null!=n&&i.push(n);else for(o in t)n=e(t[o],o),null!=n&&i.push(n);return z
 (i)},n.each=function(t,e){var n,i;if(M(t)){for(n=0;n<t.length;n++)if(e.call(t[n],n,t[n])===!1)return t}else for(i in t)if(e.call(t[i],i,t[i])===!1)return t;return t},n.grep=function(t,e){return s.call(t,e)},window.JSON&&(n.parseJSON=JSON.parse),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(t,e){j["[object "+e+"]"]=e.toLowerCase()}),n.fn={forEach:r.forEach,reduce:r.reduce,push:r.push,sort:r.sort,indexOf:r.indexOf,concat:r.concat,map:function(t){return n(n.map(this,function(e,n){return t.call(e,n,e)}))},slice:function(){return n(o.apply(this,arguments))},ready:function(t){return w.test(a.readyState)&&a.body?t(n):a.addEventListener("DOMContentLoaded",function(){t(n)},!1),this},get:function(e){return e===t?o.call(this):this[e>=0?e:e+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(t){re
 turn r.every.call(this,function(e,n){return t.call(e,n,e)!==!1}),this},filter:function(t){return Z(t)?this.not(this.not(t)):n(s.call(this,function(e){return S.matches(e,t)}))},add:function(t,e){return n(N(this.concat(n(t,e))))},is:function(t){return this.length>0&&S.matches(this[0],t)},not:function(e){var i=[];if(Z(e)&&e.call!==t)this.each(function(t){e.call(this,t)||i.push(this)});else{var r="string"==typeof e?this.filter(e):M(e)&&Z(e.item)?o.call(e):n(e);this.forEach(function(t){r.indexOf(t)<0&&i.push(t)})}return n(i)},has:function(t){return this.filter(function(){return D(t)?n.contains(this,t):n(this).find(t).size()})},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!D(t)?t:n(t)},last:function(){var t=this[this.length-1];return t&&!D(t)?t:n(t)},find:function(t){var e,i=this;return e="object"==typeof t?n(t).filter(function(){var t=this;return r.some.call(i,function(e){return n.contains(e,t)})}):1==this.length?n(S.qsa(this[0],t
 )):this.map(function(){return S.qsa(this,t)})},closest:function(t,e){var i=this[0],r=!1;for("object"==typeof t&&(r=n(t));i&&!(r?r.indexOf(i)>=0:S.matches(i,t));)i=i!==e&&!_(i)&&i.parentNode;return n(i)},parents:function(t){for(var e=[],i=this;i.length>0;)i=n.map(i,function(t){return(t=t.parentNode)&&!_(t)&&e.indexOf(t)<0?(e.push(t),t):void 0});return B(e,t)},parent:function(t){return B(N(this.pluck("parentNode")),t)},children:function(t){return B(this.map(function(){return V(this)}),t)},contents:function(){return this.map(function(){return o.call(this.childNodes)})},siblings:function(t){return B(this.map(function(t,e){return s.call(V(e.parentNode),function(t){return t!==e})}),t)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(t){return n.map(this,function(e){return e[t]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=
 I(this.nodeName))})},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=Z(t);if(this[0]&&!e)var i=n(t).get(0),r=i.parentNode||this.length>1;return this.each(function(o){n(this).wrapAll(e?t.call(this,o):r?i.cloneNode(!0):i)})},wrapAll:function(t){if(this[0]){n(this[0]).before(t=n(t));for(var e;(e=t.children()).length;)t=e.first();n(t).append(this)}return this},wrapInner:function(t){var e=Z(t);return this.each(function(i){var r=n(this),o=r.contents(),s=e?t.call(this,i):t;o.length?o.wrapAll(s):r.append(s)})},unwrap:function(){return this.parent().each(function(){n(this).replaceWith(n(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(e){return this.each(function(){var i=n(this);(e===t?"none"==i.css("display"):e)?i.show():i.hide()})},prev:function(t){return n(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return n(this.plu
 ck("nextElementSibling")).filter(t||"*")},html:function(t){return 0===arguments.length?this.length>0?this[0].innerHTML:null:this.each(function(e){var i=this.innerHTML;n(this).empty().append(J(this,t,e,i))})},text:function(e){return 0===arguments.length?this.length>0?this[0].textContent:null:this.each(function(){this.textContent=e===t?"":""+e})},attr:function(n,i){var r;return"string"==typeof n&&i===t?0==this.length||1!==this[0].nodeType?t:"value"==n&&"INPUT"==this[0].nodeName?this.val():!(r=this[0].getAttribute(n))&&n in this[0]?this[0][n]:r:this.each(function(t){if(1===this.nodeType)if(D(n))for(e in n)X(this,e,n[e]);else X(this,n,J(this,i,t,this.getAttribute(n)))})},removeAttr:function(t){return this.each(function(){1===this.nodeType&&X(this,t)})},prop:function(e,n){return e=P[e]||e,n===t?this[0]&&this[0][e]:this.each(function(t){this[e]=J(this,n,t,this[e])})},data:function(e,n){var i=this.attr("data-"+e.replace(m,"-$1").toLowerCase(),n);return null!==i?Y(i):t},val:function(t){retu
 rn 0===arguments.length?this[0]&&(this[0].multiple?n(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value):this.each(function(e){this.value=J(this,t,e,this.value)})},offset:function(t){if(t)return this.each(function(e){var i=n(this),r=J(this,t,e,i.offset()),o=i.offsetParent().offset(),s={top:r.top-o.top,left:r.left-o.left};"static"==i.css("position")&&(s.position="relative"),i.css(s)});if(0==this.length)return null;var e=this[0].getBoundingClientRect();return{left:e.left+window.pageXOffset,top:e.top+window.pageYOffset,width:Math.round(e.width),height:Math.round(e.height)}},css:function(t,i){if(arguments.length<2){var r=this[0],o=getComputedStyle(r,"");if(!r)return;if("string"==typeof t)return r.style[C(t)]||o.getPropertyValue(t);if(A(t)){var s={};return n.each(A(t)?t:[t],function(t,e){s[e]=r.style[C(e)]||o.getPropertyValue(e)}),s}}var a="";if("string"==L(t))i||0===i?a=F(t)+":"+H(t,i):this.each(function(){this.style.removeProperty(F(t))});else
  for(e in t)t[e]||0===t[e]?a+=F(e)+":"+H(e,t[e])+";":this.each(function(){this.style.removeProperty(F(e))});return this.each(function(){this.style.cssText+=";"+a})},index:function(t){return t?this.indexOf(n(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return t?r.some.call(this,function(t){return this.test(W(t))},q(t)):!1},addClass:function(t){return t?this.each(function(e){i=[];var r=W(this),o=J(this,t,e,r);o.split(/\s+/g).forEach(function(t){n(this).hasClass(t)||i.push(t)},this),i.length&&W(this,r+(r?" ":"")+i.join(" "))}):this},removeClass:function(e){return this.each(function(n){return e===t?W(this,""):(i=W(this),J(this,e,n,i).split(/\s+/g).forEach(function(t){i=i.replace(q(t)," ")}),void W(this,i.trim()))})},toggleClass:function(e,i){return e?this.each(function(r){var o=n(this),s=J(this,e,r,W(this));s.split(/\s+/g).forEach(function(e){(i===t?!o.hasClass(e):i)?o.addClass(e):o.removeClass(e)})}):this},scrollTop:function(e){if(this.length){var n="scrollTop
 "in this[0];return e===t?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=e}:function(){this.scrollTo(this.scrollX,e)})}},scrollLeft:function(e){if(this.length){var n="scrollLeft"in this[0];return e===t?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=e}:function(){this.scrollTo(e,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),i=this.offset(),r=d.test(e[0].nodeName)?{top:0,left:0}:e.offset();return i.top-=parseFloat(n(t).css("margin-top"))||0,i.left-=parseFloat(n(t).css("margin-left"))||0,r.top+=parseFloat(n(e[0]).css("border-top-width"))||0,r.left+=parseFloat(n(e[0]).css("border-left-width"))||0,{top:i.top-r.top,left:i.left-r.left}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||a.body;t&&!d.test(t.nodeName)&&"static"==n(t).css("position");)t=t.offsetParent;return t})}},n.fn.detach=n.fn.remove,["width","height"].forEach(function(e){var i=e.replace
 (/./,function(t){return t[0].toUpperCase()});n.fn[e]=function(r){var o,s=this[0];return r===t?$(s)?s["inner"+i]:_(s)?s.documentElement["scroll"+i]:(o=this.offset())&&o[e]:this.each(function(t){s=n(this),s.css(e,J(this,r,t,s[e]()))})}}),v.forEach(function(t,e){var i=e%2;n.fn[t]=function(){var t,o,r=n.map(arguments,function(e){return t=L(e),"object"==t||"array"==t||null==e?e:S.fragment(e)}),s=this.length>1;return r.length<1?this:this.each(function(t,a){o=i?a:a.parentNode,a=0==e?a.nextSibling:1==e?a.firstChild:2==e?a:null,r.forEach(function(t){if(s)t=t.cloneNode(!0);else if(!o)return n(t).remove();G(o.insertBefore(t,a),function(t){null==t.nodeName||"SCRIPT"!==t.nodeName.toUpperCase()||t.type&&"text/javascript"!==t.type||t.src||window.eval.call(window,t.innerHTML)})})})},n.fn[i?t+"To":"insert"+(e?"Before":"After")]=function(e){return n(e)[t](this),this}}),S.Z.prototype=n.fn,S.uniq=N,S.deserializeValue=Y,n.zepto=S,n}();window.Zepto=Zepto,void 0===window.$&&(window.$=Zepto),function(t){fu
 nction l(t){return t._zid||(t._zid=e++)}function h(t,e,n,i){if(e=p(e),e.ns)var r=d(e.ns);return(s[l(t)]||[]).filter(function(t){return!(!t||e.e&&t.e!=e.e||e.ns&&!r.test(t.ns)||n&&l(t.fn)!==l(n)||i&&t.sel!=i)})}function p(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function d(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function m(t,e){return t.del&&!u&&t.e in f||!!e}function g(t){return c[t]||u&&f[t]||t}function v(e,i,r,o,a,u,f){var h=l(e),d=s[h]||(s[h]=[]);i.split(/\s/).forEach(function(i){if("ready"==i)return t(document).ready(r);var s=p(i);s.fn=r,s.sel=a,s.e in c&&(r=function(e){var n=e.relatedTarget;return!n||n!==this&&!t.contains(this,n)?s.fn.apply(this,arguments):void 0}),s.del=u;var l=u||r;s.proxy=function(t){if(t=j(t),!t.isImmediatePropagationStopped()){t.data=o;var i=l.apply(e,t._args==n?[t]:[t].concat(t._args));return i===!1&&(t.preventDefault(),t.stopPropagation()),i}},s.i=d.length,d.push(s),"addEventListener"in e&&e.addEve
 ntListener(g(s.e),s.proxy,m(s,f))})}function y(t,e,n,i,r){var o=l(t);(e||"").split(/\s/).forEach(function(e){h(t,e,n,i).forEach(function(e){delete s[o][e.i],"removeEventListener"in t&&t.removeEventListener(g(e.e),e.proxy,m(e,r))})})}function j(e,i){return(i||!e.isDefaultPrevented)&&(i||(i=e),t.each(E,function(t,n){var r=i[t];e[t]=function(){return this[n]=x,r&&r.apply(i,arguments)},e[n]=b}),(i.defaultPrevented!==n?i.defaultPrevented:"returnValue"in i?i.returnValue===!1:i.getPreventDefault&&i.getPreventDefault())&&(e.isDefaultPrevented=x)),e}function T(t){var e,i={originalEvent:t};for(e in t)w.test(e)||t[e]===n||(i[e]=t[e]);return j(i,t)}var n,e=1,i=Array.prototype.slice,r=t.isFunction,o=function(t){return"string"==typeof t},s={},a={},u="onfocusin"in window,f={focus:"focusin",blur:"focusout"},c={mouseenter:"mouseover",mouseleave:"mouseout"};a.click=a.mousedown=a.mouseup=a.mousemove="MouseEvents",t.event={add:v,remove:y},t.proxy=function(e,n){if(r(e)){var i=function(){return e.apply(n
 ,arguments)};return i._zid=l(e),i}if(o(n))return t.proxy(e[n],e);throw new TypeError("expected function")},t.fn.bind=function(t,e,n){return this.on(t,e,n)},t.fn.unbind=function(t,e){return this.off(t,e)},t.fn.one=function(t,e,n,i){return this.on(t,e,n,i,1)};var x=function(){return!0},b=function(){return!1},w=/^([A-Z]|returnValue$|layer[XY]$)/,E={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};t.fn.delegate=function(t,e,n){return this.on(e,t,n)},t.fn.undelegate=function(t,e,n){return this.off(e,t,n)},t.fn.live=function(e,n){return t(document.body).delegate(this.selector,e,n),this},t.fn.die=function(e,n){return t(document.body).undelegate(this.selector,e,n),this},t.fn.on=function(e,s,a,u,f){var c,l,h=this;return e&&!o(e)?(t.each(e,function(t,e){h.on(t,s,a,e,f)}),h):(o(s)||r(u)||u===!1||(u=a,a=s,s=n),(r(a)||a===!1)&&(u=a,a=n),u===!1&&(u=b),h.each(function(n,r){f&&(c=function(t){return y(r,t.type,u),u.a
 pply(this,arguments)}),s&&(l=function(e){var n,o=t(e.target).closest(s,r).get(0);return o&&o!==r?(n=t.extend(T(e),{currentTarget:o,liveFired:r}),(c||u).apply(o,[n].concat(i.call(arguments,1)))):void 0}),v(r,e,u,a,s,l||c)}))},t.fn.off=function(e,i,s){var a=this;return e&&!o(e)?(t.each(e,function(t,e){a.off(t,i,e)}),a):(o(i)||r(s)||s===!1||(s=i,i=n),s===!1&&(s=b),a.each(function(){y(this,e,s,i)}))},t.fn.trigger=function(e,n){return e=o(e)||t.isPlainObject(e)?t.Event(e):j(e),e._args=n,this.each(function(){"dispatchEvent"in this?this.dispatchEvent(e):t(this).triggerHandler(e,n)})},t.fn.triggerHandler=function(e,n){var i,r;return this.each(function(s,a){i=T(o(e)?t.Event(e):e),i._args=n,i.target=a,t.each(h(a,e.type||e),function(t,e){return r=e.proxy(i),i.isImmediatePropagationStopped()?!1:void 0})}),r},"focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEac
 h(function(e){t.fn[e]=function(t){return t?this.bind(e,t):this.trigger(e)}}),["focus","blur"].forEach(function(e){t.fn[e]=function(t){return t?this.bind(e,t):this.each(function(){try{this[e]()}catch(t){}}),this}}),t.Event=function(t,e){o(t)||(e=t,t=e.type);var n=document.createEvent(a[t]||"Events"),i=!0;if(e)for(var r in e)"bubbles"==r?i=!!e[r]:n[r]=e[r];return n.initEvent(t,i,!0),j(n)}}(Zepto),function(t){function l(e,n,i){var r=t.Event(n);return t(e).trigger(r,i),!r.isDefaultPrevented()}function h(t,e,i,r){return t.global?l(e||n,i,r):void 0}function p(e){e.global&&0===t.active++&&h(e,null,"ajaxStart")}function d(e){e.global&&!--t.active&&h(e,null,"ajaxStop")}function m(t,e){var n=e.context;return e.beforeSend.call(n,t,e)===!1||h(e,n,"ajaxBeforeSend",[t,e])===!1?!1:void h(e,n,"ajaxSend",[t,e])}function g(t,e,n,i){var r=n.context,o="success";n.success.call(r,t,o,e),i&&i.resolveWith(r,[t,o,e]),h(n,r,"ajaxSuccess",[e,n,t]),y(o,e,n)}function v(t,e,n,i,r){var o=i.context;i.error.call(o,
 n,e,t),r&&r.rejectWith(o,[n,e,t]),h(i,o,"ajaxError",[n,i,t||e]),y(e,n,i)}function y(t,e,n){var i=n.context;n.complete.call(i,e,t),h(n,i,"ajaxComplete",[e,n]),d(n)}function x(){}function b(t){return t&&(t=t.split(";",2)[0]),t&&(t==f?"html":t==u?"json":s.test(t)?"script":a.test(t)&&"xml")||"text"}function w(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function E(e){e.processData&&e.data&&"string"!=t.type(e.data)&&(e.data=t.param(e.data,e.traditional)),!e.data||e.type&&"GET"!=e.type.toUpperCase()||(e.url=w(e.url,e.data),e.data=void 0)}function j(e,n,i,r){return t.isFunction(n)&&(r=i,i=n,n=void 0),t.isFunction(i)||(r=i,i=void 0),{url:e,data:n,success:i,dataType:r}}function S(e,n,i,r){var o,s=t.isArray(n),a=t.isPlainObject(n);t.each(n,function(n,u){o=t.type(u),r&&(n=i?r:r+"["+(a||"object"==o||"array"==o?n:"")+"]"),!r&&s?e.add(u.name,u.value):"array"==o||!i&&"object"==o?S(e,u,i,n):e.add(n,u)})}var i,r,e=0,n=window.document,o=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,s
 =/^(?:text|application)\/javascript/i,a=/^(?:text|application)\/xml/i,u="application/json",f="text/html",c=/^\s*$/;t.active=0,t.ajaxJSONP=function(i,r){if(!("type"in i))return t.ajax(i);var f,h,o=i.jsonpCallback,s=(t.isFunction(o)?o():o)||"jsonp"+ ++e,a=n.createElement("script"),u=window[s],c=function(e){t(a).triggerHandler("error",e||"abort")},l={abort:c};return r&&r.promise(l),t(a).on("load error",function(e,n){clearTimeout(h),t(a).off().remove(),"error"!=e.type&&f?g(f[0],l,i,r):v(null,n||"error",l,i,r),window[s]=u,f&&t.isFunction(u)&&u(f[0]),u=f=void 0}),m(l,i)===!1?(c("abort"),l):(window[s]=function(){f=arguments},a.src=i.url.replace(/\?(.+)=\?/,"?$1="+s),n.head.appendChild(a),i.timeout>0&&(h=setTimeout(function(){c("timeout")},i.timeout)),l)},t.ajaxSettings={type:"GET",beforeSend:x,success:x,error:x,complete:x,context:null,global:!0,xhr:function(){return new window.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript, application/x-javascript",json:u,xml:"ap
 plication/xml, text/xml",html:f,text:"text/plain"},crossDomain:!1,timeout:0,processData:!0,cache:!0},t.ajax=function(e){var n=t.extend({},e||{}),o=t.Deferred&&t.Deferred();for(i in t.ajaxSettings)void 0===n[i]&&(n[i]=t.ajaxSettings[i]);p(n),n.crossDomain||(n.crossDomain=/^([\w-]+:)?\/\/([^\/]+)/.test(n.url)&&RegExp.$2!=window.location.host),n.url||(n.url=window.location.toString()),E(n),n.cache===!1&&(n.url=w(n.url,"_="+Date.now()));var s=n.dataType,a=/\?.+=\?/.test(n.url);if("jsonp"==s||a)return a||(n.url=w(n.url,n.jsonp?n.jsonp+"=?":n.jsonp===!1?"":"callback=?")),t.ajaxJSONP(n,o);var j,u=n.accepts[s],f={},l=function(t,e){f[t.toLowerCase()]=[t,e]},h=/^([\w-]+:)\/\//.test(n.url)?RegExp.$1:window.location.protocol,d=n.xhr(),y=d.setRequestHeader;if(o&&o.promise(d),n.crossDomain||l("X-Requested-With","XMLHttpRequest"),l("Accept",u||"*/*"),(u=n.mimeType||u)&&(u.indexOf(",")>-1&&(u=u.split(",",2)[0]),d.overrideMimeType&&d.overrideMimeType(u)),(n.contentType||n.contentType!==!1&&n.data&&"
 GET"!=n.type.toUpperCase())&&l("Content-Type",n.contentType||"application/x-www-form-urlencoded"),n.headers)for(r in n.headers)l(r,n.headers[r]);if(d.setRequestHeader=l,d.onreadystatechange=function(){if(4==d.readyState){d.onreadystatechange=x,clearTimeout(j);var e,i=!1;if(d.status>=200&&d.status<300||304==d.status||0==d.status&&"file:"==h){s=s||b(n.mimeType||d.getResponseHeader("content-type")),e=d.responseText;try{"script"==s?(1,eval)(e):"xml"==s?e=d.responseXML:"json"==s&&(e=c.test(e)?null:t.parseJSON(e))}catch(r){i=r}i?v(i,"parsererror",d,n,o):g(e,d,n,o)}else v(d.statusText||null,d.status?"error":"abort",d,n,o)}},m(d,n)===!1)return d.abort(),v(null,"abort",d,n,o),d;if(n.xhrFields)for(r in n.xhrFields)d[r]=n.xhrFields[r];var T="async"in n?n.async:!0;d.open(n.type,n.url,T,n.username,n.password);for(r in f)y.apply(d,f[r]);return n.timeout>0&&(j=setTimeout(function(){d.onreadystatechange=x,d.abort(),v(null,"timeout",d,n,o)},n.timeout)),d.send(n.data?n.data:null),d},t.get=function(){
 return t.ajax(j.apply(null,arguments))},t.post=function(){var e=j.apply(null,arguments);return e.type="POST",t.ajax(e)},t.getJSON=function(){var e=j.apply(null,arguments);return e.dataType="json",t.ajax(e)},t.fn.load=function(e,n,i){if(!this.length)return this;var a,r=this,s=e.split(/\s/),u=j(e,n,i),f=u.success;return s.length>1&&(u.url=s[0],a=s[1]),u.success=function(e){r.html(a?t("<div>").html(e.replace(o,"")).find(a):e),f&&f.apply(r,arguments)},t.ajax(u),this};var T=encodeURIComponent;t.param=function(t,e){var n=[];return n.add=function(t,e){this.push(T(t)+"="+T(e))},S(n,t,e),n.join("&").replace(/%20/g,"+")}}(Zepto),function(t){t.fn.serializeArray=function(){var n,e=[];return t([].slice.call(this.get(0).elements)).each(function(){n=t(this);var i=n.attr("type");"fieldset"!=this.nodeName.toLowerCase()&&!this.disabled&&"submit"!=i&&"reset"!=i&&"button"!=i&&("radio"!=i&&"checkbox"!=i||this.checked)&&e.push({name:n.attr("name"),value:n.val()})}),e},t.fn.serialize=function(){var t=[];r
 eturn this.serializeArray().forEach(function(e){t.push(encodeURIComponent(e.name)+"="+encodeURIComponent(e.value))}),t.join("&")},t.fn.submit=function(e){if(e)this.bind("submit",e);else if(this.length){var n=t.Event("submit");this.eq(0).trigger(n),n.isDefaultPrevented()||this.get(0).submit()}return this}}(Zepto),function(t){"__proto__"in{}||t.extend(t.zepto,{Z:function(e,n){return e=e||[],t.extend(e,t.fn),e.selector=n||"",e.__Z=!0,e},isZ:function(e){return"array"===t.type(e)&&"__Z"in e}});try{getComputedStyle(void 0)}catch(e){var n=getComputedStyle;window.getComputedStyle=function(t){try{return n(t)}catch(e){return null}}}}(Zepto);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Resources/views/env_details.html.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Resources/views/env_details.html.php b/vendor/filp/whoops/src/Whoops/Resources/views/env_details.html.php
new file mode 100644
index 0000000..a3e0a57
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Resources/views/env_details.html.php
@@ -0,0 +1,39 @@
+<?php /* List data-table values, i.e: $_SERVER, $_GET, .... */ ?>
+<div class="details">
+  <div class="data-table-container" id="data-tables">
+    <?php foreach ($tables as $label => $data): ?>
+      <div class="data-table" id="sg-<?php echo $tpl->escape($tpl->slug($label)) ?>">
+        <label><?php echo $tpl->escape($label) ?></label>
+        <?php if (!empty($data)): ?>
+            <table class="data-table">
+              <thead>
+                <tr>
+                  <td class="data-table-k">Key</td>
+                  <td class="data-table-v">Value</td>
+                </tr>
+              </thead>
+            <?php foreach ($data as $k => $value): ?>
+              <tr>
+                <td><?php echo $tpl->escape($k) ?></td>
+                <td><?php echo $tpl->escape(print_r($value, true)) ?></td>
+              </tr>
+            <?php endforeach ?>
+            </table>
+        <?php else: ?>
+          <span class="empty">empty</span>
+        <?php endif ?>
+      </div>
+    <?php endforeach ?>
+  </div>
+
+  <?php /* List registered handlers, in order of first to last registered */ ?>
+  <div class="data-table-container" id="handlers">
+    <label>Registered Handlers</label>
+    <?php foreach ($handlers as $i => $handler): ?>
+      <div class="handler <?php echo ($handler === $handler) ? 'active' : ''?>">
+        <?php echo $i ?>. <?php echo $tpl->escape(get_class($handler)) ?>
+      </div>
+    <?php endforeach ?>
+  </div>
+
+</div>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Resources/views/frame_code.html.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Resources/views/frame_code.html.php b/vendor/filp/whoops/src/Whoops/Resources/views/frame_code.html.php
new file mode 100644
index 0000000..4ca28a6
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Resources/views/frame_code.html.php
@@ -0,0 +1,52 @@
+<?php /* Display a code block for all frames in the stack.
+       * @todo: This should PROBABLY be done on-demand, lest
+       * we get 200 frames to process. */ ?>
+<div class="frame-code-container <?php echo (!$has_frames ? 'empty' : '') ?>">
+  <?php foreach ($frames as $i => $frame): ?>
+    <?php $line = $frame->getLine(); ?>
+      <div class="frame-code <?php echo ($i == 0 ) ? 'active' : '' ?>" id="frame-code-<?php echo $i ?>">
+        <div class="frame-file">
+          <?php $filePath = $frame->getFile(); ?>
+          <?php if ($filePath && $editorHref = $handler->getEditorHref($filePath, (int) $line)): ?>
+            Open:
+            <a href="<?php echo $editorHref ?>" class="editor-link">
+              <strong><?php echo $tpl->escape($filePath ?: '<#unknown>') ?></strong>
+            </a>
+          <?php else: ?>
+            <strong><?php echo $tpl->escape($filePath ?: '<#unknown>') ?></strong>
+          <?php endif ?>
+        </div>
+        <?php
+          // Do nothing if there's no line to work off
+          if ($line !== null):
+
+          // the $line is 1-indexed, we nab -1 where needed to account for this
+          $range = $frame->getFileLines($line - 8, 10);
+
+          // getFileLines can return null if there is no source code
+          if ($range):
+            $range = array_map(function ($line) { return empty($line) ? ' ' : $line;}, $range);
+            $start = key($range) + 1;
+            $code  = join("\n", $range);
+        ?>
+            <pre class="code-block prettyprint linenums:<?php echo $start ?>"><?php echo $tpl->escape($code) ?></pre>
+          <?php endif ?>
+        <?php endif ?>
+
+        <?php
+          // Append comments for this frame
+          $comments = $frame->getComments();
+        ?>
+        <div class="frame-comments <?php echo empty($comments) ? 'empty' : '' ?>">
+          <?php foreach ($comments as $commentNo => $comment): ?>
+            <?php extract($comment) ?>
+            <div class="frame-comment" id="comment-<?php echo $i . '-' . $commentNo ?>">
+              <span class="frame-comment-context"><?php echo $tpl->escape($context) ?></span>
+              <?php echo $tpl->escapeButPreserveUris($comment) ?>
+            </div>
+          <?php endforeach ?>
+        </div>
+
+      </div>
+  <?php endforeach ?>
+</div>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Resources/views/frame_list.html.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Resources/views/frame_list.html.php b/vendor/filp/whoops/src/Whoops/Resources/views/frame_list.html.php
new file mode 100644
index 0000000..fd9cf7b
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Resources/views/frame_list.html.php
@@ -0,0 +1,17 @@
+<?php /* List file names & line numbers for all stack frames;
+         clicking these links/buttons will display the code view
+         for that particular frame */ ?>
+<?php foreach ($frames as $i => $frame): ?>
+  <div class="frame <?php echo ($i == 0 ? 'active' : '') ?>" id="frame-line-<?php echo $i ?>">
+      <div class="frame-method-info">
+        <span class="frame-index"><?php echo (count($frames) - $i - 1) ?>.</span>
+        <span class="frame-class"><?php echo $tpl->escape($frame->getClass() ?: '') ?></span>
+        <span class="frame-function"><?php echo $tpl->escape($frame->getFunction() ?: '') ?></span>
+      </div>
+
+    <span class="frame-file">
+      <?php echo ($frame->getFile(true) ?: '<#unknown>') ?><!--
+   --><span class="frame-line"><?php echo (int) $frame->getLine() ?></span>
+    </span>
+  </div>
+<?php endforeach ?>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Resources/views/header.html.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Resources/views/header.html.php b/vendor/filp/whoops/src/Whoops/Resources/views/header.html.php
new file mode 100644
index 0000000..05c6668
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Resources/views/header.html.php
@@ -0,0 +1,34 @@
+<div class="exception">
+  <h3 class="exc-title">
+    <?php foreach ($name as $i => $nameSection): ?>
+      <?php if ($i == count($name) - 1): ?>
+        <span class="exc-title-primary"><?php echo $tpl->escape($nameSection) ?></span>
+      <?php else: ?>
+        <?php echo $tpl->escape($nameSection) . ' \\' ?>
+      <?php endif ?>
+    <?php endforeach ?>
+    <?php if ($code): ?>
+      <span title="Exception Code">(<?php echo $tpl->escape($code) ?>)</span>
+    <?php endif ?>
+  </h3>
+
+  <div class="help">
+    <button title="show help">HELP</button>
+
+    <div id="help-overlay">
+      <div id="help-framestack">Callstack information; navigate with mouse or keyboard using <kbd>Ctrl+&uparrow;</kbd> or <kbd>Ctrl+&downarrow;</kbd></div>
+      <div id="help-clipboard">Copy-to-clipboard button</div>
+      <div id="help-exc-message">Exception message and its type</div>
+      <div id="help-code">Code snippet where the error was thrown</div>
+      <div id="help-request">Server state information</div>
+      <div id="help-appinfo">Application provided context information</div>
+    </div>
+  </div>
+
+  <button id="copy-button" class="clipboard" data-clipboard-target="plain-exception" title="copy exception into clipboard"></button>
+  <span id="plain-exception"><?php echo $tpl->escape($plain_exception) ?></span>
+
+  <p class="exc-message">
+    <?php echo $tpl->escape($message) ?>
+  </p>
+</div>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php b/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php
new file mode 100644
index 0000000..0f7d324
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php
@@ -0,0 +1,37 @@
+<?php
+/**
+* Layout template file for Whoops's pretty error output.
+*/
+?>
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title><?php echo $tpl->escape($page_title) ?></title>
+
+    <style><?php echo $stylesheet ?></style>
+  </head>
+  <body>
+
+    <div class="Whoops container">
+
+      <div class="stack-container">
+        <div class="frames-container cf <?php echo (!$has_frames ? 'empty' : '') ?>">
+          <?php $tpl->render($frame_list) ?>
+        </div>
+        <div class="details-container cf">
+          <header>
+            <?php $tpl->render($header) ?>
+          </header>
+          <?php $tpl->render($frame_code) ?>
+          <?php $tpl->render($env_details) ?>
+        </div>
+      </div>
+    </div>
+
+    <script src="//cdnjs.cloudflare.com/ajax/libs/zeroclipboard/1.3.5/ZeroClipboard.min.js"></script>
+    <script src="//cdnjs.cloudflare.com/ajax/libs/prettify/r224/prettify.js"></script>
+    <script><?php echo $zepto ?></script>
+    <script><?php echo $javascript ?></script>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Run.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Run.php b/vendor/filp/whoops/src/Whoops/Run.php
new file mode 100644
index 0000000..e23d606
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Run.php
@@ -0,0 +1,408 @@
+<?php
+/**
+ * Whoops - php errors for cool kids
+ * @author Filipe Dobreira <http://github.com/filp>
+ */
+
+namespace Whoops;
+
+use Exception;
+use InvalidArgumentException;
+use Whoops\Exception\ErrorException;
+use Whoops\Exception\Inspector;
+use Whoops\Handler\CallbackHandler;
+use Whoops\Handler\Handler;
+use Whoops\Handler\HandlerInterface;
+
+class Run
+{
+    const EXCEPTION_HANDLER = "handleException";
+    const ERROR_HANDLER     = "handleError";
+    const SHUTDOWN_HANDLER  = "handleShutdown";
+
+    protected $isRegistered;
+    protected $allowQuit       = true;
+    protected $sendOutput      = true;
+
+    /**
+     * @var integer|false
+     */
+    protected $sendHttpCode    = 500;
+
+    /**
+     * @var HandlerInterface[]
+     */
+    protected $handlerStack = array();
+
+    protected $silencedPatterns = array();
+
+    /**
+     * Pushes a handler to the end of the stack
+     *
+     * @throws InvalidArgumentException  If argument is not callable or instance of HandlerInterface
+     * @param  Callable|HandlerInterface $handler
+     * @return Run
+     */
+    public function pushHandler($handler)
+    {
+        if (is_callable($handler)) {
+            $handler = new CallbackHandler($handler);
+        }
+
+        if (!$handler instanceof HandlerInterface) {
+            throw new InvalidArgumentException(
+                  "Argument to " . __METHOD__ . " must be a callable, or instance of"
+                . "Whoops\\Handler\\HandlerInterface"
+            );
+        }
+
+        $this->handlerStack[] = $handler;
+        return $this;
+    }
+
+    /**
+     * Removes the last handler in the stack and returns it.
+     * Returns null if there"s nothing else to pop.
+     * @return null|HandlerInterface
+     */
+    public function popHandler()
+    {
+        return array_pop($this->handlerStack);
+    }
+
+    /**
+     * Returns an array with all handlers, in the
+     * order they were added to the stack.
+     * @return array
+     */
+    public function getHandlers()
+    {
+        return $this->handlerStack;
+    }
+
+    /**
+     * Clears all handlers in the handlerStack, including
+     * the default PrettyPage handler.
+     * @return Run
+     */
+    public function clearHandlers()
+    {
+        $this->handlerStack = array();
+        return $this;
+    }
+
+    /**
+     * @param  Exception $exception
+     * @return Inspector
+     */
+    protected function getInspector(Exception $exception)
+    {
+        return new Inspector($exception);
+    }
+
+    /**
+     * Registers this instance as an error handler.
+     * @return Run
+     */
+    public function register()
+    {
+        if (!$this->isRegistered) {
+            // Workaround PHP bug 42098
+            // https://bugs.php.net/bug.php?id=42098
+            class_exists("\\Whoops\\Exception\\ErrorException");
+            class_exists("\\Whoops\\Exception\\FrameCollection");
+            class_exists("\\Whoops\\Exception\\Frame");
+            class_exists("\\Whoops\\Exception\\Inspector");
+
+            set_error_handler(array($this, self::ERROR_HANDLER));
+            set_exception_handler(array($this, self::EXCEPTION_HANDLER));
+            register_shutdown_function(array($this, self::SHUTDOWN_HANDLER));
+
+            $this->isRegistered = true;
+        }
+
+        return $this;
+    }
+
+    /**
+     * Unregisters all handlers registered by this Whoops\Run instance
+     * @return Run
+     */
+    public function unregister()
+    {
+        if ($this->isRegistered) {
+            restore_exception_handler();
+            restore_error_handler();
+
+            $this->isRegistered = false;
+        }
+
+        return $this;
+    }
+
+    /**
+     * Should Whoops allow Handlers to force the script to quit?
+     * @param  bool|int $exit
+     * @return bool
+     */
+    public function allowQuit($exit = null)
+    {
+        if (func_num_args() == 0) {
+            return $this->allowQuit;
+        }
+
+        return $this->allowQuit = (bool) $exit;
+    }
+
+    /**
+     * Silence particular errors in particular files
+     * @param  array|string $patterns List or a single regex pattern to match
+     * @param  int          $levels   Defaults to E_STRICT | E_DEPRECATED
+     * @return \Whoops\Run
+     */
+    public function silenceErrorsInPaths($patterns, $levels = 10240)
+    {
+        $this->silencedPatterns = array_merge(
+            $this->silencedPatterns,
+            array_map(
+                function ($pattern) use ($levels) {
+                    return array(
+                        "pattern" => $pattern,
+                        "levels" => $levels,
+                    );
+                },
+                (array) $patterns
+            )
+        );
+        return $this;
+    }
+
+    /*
+     * Should Whoops send HTTP error code to the browser if possible?
+     * Whoops will by default send HTTP code 500, but you may wish to
+     * use 502, 503, or another 5xx family code.
+     *
+     * @param bool|int $code
+     * @return int|false
+     */
+    public function sendHttpCode($code = null)
+    {
+        if (func_num_args() == 0) {
+            return $this->sendHttpCode;
+        }
+
+        if (!$code) {
+            return $this->sendHttpCode = false;
+        }
+
+        if ($code === true) {
+            $code = 500;
+        }
+
+        if ($code < 400 || 600 <= $code) {
+            throw new InvalidArgumentException(
+                 "Invalid status code '$code', must be 4xx or 5xx"
+            );
+        }
+
+        return $this->sendHttpCode = $code;
+    }
+
+    /**
+     * Should Whoops push output directly to the client?
+     * If this is false, output will be returned by handleException
+     * @param  bool|int $send
+     * @return bool
+     */
+    public function writeToOutput($send = null)
+    {
+        if (func_num_args() == 0) {
+            return $this->sendOutput;
+        }
+
+        return $this->sendOutput = (bool) $send;
+    }
+
+    /**
+     * Handles an exception, ultimately generating a Whoops error
+     * page.
+     *
+     * @param  Exception $exception
+     * @return string    Output generated by handlers
+     */
+    public function handleException(Exception $exception)
+    {
+        // Walk the registered handlers in the reverse order
+        // they were registered, and pass off the exception
+        $inspector = $this->getInspector($exception);
+
+        // Capture output produced while handling the exception,
+        // we might want to send it straight away to the client,
+        // or return it silently.
+        ob_start();
+
+        // Just in case there are no handlers:
+        $handlerResponse = null;
+
+        foreach (array_reverse($this->handlerStack) as $handler) {
+            $handler->setRun($this);
+            $handler->setInspector($inspector);
+            $handler->setException($exception);
+
+            // The HandlerInterface does not require an Exception passed to handle()
+            // and neither of our bundled handlers use it.
+            // However, 3rd party handlers may have already relied on this parameter,
+            // and removing it would be possibly breaking for users.
+            $handlerResponse = $handler->handle($exception);
+
+            if (in_array($handlerResponse, array(Handler::LAST_HANDLER, Handler::QUIT))) {
+                // The Handler has handled the exception in some way, and
+                // wishes to quit execution (Handler::QUIT), or skip any
+                // other handlers (Handler::LAST_HANDLER). If $this->allowQuit
+                // is false, Handler::QUIT behaves like Handler::LAST_HANDLER
+                break;
+            }
+        }
+
+        $willQuit = $handlerResponse == Handler::QUIT && $this->allowQuit();
+
+        $output = ob_get_clean();
+
+        // If we're allowed to, send output generated by handlers directly
+        // to the output, otherwise, and if the script doesn't quit, return
+        // it so that it may be used by the caller
+        if ($this->writeToOutput()) {
+            // @todo Might be able to clean this up a bit better
+            // If we're going to quit execution, cleanup all other output
+            // buffers before sending our own output:
+            if ($willQuit) {
+                while (ob_get_level() > 0) {
+                    ob_end_clean();
+                }
+            }
+
+            $this->writeToOutputNow($output);
+        }
+
+        if ($willQuit) {
+            flush(); // HHVM fix for https://github.com/facebook/hhvm/issues/4055
+            exit(1);
+        }
+
+        return $output;
+    }
+
+    /**
+     * Converts generic PHP errors to \ErrorException
+     * instances, before passing them off to be handled.
+     *
+     * This method MUST be compatible with set_error_handler.
+     *
+     * @param int    $level
+     * @param string $message
+     * @param string $file
+     * @param int    $line
+     *
+     * @return bool
+     * @throws ErrorException
+     */
+    public function handleError($level, $message, $file = null, $line = null)
+    {
+        if ($level & error_reporting()) {
+            foreach ($this->silencedPatterns as $entry) {
+                $pathMatches = (bool) preg_match($entry["pattern"], $file);
+                $levelMatches = $level & $entry["levels"];
+                if ($pathMatches && $levelMatches) {
+                    // Ignore the error, abort handling
+                    return true;
+                }
+            }
+
+            // XXX we pass $level for the "code" param only for BC reasons.
+            // see https://github.com/filp/whoops/issues/267
+            $exception = new ErrorException($message, /*code*/ $level, /*severity*/ $level, $file, $line);
+            if ($this->canThrowExceptions) {
+                throw $exception;
+            } else {
+                $this->handleException($exception);
+            }
+            // Do not propagate errors which were already handled by Whoops.
+            return true;
+        }
+
+        // Propagate error to the next handler, allows error_get_last() to
+        // work on silenced errors.
+        return false;
+    }
+
+    /**
+     * Special case to deal with Fatal errors and the like.
+     */
+    public function handleShutdown()
+    {
+        // If we reached this step, we are in shutdown handler.
+        // An exception thrown in a shutdown handler will not be propagated
+        // to the exception handler. Pass that information along.
+        $this->canThrowExceptions = false;
+
+        $error = error_get_last();
+        if ($error && $this->isLevelFatal($error['type'])) {
+            // If there was a fatal error,
+            // it was not handled in handleError yet.
+            $this->handleError(
+                $error['type'],
+                $error['message'],
+                $error['file'],
+                $error['line']
+            );
+        }
+    }
+
+    /**
+     * In certain scenarios, like in shutdown handler, we can not throw exceptions
+     * @var bool
+     */
+    private $canThrowExceptions = true;
+
+    /**
+     * Echo something to the browser
+     * @param  string $output
+     * @return $this
+     */
+    private function writeToOutputNow($output)
+    {
+        if ($this->sendHttpCode() && \Whoops\Util\Misc::canSendHeaders()) {
+            $httpCode   = $this->sendHttpCode();
+
+            if (function_exists('http_response_code')) {
+                http_response_code($httpCode);
+            } else {
+                // http_response_code is added in 5.4.
+                // For compatibility with 5.3 we use the third argument in header call
+                // First argument must be a real header.
+                // If it is empty, PHP will ignore the third argument.
+                // If it is invalid, such as a single space, Apache will handle it well,
+                // but the PHP development server will hang.
+                // Setting a full status line would require us to hardcode
+                // string values for all different status code, and detect the protocol.
+                // which is an extra error-prone complexity.
+                header('X-Ignore-This: 1', true, $httpCode);
+            }
+        }
+
+        echo $output;
+
+        return $this;
+    }
+
+    private static function isLevelFatal($level)
+    {
+        $errors = E_ERROR;
+        $errors |= E_PARSE;
+        $errors |= E_CORE_ERROR;
+        $errors |= E_CORE_WARNING;
+        $errors |= E_COMPILE_ERROR;
+        $errors |= E_COMPILE_WARNING;
+        return ($level & $errors) > 0;
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Util/Misc.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Util/Misc.php b/vendor/filp/whoops/src/Whoops/Util/Misc.php
new file mode 100644
index 0000000..d38dbbf
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Util/Misc.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Whoops - php errors for cool kids
+ * @author Filipe Dobreira <http://github.com/filp>
+ */
+
+namespace Whoops\Util;
+
+class Misc
+{
+    /**
+	 * Can we at this point in time send HTTP headers?
+	 *
+	 * Currently this checks if we are even serving an HTTP request,
+	 * as opposed to running from a command line.
+	 *
+	 * If we are serving an HTTP request, we check if it's not too late.
+	 *
+	 * @return bool
+	 */
+    public static function canSendHeaders()
+    {
+        return isset($_SERVER["REQUEST_URI"]) && !headers_sent();
+    }
+
+    /**
+	 * Translate ErrorException code into the represented constant.
+	 *
+	 * @param int $error_code
+	 * @return string
+	 */
+    public static function translateErrorCode($error_code)
+    {
+        $constants = get_defined_constants(true);
+        if (array_key_exists('Core' , $constants)) {
+            foreach ($constants['Core'] as $constant => $value) {
+                if (substr($constant, 0, 2) == 'E_' && $value == $error_code) {
+                    return $constant;
+                }
+            }
+        }
+        return "E_UNKNOWN";
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php b/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php
new file mode 100644
index 0000000..71690de
--- /dev/null
+++ b/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php
@@ -0,0 +1,154 @@
+<?php
+/**
+ * Whoops - php errors for cool kids
+ * @author Filipe Dobreira <http://github.com/filp>
+ */
+
+namespace Whoops\Util;
+
+/**
+ * Exposes useful tools for working with/in templates
+ */
+class TemplateHelper
+{
+    /**
+     * An array of variables to be passed to all templates
+     * @var array
+     */
+    private $variables = array();
+
+    /**
+     * Escapes a string for output in an HTML document
+     *
+     * @param  string $raw
+     * @return string
+     */
+    public function escape($raw)
+    {
+        $flags = ENT_QUOTES;
+
+        // HHVM has all constants defined, but only ENT_IGNORE
+        // works at the moment
+        if (defined("ENT_SUBSTITUTE") && !defined("HHVM_VERSION")) {
+            $flags |= ENT_SUBSTITUTE;
+        } else {
+            // This is for 5.3.
+            // The documentation warns of a potential security issue,
+            // but it seems it does not apply in our case, because
+            // we do not blacklist anything anywhere.
+            $flags |= ENT_IGNORE;
+        }
+
+        return htmlspecialchars($raw, $flags, "UTF-8");
+    }
+
+    /**
+     * Escapes a string for output in an HTML document, but preserves
+     * URIs within it, and converts them to clickable anchor elements.
+     *
+     * @param  string $raw
+     * @return string
+     */
+    public function escapeButPreserveUris($raw)
+    {
+        $escaped = $this->escape($raw);
+        return preg_replace(
+            "@([A-z]+?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@",
+            "<a href=\"$1\" target=\"_blank\">$1</a>", $escaped
+        );
+    }
+
+    /**
+     * Convert a string to a slug version of itself
+     *
+     * @param  string $original
+     * @return string
+     */
+    public function slug($original)
+    {
+        $slug = str_replace(" ", "-", $original);
+        $slug = preg_replace('/[^\w\d\-\_]/i', '', $slug);
+        return strtolower($slug);
+    }
+
+    /**
+     * Given a template path, render it within its own scope. This
+     * method also accepts an array of additional variables to be
+     * passed to the template.
+     *
+     * @param string $template
+     * @param array  $additionalVariables
+     */
+    public function render($template, array $additionalVariables = null)
+    {
+        $variables = $this->getVariables();
+
+        // Pass the helper to the template:
+        $variables["tpl"] = $this;
+
+        if ($additionalVariables !== null) {
+            $variables = array_replace($variables, $additionalVariables);
+        }
+
+        call_user_func(function () {
+            extract(func_get_arg(1));
+            require func_get_arg(0);
+        }, $template, $variables);
+    }
+
+    /**
+     * Sets the variables to be passed to all templates rendered
+     * by this template helper.
+     *
+     * @param array $variables
+     */
+    public function setVariables(array $variables)
+    {
+        $this->variables = $variables;
+    }
+
+    /**
+     * Sets a single template variable, by its name:
+     *
+     * @param string $variableName
+     * @param mixd   $variableValue
+     */
+    public function setVariable($variableName, $variableValue)
+    {
+        $this->variables[$variableName] = $variableValue;
+    }
+
+    /**
+     * Gets a single template variable, by its name, or
+     * $defaultValue if the variable does not exist
+     *
+     * @param  string $variableName
+     * @param  mixed  $defaultValue
+     * @return mixed
+     */
+    public function getVariable($variableName, $defaultValue = null)
+    {
+        return isset($this->variables[$variableName]) ?
+            $this->variables[$variableName] : $defaultValue;
+    }
+
+    /**
+     * Unsets a single template variable, by its name
+     *
+     * @param string $variableName
+     */
+    public function delVariable($variableName)
+    {
+        unset($this->variables[$variableName]);
+    }
+
+    /**
+     * Returns all variables for this helper
+     *
+     * @return array
+     */
+    public function getVariables()
+    {
+        return $this->variables;
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/deprecated/Zend/ExceptionStrategy.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/deprecated/Zend/ExceptionStrategy.php b/vendor/filp/whoops/src/deprecated/Zend/ExceptionStrategy.php
new file mode 100644
index 0000000..58c72f0
--- /dev/null
+++ b/vendor/filp/whoops/src/deprecated/Zend/ExceptionStrategy.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * ZF2 Integration for Whoops
+ * @author Balázs Németh <zs...@zsilbi.hu>
+ */
+
+namespace Whoops\Provider\Zend;
+
+use Whoops\Run;
+use Zend\Http\Response;
+use Zend\Mvc\Application;
+use Zend\Mvc\MvcEvent;
+use Zend\Mvc\View\Http\ExceptionStrategy as BaseExceptionStrategy;
+
+/**
+ * @deprecated Use https://github.com/ghislainf/zf2-whoops
+ */
+class ExceptionStrategy extends BaseExceptionStrategy
+{
+    protected $run;
+
+    public function __construct(Run $run)
+    {
+        $this->run = $run;
+        return $this;
+    }
+
+    public function prepareExceptionViewModel(MvcEvent $event)
+    {
+        // Do nothing if no error in the event
+        $error = $event->getError();
+        if (empty($error)) {
+            return;
+        }
+
+        // Do nothing if the result is a response object
+        $result = $event->getResult();
+        if ($result instanceof Response) {
+            return;
+        }
+
+        switch ($error) {
+            case Application::ERROR_CONTROLLER_NOT_FOUND:
+            case Application::ERROR_CONTROLLER_INVALID:
+            case Application::ERROR_ROUTER_NO_MATCH:
+                // Specifically not handling these
+                return;
+
+            case Application::ERROR_EXCEPTION:
+            default:
+                $exception = $event->getParam('exception');
+                if ($exception) {
+                    $response = $event->getResponse();
+                    if (!$response || $response->getStatusCode() === 200) {
+                        header('HTTP/1.0 500 Internal Server Error', true, 500);
+                    }
+                    ob_clean();
+                    $this->run->handleException($event->getParam('exception'));
+                }
+                break;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/deprecated/Zend/Module.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/deprecated/Zend/Module.php b/vendor/filp/whoops/src/deprecated/Zend/Module.php
new file mode 100644
index 0000000..545f8a5
--- /dev/null
+++ b/vendor/filp/whoops/src/deprecated/Zend/Module.php
@@ -0,0 +1,107 @@
+<?php
+/**
+ * ZF2 Integration for Whoops
+ * @author Balázs Németh <zs...@zsilbi.hu>
+ *
+ * The Whoops directory should be added as a module to ZF2 (/vendor/Whoops)
+ *
+ * Whoops must be added as the first module
+ * For example:
+ *   'modules' => array(
+ *       'Whoops',
+ *       'Application',
+ *   ),
+ *
+ * This file should be moved next to Whoops/Run.php (/vendor/Whoops/Module.php)
+ *
+ */
+
+namespace Whoops;
+
+use Whoops\Handler\JsonResponseHandler;
+use Whoops\Handler\PrettyPageHandler;
+use Whoops\Provider\Zend\ExceptionStrategy;
+use Whoops\Provider\Zend\RouteNotFoundStrategy;
+use Zend\Console\Request as ConsoleRequest;
+use Zend\EventManager\EventInterface;
+
+/**
+ * @deprecated Use https://github.com/ghislainf/zf2-whoops
+ */
+class Module
+{
+    protected $run;
+
+    public function onBootstrap(EventInterface $event)
+    {
+        $prettyPageHandler = new PrettyPageHandler();
+
+        // Set editor
+        $config = $event->getApplication()->getServiceManager()->get('Config');
+        if (isset($config['view_manager']['editor'])) {
+            $prettyPageHandler->setEditor($config['view_manager']['editor']);
+        }
+
+        $this->run = new Run();
+        $this->run->register();
+        $this->run->pushHandler($prettyPageHandler);
+
+        $this->attachListeners($event);
+    }
+
+    public function getAutoloaderConfig()
+    {
+        return array(
+            'Zend\Loader\StandardAutoloader' => array(
+                'namespaces' => array(
+                    __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
+                ),
+            ),
+        );
+    }
+
+    private function attachListeners(EventInterface $event)
+    {
+        $request = $event->getRequest();
+        $application = $event->getApplication();
+        $services = $application->getServiceManager();
+        $events = $application->getEventManager();
+        $config = $services->get('Config');
+
+        //Display exceptions based on configuration and console mode
+        if ($request instanceof ConsoleRequest || empty($config['view_manager']['display_exceptions'])) {
+            return;
+        }
+
+        $jsonHandler = new JsonResponseHandler();
+
+        if (!empty($config['view_manager']['json_exceptions']['show_trace'])) {
+            //Add trace to the JSON output
+            $jsonHandler->addTraceToOutput(true);
+        }
+
+        if (!empty($config['view_manager']['json_exceptions']['ajax_only'])) {
+            //Only return JSON response for AJAX requests
+            $jsonHandler->onlyForAjaxRequests(true);
+        }
+
+        if (!empty($config['view_manager']['json_exceptions']['display'])) {
+            //Turn on JSON handler
+            $this->run->pushHandler($jsonHandler);
+        }
+
+        //Attach the Whoops ExceptionStrategy
+        $exceptionStrategy = new ExceptionStrategy($this->run);
+        $exceptionStrategy->attach($events);
+
+        //Attach the Whoops RouteNotFoundStrategy
+        $routeNotFoundStrategy = new RouteNotFoundStrategy($this->run);
+        $routeNotFoundStrategy->attach($events);
+
+        //Detach default ExceptionStrategy
+        $services->get('Zend\Mvc\View\Http\ExceptionStrategy')->detach($events);
+
+        //Detach default RouteNotFoundStrategy
+        $services->get('Zend\Mvc\View\Http\RouteNotFoundStrategy')->detach($events);
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/deprecated/Zend/RouteNotFoundStrategy.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/deprecated/Zend/RouteNotFoundStrategy.php b/vendor/filp/whoops/src/deprecated/Zend/RouteNotFoundStrategy.php
new file mode 100644
index 0000000..f1eb7ea
--- /dev/null
+++ b/vendor/filp/whoops/src/deprecated/Zend/RouteNotFoundStrategy.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * ZF2 Integration for Whoops
+ * @author Balázs Németh <zs...@zsilbi.hu>
+ */
+
+namespace Whoops\Provider\Zend;
+
+use Whoops\Run;
+use Zend\Mvc\MvcEvent;
+use Zend\Mvc\View\Http\RouteNotFoundStrategy as BaseRouteNotFoundStrategy;
+use Zend\Stdlib\ResponseInterface as Response;
+use Zend\View\Model\ViewModel;
+
+/**
+ * @deprecated Use https://github.com/ghislainf/zf2-whoops
+ */
+class RouteNotFoundStrategy extends BaseRouteNotFoundStrategy
+{
+    protected $run;
+
+    public function __construct(Run $run)
+    {
+        $this->run = $run;
+    }
+
+    public function prepareNotFoundViewModel(MvcEvent $e)
+    {
+        $vars = $e->getResult();
+        if ($vars instanceof Response) {
+            // Already have a response as the result
+            return;
+        }
+
+        $response = $e->getResponse();
+        if ($response->getStatusCode() != 404) {
+            // Only handle 404 responses
+            return;
+        }
+
+        if (!$vars instanceof ViewModel) {
+            $model = new ViewModel();
+            if (is_string($vars)) {
+                $model->setVariable('message', $vars);
+            } else {
+                $model->setVariable('message', 'Page not found.');
+            }
+        } else {
+            $model = $vars;
+            if ($model->getVariable('message') === null) {
+                $model->setVariable('message', 'Page not found.');
+            }
+        }
+        // If displaying reasons, inject the reason
+        $this->injectNotFoundReason($model, $e);
+
+        // If displaying exceptions, inject
+        $this->injectException($model, $e);
+
+        // Inject controller if we're displaying either the reason or the exception
+        $this->injectController($model, $e);
+
+        ob_clean();
+
+        throw new \Exception($model->getVariable('message') . ' ' . $model->getVariable('reason'));
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/filp/whoops/src/deprecated/Zend/module.config.example.php
----------------------------------------------------------------------
diff --git a/vendor/filp/whoops/src/deprecated/Zend/module.config.example.php b/vendor/filp/whoops/src/deprecated/Zend/module.config.example.php
new file mode 100644
index 0000000..42be30d
--- /dev/null
+++ b/vendor/filp/whoops/src/deprecated/Zend/module.config.example.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * ZF2 Integration for Whoops
+ * @author Balázs Németh <zs...@zsilbi.hu>
+ *
+ * Example controller configuration
+ */
+
+return array(
+    'view_manager' => array(
+        'editor' => 'sublime',
+        'display_not_found_reason' => true,
+        'display_exceptions' => true,
+        'json_exceptions' => array(
+            'display' => true,
+            'ajax_only' => true,
+            'show_trace' => true,
+        ),
+    ),
+);

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/ircmaxell/password-compat/LICENSE.md
----------------------------------------------------------------------
diff --git a/vendor/ircmaxell/password-compat/LICENSE.md b/vendor/ircmaxell/password-compat/LICENSE.md
new file mode 100644
index 0000000..1efc565
--- /dev/null
+++ b/vendor/ircmaxell/password-compat/LICENSE.md
@@ -0,0 +1,7 @@
+Copyright (c) 2012 Anthony Ferrara
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file


[29/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/js/script.js
----------------------------------------------------------------------
diff --git a/public/js/script.js b/public/js/script.js
new file mode 100644
index 0000000..be0826e
--- /dev/null
+++ b/public/js/script.js
@@ -0,0 +1,323 @@
+function getAccodrionCode()
+{
+	return '<div class="panel-group" id="accordion"> \
+  <div class="panel panel-default"> \
+    <div class="panel-heading">\
+      <h4 class="panel-title">\
+        <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">\
+          Collapsible Group Item #1\
+        </a>\
+      </h4>\
+    </div>\
+    <div id="collapseOne" class="panel-collapse collapse in">\
+      <div class="panel-body">\
+        Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably havent heard of them accusamus labore sustainable VHS.\
+      </div>\
+    </div>\
+  </div>';
+}
+
+$(document).ready( function(){
+
+  //making the previously opened tab open again on page reload/modifications.
+  var urlArray = window.location.href.split("#");
+  var openTab = urlArray[1];
+  $('a[href="#' + openTab + '"]').click();
+  //tab open code ends here.
+
+	$(".add-queue").click( function(){
+		$(this).before( $(".queue-block").html() );
+	});
+
+  $(".add-alias").click( function(){
+    $(this).before( '<input class="form-control" maxlength="30" name="hostaliases[]"/>');
+  });
+
+  $(".add-ip").click( function(){
+    $(this).before( '<input class="form-control" maxlength="30" name="ips[]"/>');
+  })
+
+  /* 
+   * code that relates to Job Submission Protocol Interface starts here.
+  */
+
+  $(".add-job-submission").click( function(){
+    /*$(".job-submission-info").removeClass("hide").append( "<div class='job-protocol-block col-md-12'>" + $(".select-job-protocol").html() + "</div><hr/>");
+  	
+  	$('html, body').animate({
+        scrollTop: $(this).position().top + 500
+    }, 200);
+    */
+    $(".add-jsi-body").html( "<div class='job-protocol-block col-md-12'>" + $(".select-job-protocol").html() + "</div><hr/>");
+    $("#add-jsi").modal("show");
+  });
+
+  $("body").on("change", ".selected-job-protocol", function(){
+
+    var selectedVal = $(this).children("option:selected").html().toLowerCase();
+
+    $(this).parent().find("div[class*='resourcemanager-']").remove();
+
+    var parentResDiv = "<div class='resourcemanager-" + selectedVal + "'>"
+                + "<hr/>" 
+                + "Resource Manager: <h4>" + selectedVal + "</h4>"
+                + "<hr/>";
+
+    if( selectedVal == "local")
+    {
+      $(this).after(  parentResDiv + $(".resource-manager-block").html() + "</div>" );
+    }
+    else if( selectedVal == "ssh")
+    {
+      $(this).after(  parentResDiv 
+                      + $(".ssh-block").html()
+                      + $(".resource-manager-block").html() 
+                      + "</div>" );
+      $(this).parent().find(".addedScpValue").removeClass("hide");
+    }
+    else if( selectedVal == "globus")
+    {
+    	alert("Globus Protool is not being setup right now. Please choose another option.");
+    	/*	
+      $(this).parent().append(  parentResDiv 
+                      + $(".ssh-block").html()
+                      + "<h5>Globus Gate Keeper End Point</h5>" 
+                      + "<input class='form-control' name='globusGateKeeperEndPoint'/>"
+                      + "</div>" );
+         */
+    }
+    else if( selectedVal == "unicore")
+    {
+      $(this).parent().append(  parentResDiv 
+                      + $(".ssh-block").html()
+                      + "<h5>Unicore End Point Url</h5>" 
+                      + "<input class='form-control' name='unicoreEndPointURL'/>"
+                      + "</div>" );
+    }
+    else if( selectedVal == "cloud")
+    {
+      alert("Cloud Protool is not being setup right now. Please choose another option.");
+      /*
+      $(this).parent().append(  parentResDiv 
+                      + $(".ssh-block").html()
+                      + $(".cloud-block").html()
+                      );
+      */
+    }
+    else{
+      alert("Something went wrong. Please try again");
+      $(".jspSubmit").addClass("hide");
+    }
+
+    //temporary till all protocols are not setup
+    if( selectedVal == "local" || selectedVal == "ssh" || selectedVal == "unicore" )
+      $(".jspSubmit").removeClass("hide");
+    else
+      $(".jspSubmit").addClass("hide");
+
+  });
+  
+  /* 
+   * code that relates to Job Submission Protocol Interface ends here.
+  */
+
+
+  /* 
+   * code that relates to Data Movement Interface starts here.
+  */
+
+  $(".add-data-movement").click( function(){
+    //$(".data-movement-info").removeClass("hide").append( "<div class='data-movement-block col-md-12'>" + $(".select-data-movement").html() + "</div><hr/>");
+    $(".add-dmi-body").html("<div class='data-movement-block col-md-12'>" + $(".select-data-movement").html() + "</div><hr/>");
+    $("#add-dmi").modal("show");
+  });
+
+
+  $("body").on("change", ".selected-data-movement-protocol", function(){
+
+    var selectedVal = $(this).children("option:selected").html().toLowerCase();
+
+    $(this).parent().find("div[class*='dataprotocol-']").remove();
+    var parentDataDiv = "<div class='dataprotocol-" + selectedVal + "'>"
+                + "<hr/>" 
+                + "Data Management Protocol: <h4>" + selectedVal + "</h4>"
+                + "<hr/>";
+    if( selectedVal == "local")
+    {
+      // to find out what goes here.
+    }
+    else if( selectedVal == "scp" )
+    {
+      $(this).after(  parentDataDiv 
+                      + $(".ssh-block").html()
+                      + "</div>" );
+      $(this).parent().find(".addedScpValue").removeClass("hide");
+    }
+    else if( selectedVal == "sftp")
+    {
+      alert( "SFTP has not been setup yet. Please choose another Data Movement Protocol");
+    }
+    else if( selectedVal == "gridftp")
+    {
+      $(this).after(  parentDataDiv 
+                      + $(".ssh-block").html()
+                      + $(".dm-gridftp").html()
+                      + "</div>" );
+    }
+    else if( selectedVal == "unicore_storage_service")
+    {
+      $(this).after(  parentDataDiv 
+                      + $(".ssh-block").html()
+                      + "<h5>Unicore End Point Url</h5>" 
+                      + "<input class='form-control' name='unicoreEndPointURL'/>"
+                      + "</div>" );
+    }
+    else{
+      alert("Something went wrong. Please try again");
+      $(".dmpSubmit").addClass("hide");
+    }
+    $(".dmpSubmit").removeClass("hide");
+
+  });
+
+  $("body").on("click", ".add-gridFTPEndPoint", function(){
+        $(this).before( '<input class="form-control" maxlength="30" name="gridFTPEndPoints[]"/>');
+  });
+
+   $(".delete-jsi").click( function(){
+      $(".delete-jsi-confirm").val( $(this).data("jsi-id"));
+   });
+
+  $(".delete-jsi-confirm").click( function(){
+
+    var jsiId = $(this).data("jsi-id");
+    $.ajax({
+      type: "POST",
+      url: $(".base-url").val() + "/cr/delete-jsi",
+      data: { 
+              crId : $(".crId").val(), 
+              jsiId : jsiId 
+            }
+    })
+    .complete(function( data ) {
+      $("#confirm-delete-jsi").modal("hide");
+      if( data.responseText == 1)
+      {
+        $(".job-protocol-block").each( function(i, elem){
+          var toBeRemovedChild = $(elem).find(".delete-jsi");
+          if( toBeRemovedChild.data("jsi-id") == jsiId )
+          {
+            $(elem).before("<div class='alert alert-success'>The Job Submission Interface has been successfully deleted.</div>");
+            $(elem).fadeOut().remove();
+          }
+        });
+      }
+    });
+
+  });
+
+  $(".delete-dmi").click( function(){
+      $(".delete-dmi-confirm").val($(this).data("dmi-id"));
+   });
+
+  $(".delete-dmi-confirm").click( function(){
+
+    var dmiId = $(this).data("dmi-id");
+    $.ajax({
+      type: "POST",
+      url: $(".base-url").val() + "/cr/delete-dmi",
+      data: {
+              crId : $(".crId").val(), 
+              dmiId : dmiId 
+            }
+    })
+    .complete(function( data ) {
+      $("#confirm-delete-dmi").modal("hide");
+      if( data.responseText == 1)
+      {
+        $(".data-movement-block").each( function(i, elem){
+          var toBeRemovedChild = $(elem).find(".delete-dmi");
+          if( toBeRemovedChild.data("dmi-id") == dmiId )
+          {
+            $(elem).before("<div class='alert alert-success'>The Data Movement Interface has been successfully deleted.</div>");
+            $(elem).fadeOut().remove();
+          }
+        });
+      }
+
+    });
+  });
+
+  $("#jsi-priority-form").submit( function( event ){
+    event.preventDefault();
+    $.ajax({
+        url: $(this).attr("action"),
+        type: 'post',
+        data: $('#jsi-priority-form').serialize(),
+        success: function(data) {
+                  if( data == 1)
+                  {
+                    $(".priority-updated").removeClass("hide");
+                    $(".priority-updated").fadeIn();
+                    setTimeout( function(){
+                      $(".priority-updated").addClass("hide");
+                      $("#update-jsi-priority").modal("hide");
+
+                    }, 3000);
+                    
+                  }
+        }
+    });
+  });
+
+  $("#dmi-priority-form").submit( function( event ){
+    event.preventDefault();
+    $.ajax({
+        url: $(this).attr("action"),
+        type: 'post',
+        data: $('#dmi-priority-form').serialize(),
+        success: function(data) {
+                  if( data == 1)
+                  {
+                    $(".priority-updated").removeClass("hide");
+                    $(".priority-updated").fadeIn();
+                    setTimeout( function(){
+                      $(".priority-updated").addClass("hide");
+                      $("#update-dmi-priority").modal("hide");
+
+                    }, 3000);
+                    
+                  }
+        }
+    });
+  });
+
+  $(".add-queue-block").on("click", ".create-queue-form", function(){
+    var newQueueName = $(this).parent().parent().find(".create-queue-name").val();
+
+    if (newQueueName.length > 0) {
+        children = ($("#accordion").children());
+
+        queueNameExists = false;
+        children.each( function(index, elem){
+          var existingQueueName = $(elem).find(".existing-queue-name").html();
+          if( existingQueueName == newQueueName)
+          {
+            queueNameExists = true;
+            return false;
+          }
+        });
+
+        if( queueNameExists)
+          alert( "This queue name already exists. Please choose another name.");
+        else
+          $(this).parent().parent().parent().submit();
+        
+    } else {
+        alert("Please enter queue name before submitting");
+    }
+
+  });
+
+  
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/public/robots.txt
----------------------------------------------------------------------
diff --git a/public/robots.txt b/public/robots.txt
new file mode 100755
index 0000000..eb05362
--- /dev/null
+++ b/public/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow:

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/server.php
----------------------------------------------------------------------
diff --git a/server.php b/server.php
new file mode 100755
index 0000000..5f187f3
--- /dev/null
+++ b/server.php
@@ -0,0 +1,19 @@
+<?php
+
+$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
+
+$uri = urldecode($uri);
+
+$paths = require __DIR__.'/bootstrap/paths.php';
+
+$requested = $paths['public'].$uri;
+
+// This file allows us to emulate Apache's "mod_rewrite" functionality from the
+// built-in PHP web server. This provides a convenient way to test a Laravel
+// application without having installed a "real" web server software here.
+if ($uri !== '/' and file_exists($requested))
+{
+	return false;
+}
+
+require_once $paths['public'].'/index.php';

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/apache/thrift
----------------------------------------------------------------------
diff --git a/vendor/apache/thrift b/vendor/apache/thrift
new file mode 160000
index 0000000..dc799ca
--- /dev/null
+++ b/vendor/apache/thrift
@@ -0,0 +1 @@
+Subproject commit dc799ca078627a8e400cfcdbb965acf6abf86eef

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/autoload.php
----------------------------------------------------------------------
diff --git a/vendor/autoload.php b/vendor/autoload.php
new file mode 100644
index 0000000..9614c3e
--- /dev/null
+++ b/vendor/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer' . '/autoload_real.php';
+
+return ComposerAutoloaderInit95aab4dcf953834b79e3b5f569ea8229::getLoader();

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/bin/boris
----------------------------------------------------------------------
diff --git a/vendor/bin/boris b/vendor/bin/boris
new file mode 120000
index 0000000..a06032d
--- /dev/null
+++ b/vendor/bin/boris
@@ -0,0 +1 @@
+../d11wtq/boris/bin/boris
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/bin/classpreloader.php
----------------------------------------------------------------------
diff --git a/vendor/bin/classpreloader.php b/vendor/bin/classpreloader.php
new file mode 120000
index 0000000..d4b4e66
--- /dev/null
+++ b/vendor/bin/classpreloader.php
@@ -0,0 +1 @@
+../classpreloader/classpreloader/classpreloader.php
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/classpreloader/classpreloader/.gitignore
----------------------------------------------------------------------
diff --git a/vendor/classpreloader/classpreloader/.gitignore b/vendor/classpreloader/classpreloader/.gitignore
new file mode 100644
index 0000000..19982ea
--- /dev/null
+++ b/vendor/classpreloader/classpreloader/.gitignore
@@ -0,0 +1,2 @@
+composer.lock
+vendor
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/classpreloader/classpreloader/LICENSE.md
----------------------------------------------------------------------
diff --git a/vendor/classpreloader/classpreloader/LICENSE.md b/vendor/classpreloader/classpreloader/LICENSE.md
new file mode 100644
index 0000000..6762891
--- /dev/null
+++ b/vendor/classpreloader/classpreloader/LICENSE.md
@@ -0,0 +1,19 @@
+Copyright (c) 2013 Michael Dowling <mt...@gmail.com> and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/classpreloader/classpreloader/README.md
----------------------------------------------------------------------
diff --git a/vendor/classpreloader/classpreloader/README.md b/vendor/classpreloader/classpreloader/README.md
new file mode 100644
index 0000000..8a1eba2
--- /dev/null
+++ b/vendor/classpreloader/classpreloader/README.md
@@ -0,0 +1,108 @@
+Class Preloader for PHP
+=======================
+
+This tool is used to generate a single PHP script containing all of the classes
+required for a specific use case. Using a single compiled PHP script instead of relying on autoloading can help to improve the performance of specific use cases. For example, if your application executes the same bootstrap code on every request, then you could generate a preloader (the compiled output of this tool) to reduce the cost of autoloading the required classes over and over.
+
+What it actually does
+---------------------
+
+This tool listens for each file that is autoloaded, creates a list of files, traverses the parsed PHP file using [PHPParser](https://github.com/nikic/PHP-Parser) and any visitors of a Config object, wraps the code of each file in a namespace block if necessary, and writes the contents of every autoloaded file (in order) to a single PHP file.
+
+Notice
+------
+
+This tool should only be used for specific use cases. There is a tradeoff between preloading classes and autoloading classes. The point at which it is no longer beneficial to generate a preloader is application specific. You'll need to perform your own benchmarks to determine if this tool will speed up your application.
+
+Installation
+------------
+
+Add the ClassPreloader as a dependency to your composer.json file:
+
+```javascript
+{
+    "require": {
+        "classpreloader/classpreloader": "1.0.*"
+    },
+    "config": {
+        "bin-dir": "bin"
+    }
+}
+```
+
+Using the tool
+--------------
+
+You use the bin/classpreloader.php compile command with a few command line flags to generate a preloader.
+
+`--config`: A CSV containing a list of files to combine into a classmap, or the full path to a PHP script that returns an array of classes or a `\ClassPreloader\Config` object.
+
+`--output`: The path to the file to store the compiled PHP code. If the directory does not exist, the tool will attempt to create it.
+
+`--fix_dir`: (defaults to 1) Set to 0 to not replace "__DIR__" constants with the actual directory of the original file.
+
+`--fix_file`: (defaults to 1) Set to 0 to not replace "__FILE__" constants with the actual location of the original file.
+
+Writing a config file
+---------------------
+
+Creating a PHP based configuration file is fairly simple. Just include the vendor/classpreloader/classpreloader/src/ClassPreloader/ClassLoader.php file and call the `ClassLoader::getIncludes()` method, passing a function as the only  argument. This function should accept a `ClassLoader` object and register the passed in object's autoloader using `$loader->register()`. It is important to register the `ClassLoader` autoloader after all other autoloaders are registered.
+
+An array or `\ClassPreloader\Config` must be returned from the config file. You can attach custom node visitors if you need to perform any sort of translation on each matching file before writing it to the output.
+
+```php
+<?php
+// Here's an example of creating a preloader for using Amazon DynamoDB and the
+// AWS SDK for PHP 2.
+
+require __DIR__ . '/src/ClassPreloader/ClassLoader.php';
+
+use ClassPreloader\ClassLoader;
+
+$config = ClassLoader::getIncludes(function(ClassLoader $loader) {
+    require __DIR__ . '/vendor/autoload.php';
+    $loader->register();
+    $aws = Aws\Common\Aws::factory(array(
+        'key'    => '***',
+        'secret' => '***',
+        'region' => 'us-east-1'
+    ));
+    $client = $aws->get('dynamodb');
+    $client->listTables()->getAll();
+});
+
+// Add a regex filter that requires all classes to match the regex
+// $config->addInclusiveFilter('/Foo/');
+
+// Add a regex filter that requires that a class does not match the filter
+// $config->addExclusiveFilter('/Foo/');
+
+return $config;
+```
+
+You would then run the classpreloader.php script and pass in the full path to the above PHP script.
+
+`php bin/classpreloader.php compile --config="/path/to/the_example.php" --output="/tmp/preloader.php"`
+
+The above command will create a file in /tmp/preloader.php that contains every file that was autoloaded while running the snippet of code in the anonymous function. You would generate this file and include it in your production script.
+
+Automating the process with Composer
+------------------------------------
+
+You can automate the process of creating preloaders using Composer's script functionality. For example, if you wanted to automatically create a preloader each time the AWS SDK for PHP is installed, you could define a script like the following in your composer.json file:
+
+```javascript
+{
+    "require": {
+        "classpreloader/classpreloader": "1.0.*"
+    },
+    "scripts": {
+        "post-autoload-dump": "php bin/classpreloader.php compile --config=/path/to/the_example.php --output=/path/to/preload.php"
+    },
+    "config": {
+        "bin-dir": "bin"
+    }
+}
+```
+
+Using the above composer.json file, each time the project's autoloader is recreated using the install or update command, the classpreloader.php file will be executed. This script would generate a preload.php containing the classes required to run the previously demonstrated "the_example.php" configuration file.

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/classpreloader/classpreloader/classpreloader.php
----------------------------------------------------------------------
diff --git a/vendor/classpreloader/classpreloader/classpreloader.php b/vendor/classpreloader/classpreloader/classpreloader.php
new file mode 100755
index 0000000..5dc4da1
--- /dev/null
+++ b/vendor/classpreloader/classpreloader/classpreloader.php
@@ -0,0 +1,10 @@
+#! /usr/bin/env php
+<?php
+
+if (file_exists($autoloadPath = __DIR__ . '/../../autoload.php')) {
+    require_once $autoloadPath;
+} else {
+    require_once __DIR__ . '/vendor/autoload.php';
+}
+$application = new ClassPreloader\Application();
+$application->run();

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/classpreloader/classpreloader/composer.json
----------------------------------------------------------------------
diff --git a/vendor/classpreloader/classpreloader/composer.json b/vendor/classpreloader/classpreloader/composer.json
new file mode 100644
index 0000000..6d2a4bc
--- /dev/null
+++ b/vendor/classpreloader/classpreloader/composer.json
@@ -0,0 +1,28 @@
+{
+    "name": "classpreloader/classpreloader",
+    "description":"Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case",
+    "keywords":["autoload","class","preload"],
+    "license":"MIT",
+
+    "require":{
+        "php": ">=5.3.3",
+        "symfony/console": "~2.1",
+        "symfony/filesystem": "~2.1",
+        "symfony/finder": "~2.1",
+        "nikic/php-parser": "~0.9"
+    },
+
+    "autoload": {
+        "psr-0": {
+            "ClassPreloader": "src/"
+        }
+    },
+
+    "bin": ["classpreloader.php"],
+
+    "extra": {
+        "branch-alias": {
+            "dev-master": "1.0-dev"
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/classpreloader/classpreloader/src/ClassPreloader/Application.php
----------------------------------------------------------------------
diff --git a/vendor/classpreloader/classpreloader/src/ClassPreloader/Application.php b/vendor/classpreloader/classpreloader/src/ClassPreloader/Application.php
new file mode 100644
index 0000000..9e75916
--- /dev/null
+++ b/vendor/classpreloader/classpreloader/src/ClassPreloader/Application.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace ClassPreloader;
+
+use Symfony\Component\Finder\Finder;
+use Symfony\Component\Console\Application as BaseApplication;
+
+/**
+ * ClassPreloader application CLI
+ */
+class Application extends BaseApplication
+{
+    public function __construct()
+    {
+        parent::__construct('ClassPreloader');
+
+        // Create a finder to find each non-abstract command in the filesystem
+        $finder = new Finder();
+        $finder->files()
+            ->in(__DIR__ . '/Command')
+            ->notName('Abstract*')
+            ->name('*.php');
+
+        // Add each command to the CLI
+        foreach ($finder as $file) {
+            $filename = str_replace('\\', '/', $file->getRealpath());
+            $pos = strrpos($filename, '/ClassPreloader/') + strlen('/ClassPreloader/');
+            $class = __NAMESPACE__ . '\\'
+                . substr(str_replace('/', '\\', substr($filename, $pos)), 0, -4);
+            $this->add(new $class());
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/classpreloader/classpreloader/src/ClassPreloader/ClassList.php
----------------------------------------------------------------------
diff --git a/vendor/classpreloader/classpreloader/src/ClassPreloader/ClassList.php b/vendor/classpreloader/classpreloader/src/ClassPreloader/ClassList.php
new file mode 100644
index 0000000..aaea2b5
--- /dev/null
+++ b/vendor/classpreloader/classpreloader/src/ClassPreloader/ClassList.php
@@ -0,0 +1,87 @@
+<?php
+
+namespace ClassPreloader;
+
+/**
+ * Maintains a list of classes using a sort of doubly-linked list
+ */
+class ClassList
+{
+    /**
+     * @var ClassNode The head node of the list
+     */
+    protected $head;
+
+    /**
+     * @var ClassNode The current node of the list
+     */
+    protected $current;
+
+    public function __construct()
+    {
+        $this->clear();
+    }
+
+    /**
+     * Clear the contents of the list and reset the head node and current node
+     */
+    public function clear()
+    {
+        $this->head = new ClassNode(null);
+        $this->current = $this->head;
+    }
+
+    /**
+     * Traverse to the next node in the list
+     */
+    public function next()
+    {
+        if (isset($this->current->next)) {
+            $this->current = $this->current->next;
+        } else {
+            $this->current->next = new ClassNode(null, $this->current);
+            $this->current = $this->current->next;
+        }
+    }
+
+    /**
+     * Insert a value at the current position in the list. Any currently set
+     * value at this position will be pushed back in the list after the new
+     * value
+     *
+     * @param mixed $value Value to insert
+     */
+    public function push($value)
+    {
+        if (!$this->current->value) {
+            $this->current->value = $value;
+        } else {
+            $temp = $this->current;
+            $this->current = new ClassNode($value, $temp->prev);
+            $this->current->next = $temp;
+            $temp->prev = $this->current;
+            if ($temp === $this->head) {
+                $this->head = $this->current;
+            } else {
+                $this->current->prev->next = $this->current;
+            }
+        }
+    }
+
+    /**
+     * Traverse the ClassList and return a list of classes
+     *
+     * @return array
+     */
+    public function getClasses()
+    {
+        $classes = array();
+        $current = $this->head;
+        while ($current && $current->value) {
+            $classes[] = $current->value;
+            $current = $current->next;
+        }
+
+        return array_filter($classes);
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/classpreloader/classpreloader/src/ClassPreloader/ClassLoader.php
----------------------------------------------------------------------
diff --git a/vendor/classpreloader/classpreloader/src/ClassPreloader/ClassLoader.php b/vendor/classpreloader/classpreloader/src/ClassPreloader/ClassLoader.php
new file mode 100644
index 0000000..55c7891
--- /dev/null
+++ b/vendor/classpreloader/classpreloader/src/ClassPreloader/ClassLoader.php
@@ -0,0 +1,110 @@
+<?php
+
+namespace ClassPreloader;
+
+require_once __DIR__ . '/ClassNode.php';
+require_once __DIR__ . '/ClassList.php';
+
+/**
+ * Creates an autoloader that intercepts and keeps track of each include in
+ * order that files must be included. This autoloader proxies to all other
+ * underlying autoloaders.
+ */
+class ClassLoader
+{
+    /**
+     * @var ClassList List of loaded classes
+     */
+    public $classList;
+
+    /**
+     * Create the dependency list
+     */
+    public function __construct()
+    {
+        $this->classList = new ClassList();
+    }
+
+    /**
+     * Wrap a block of code in the autoloader and get a list of loaded classes
+     *
+     * @param \Callable $func Callable function
+     *
+     * @return Config
+     */
+    public static function getIncludes($func)
+    {
+        $loader = new self();
+        call_user_func($func, $loader);
+        $loader->unregister();
+
+        $config = new Config();
+        foreach ($loader->getFilenames() as $file) {
+            $config->addFile($file);
+        }
+
+        return $config;
+    }
+
+    /**
+     * Registers this instance as an autoloader.
+     */
+    public function register()
+    {
+        spl_autoload_register(array($this, 'loadClass'), true, true);
+    }
+
+    /**
+     * Unregisters this instance as an autoloader.
+     */
+    public function unregister()
+    {
+        spl_autoload_unregister(array($this, 'loadClass'));
+    }
+
+    /**
+     * Loads the given class or interface.
+     *
+     * @param  string    $class The name of the class
+     * @return bool|null True, if loaded
+     */
+    public function loadClass($class)
+    {
+        foreach (spl_autoload_functions() as $func) {
+            if (is_array($func) && $func[0] === $this) {
+                continue;
+            }
+            $this->classList->push($class);
+            if (call_user_func($func, $class)) {
+                break;
+            }
+        }
+
+        $this->classList->next();
+
+        return true;
+    }
+
+    /**
+     * Get an array of loaded file names in order of loading
+     *
+     * @return array
+     */
+    public function getFilenames()
+    {
+        $files = array();
+        foreach ($this->classList->getClasses() as $class) {
+            // Push interfaces before classes if not already loaded
+            $r = new \ReflectionClass($class);
+            foreach ($r->getInterfaces() as $inf) {
+                $name = $inf->getFileName();
+                if ($name && !in_array($name, $files)) {
+                    $files[] = $name;
+                }
+            }
+            $files[] = $r->getFileName();
+        }
+
+        return $files;
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/classpreloader/classpreloader/src/ClassPreloader/ClassNode.php
----------------------------------------------------------------------
diff --git a/vendor/classpreloader/classpreloader/src/ClassPreloader/ClassNode.php b/vendor/classpreloader/classpreloader/src/ClassPreloader/ClassNode.php
new file mode 100644
index 0000000..78abb28
--- /dev/null
+++ b/vendor/classpreloader/classpreloader/src/ClassPreloader/ClassNode.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace ClassPreloader;
+
+/**
+ * A simple ClassNode that contains a value, previous, and next pointers
+ */
+class ClassNode
+{
+    /**
+     * @var ClassNode|null Next node pointer
+     */
+    public $next;
+
+    /**
+     * @var ClassNode|null Previous node pointer
+     */
+    public $prev;
+
+    /**
+     * @var mixed Value of the ClassNode
+     */
+    public $value;
+
+    /**
+     * Create a new ClassNode
+     *
+     * @param mixed     $value Value of the class node
+     * @param ClassNode $prev  Previous node pointer
+     */
+    public function __construct($value = null, $prev = null)
+    {
+        $this->value = $value;
+        $this->prev = $prev;
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/classpreloader/classpreloader/src/ClassPreloader/Command/PreCompileCommand.php
----------------------------------------------------------------------
diff --git a/vendor/classpreloader/classpreloader/src/ClassPreloader/Command/PreCompileCommand.php b/vendor/classpreloader/classpreloader/src/ClassPreloader/Command/PreCompileCommand.php
new file mode 100644
index 0000000..b49e3e6
--- /dev/null
+++ b/vendor/classpreloader/classpreloader/src/ClassPreloader/Command/PreCompileCommand.php
@@ -0,0 +1,216 @@
+<?php
+
+namespace ClassPreloader\Command;
+
+use ClassPreloader\Config;
+use ClassPreloader\Parser\DirVisitor;
+use ClassPreloader\Parser\NodeTraverser;
+use ClassPreloader\Parser\FileVisitor;
+use Symfony\Component\Filesystem\Filesystem;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Command\Command;
+
+class PreCompileCommand extends Command
+{
+    protected $input;
+    protected $output;
+    protected $printer;
+    protected $traverser;
+    protected $parser;
+
+    public function __construct()
+    {
+        parent::__construct();
+        $this->printer = new \PHPParser_PrettyPrinter_Zend();
+        $this->parser = new \PHPParser_Parser(new \PHPParser_Lexer());
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        parent::configure();
+
+        $this->setName('compile')
+            ->setDescription('Compiles classes into a single file')
+            ->addOption('config', null, InputOption::VALUE_REQUIRED, 'CSV of filenames to load, or the path to a PHP script that returns an array of file names')
+            ->addOption('output', null, InputOption::VALUE_REQUIRED)
+            ->addOption('fix_dir', null, InputOption::VALUE_REQUIRED, 'Convert __DIR__ constants to the original directory of a file', 1)
+            ->addOption('fix_file', null, InputOption::VALUE_REQUIRED, 'Convert __FILE__ constants to the original path of a file', 1)
+            ->addOption('strip_comments', null, InputOption::VALUE_REQUIRED, 'Set to 1 to strip comments from each source file', 0)
+            ->setHelp(<<<EOF
+The <info>%command.name%</info> command iterates over each script, normalizes
+the file to be wrapped in namespaces, and combines each file into a single PHP
+file.
+EOF
+        );
+    }
+
+    /**
+     * Get the node traverser used by the command
+     *
+     * @return NodeTraverser
+     */
+    protected function getTraverser()
+    {
+        if (!$this->traverser) {
+            $this->traverser = new NodeTraverser();
+            if ($this->input->getOption('fix_dir')) {
+                $this->traverser->addVisitor(new DirVisitor());
+            }
+            if ($this->input->getOption('fix_file')) {
+                $this->traverser->addVisitor(new FileVisitor());
+            }
+        }
+
+        return $this->traverser;
+    }
+
+    /**
+     * Get a pretty printed string of code from a file while applying visitors
+     *
+     * @param string $file Name of the file to get code from
+     *
+     * @return string
+     * @throws \RuntimeException
+     */
+    protected function getCode($file)
+    {
+        if (!is_readable($file)) {
+            throw new \RuntimeException("Cannot open {$file} for reading");
+        }
+
+        if ($this->input->getOption('strip_comments')) {
+            $content = php_strip_whitespace($file);
+        } else {
+            $content = file_get_contents($file);
+        }
+
+        $stmts = $this->getTraverser()
+            ->traverseFile($this->parser->parse($content), $file);
+        $pretty = $this->printer->prettyPrint($stmts);
+
+        // Remove the open PHP tag
+        if (substr($pretty, 6) == "<?php\n") {
+            $pretty = substr($pretty, 7);
+        }
+
+        // Add a wrapping namespace if needed
+        if (false === strpos($pretty, 'namespace ')) {
+            $pretty = "namespace {\n" . $pretty . "\n}\n";
+        }
+
+        return $pretty;
+    }
+
+    /**
+     * Validate the command options
+     */
+    protected function validateCommand()
+    {
+        if (!$this->input->getOption('output')) {
+            throw new \InvalidArgumentException('An output option is required');
+        }
+
+        if (!$this->input->getOption('config')) {
+            throw new \InvalidArgumentException('A config option is required');
+        }
+    }
+
+    /**
+     * Get a list of files in order
+     *
+     * @param mixed $config Configuration option
+     *
+     * @return array
+     * @throws \InvalidArgumentException
+     */
+    protected function getFileList($config)
+    {
+        $this->output->writeln('> Loading configuration file');
+        $filesystem = new Filesystem();
+
+        if (strpos($config, ',')) {
+            return array_filter(explode(',', $config));
+        }
+
+        // Ensure absolute paths are resolved
+        if (!$filesystem->isAbsolutePath($config)) {
+            $config = getcwd() . '/' . $config;
+        }
+
+        // Ensure that the config file exists
+        if (!file_exists($config)) {
+            throw new \InvalidArgumentException(sprintf('Configuration file "%s" does not exist.', $config));
+        }
+
+        $result = require $config;
+
+        if ($result instanceof Config) {
+            foreach ($result->getVisitors() as $visitor) {
+                $this->getTraverser()->addVisitor($visitor);
+            }
+
+            return $result;
+        } elseif (is_array($result)) {
+            return $result;
+        }
+
+        throw new \InvalidArgumentException(
+            'Config must return an array of filenames or a Config object'
+        );
+    }
+
+    /**
+     * Prepare the output file and directory
+     *
+     * @param string $outputFile The full path to the output file
+     *
+     * @throws \RuntimeException
+     */
+    protected function prepareOutput($outputFile)
+    {
+        $dir = dirname($outputFile);
+        if (!is_dir($dir) && !mkdir($dir, 0777, true)) {
+            throw new \RuntimeException('Unable to create directory ' . $dir);
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $this->input = $input;
+        $this->output = $output;
+        $this->validateCommand();
+        $outputFile = $this->input->getOption('output');
+        $config = $this->input->getOption('config');
+        $files = $this->getFileList($config);
+        $output->writeLn('- Found ' . count($files) . ' files');
+
+        // Make sure that the output dir can be used or create it
+        $this->prepareOutput($outputFile);
+
+        if (!$handle = fopen($input->getOption('output'), 'w')) {
+            throw new \RuntimeException(
+                "Unable to open {$outputFile} for writing"
+            );
+        }
+
+        // Write the first line of the output
+        fwrite($handle, "<?php\n");
+        $output->writeln('> Compiling classes');
+        foreach ($files as $file) {
+            $this->output->writeln('- Writing ' . $file);
+            fwrite($handle, $this->getCode($file) . "\n");
+        }
+        fclose($handle);
+
+        $output->writeln("> Compiled loader written to {$outputFile}");
+        $output->writeln('- ' . (round(filesize($outputFile) / 1024)) . ' kb');
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/classpreloader/classpreloader/src/ClassPreloader/Config.php
----------------------------------------------------------------------
diff --git a/vendor/classpreloader/classpreloader/src/ClassPreloader/Config.php b/vendor/classpreloader/classpreloader/src/ClassPreloader/Config.php
new file mode 100644
index 0000000..30d815c
--- /dev/null
+++ b/vendor/classpreloader/classpreloader/src/ClassPreloader/Config.php
@@ -0,0 +1,133 @@
+<?php
+
+namespace ClassPreloader;
+
+use Parser\AbstractNodeVisitor;
+
+/**
+ * Class loader configuration object
+ */
+class Config implements \IteratorAggregate
+{
+    /**
+     * @var array Array of AbstractNodeVisitor objects that visit nodes
+     */
+    protected $visitors = array();
+
+    /**
+     * @var array Array of file names
+     */
+    protected $filenames = array();
+
+    /**
+     * @var array Array of exclusive filters
+     */
+    protected $exclusiveFilters = array();
+
+    /**
+     * @var array Array of inclusive filters
+     */
+    protected $inclusiveFilters = array();
+
+    /**
+     * Add the filename owned by the config
+     *
+     * @param string $filename File name
+     *
+     * @return self
+     */
+    public function addFile($filename)
+    {
+        $this->filenames[] = $filename;
+
+        return $this;
+    }
+
+    /**
+     * Get an array of file names that satisfy any added filters
+     *
+     * @return array
+     */
+    public function getFilenames()
+    {
+        $filenames = array();
+        foreach ($this->filenames as $f) {
+            foreach ($this->inclusiveFilters as $filter) {
+                if (!preg_match($filter, $f)) {
+                    continue 2;
+                }
+            }
+            foreach ($this->exclusiveFilters as $filter) {
+                if (preg_match($filter, $f)) {
+                    continue 2;
+                }
+            }
+            $filenames[] = $f;
+        }
+
+        return $filenames;
+    }
+
+    /**
+     * Get an iterator for the filenames
+     *
+     * @return \ArrayIterator
+     */
+    public function getIterator()
+    {
+        return new \ArrayIterator($this->getFilenames());
+    }
+
+    /**
+     * Add a filter used to filter out classes matching a specific pattern
+     *
+     * @param string $pattern Regular expression pattern
+     *
+     * @return self
+     */
+    public function addExclusiveFilter($pattern)
+    {
+        $this->exclusiveFilters[] = $pattern;
+
+        return $this;
+    }
+
+    /**
+     * Add a filter used to grab only file names matching the pattern
+     *
+     * @param string $pattern Regular expression pattern
+     *
+     * @return self
+     */
+    public function addInclusiveFilter($pattern)
+    {
+        $this->inclusiveFilters[] = $pattern;
+
+        return $this;
+    }
+
+    /**
+     * Add a visitor that will visit each node when traversing the node list
+     * of each file.
+     *
+     * @param AbstractNodeVisitor $visitor Node visitor
+     *
+     * @return self
+     */
+    public function addVisitor(AbstractNodeVisitor $visitor)
+    {
+        $this->visitors[] = $visitor;
+
+        return $this;
+    }
+
+    /**
+     * Get an array of node visitors
+     *
+     * @return array
+     */
+    public function getVisitors()
+    {
+        return $this->visitors;
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/classpreloader/classpreloader/src/ClassPreloader/Parser/AbstractNodeVisitor.php
----------------------------------------------------------------------
diff --git a/vendor/classpreloader/classpreloader/src/ClassPreloader/Parser/AbstractNodeVisitor.php b/vendor/classpreloader/classpreloader/src/ClassPreloader/Parser/AbstractNodeVisitor.php
new file mode 100644
index 0000000..cd05ab9
--- /dev/null
+++ b/vendor/classpreloader/classpreloader/src/ClassPreloader/Parser/AbstractNodeVisitor.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace ClassPreloader\Parser;
+
+/**
+ * Abstract node visitor used to track the filename
+ */
+abstract class AbstractNodeVisitor extends \PHPParser_NodeVisitorAbstract
+{
+    /**
+     * @var string Current file being parsed
+     */
+    protected $filename = '';
+
+    /**
+     * Set the full path to the current file being parsed
+     *
+     * @param string $filename Filename being parser
+     *
+     * @return self
+     */
+    public function setFilename($filename)
+    {
+        $this->filename = $filename;
+
+        return $this;
+    }
+
+    /**
+     * Get the full path to the current file being parsed
+     *
+     * @return string
+     */
+    public function getFilename()
+    {
+        return $this->filename;
+    }
+
+    /**
+     * Get the directory of the current file being parsed
+     *
+     * @return string
+     */
+    public function getDir()
+    {
+        return dirname($this->getFilename());
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/classpreloader/classpreloader/src/ClassPreloader/Parser/DirVisitor.php
----------------------------------------------------------------------
diff --git a/vendor/classpreloader/classpreloader/src/ClassPreloader/Parser/DirVisitor.php b/vendor/classpreloader/classpreloader/src/ClassPreloader/Parser/DirVisitor.php
new file mode 100644
index 0000000..24dba9e
--- /dev/null
+++ b/vendor/classpreloader/classpreloader/src/ClassPreloader/Parser/DirVisitor.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace ClassPreloader\Parser;
+
+/**
+ * Finds all references to __DIR__ and replaces them with the actual directory
+ */
+class DirVisitor extends AbstractNodeVisitor
+{
+    public function enterNode(\PHPParser_Node $node)
+    {
+        if ($node instanceof \PHPParser_Node_Scalar_DirConst) {
+            return new \PHPParser_Node_Scalar_String($this->getDir());
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/classpreloader/classpreloader/src/ClassPreloader/Parser/FileVisitor.php
----------------------------------------------------------------------
diff --git a/vendor/classpreloader/classpreloader/src/ClassPreloader/Parser/FileVisitor.php b/vendor/classpreloader/classpreloader/src/ClassPreloader/Parser/FileVisitor.php
new file mode 100644
index 0000000..bd0ed61
--- /dev/null
+++ b/vendor/classpreloader/classpreloader/src/ClassPreloader/Parser/FileVisitor.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace ClassPreloader\Parser;
+
+/**
+ * Finds all references to __FILE__ and replaces them with the actual file path
+ */
+class FileVisitor extends AbstractNodeVisitor
+{
+    public function enterNode(\PHPParser_Node $node)
+    {
+        if ($node instanceof \PHPParser_Node_Scalar_FileConst) {
+            return new \PHPParser_Node_Scalar_String($this->getFilename());
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/classpreloader/classpreloader/src/ClassPreloader/Parser/NodeTraverser.php
----------------------------------------------------------------------
diff --git a/vendor/classpreloader/classpreloader/src/ClassPreloader/Parser/NodeTraverser.php b/vendor/classpreloader/classpreloader/src/ClassPreloader/Parser/NodeTraverser.php
new file mode 100644
index 0000000..960988a
--- /dev/null
+++ b/vendor/classpreloader/classpreloader/src/ClassPreloader/Parser/NodeTraverser.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace ClassPreloader\Parser;
+
+/**
+ * Allows a filename to be set when visiting
+ */
+class NodeTraverser extends \PHPParser_NodeTraverser
+{
+    public function traverseFile(array $nodes, $filename)
+    {
+        // Set the correct state on each visitor
+        foreach ($this->visitors as $visitor) {
+            if ($visitor instanceof AbstractNodeVisitor) {
+                $visitor->setFilename($filename);
+            }
+        }
+
+        return $this->traverse($nodes);
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/composer/ClassLoader.php
----------------------------------------------------------------------
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
new file mode 100644
index 0000000..5e1469e
--- /dev/null
+++ b/vendor/composer/ClassLoader.php
@@ -0,0 +1,413 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <na...@naderman.de>
+ *     Jordi Boggiano <j....@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0 class loader
+ *
+ * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
+ *
+ *     $loader = new \Composer\Autoload\ClassLoader();
+ *
+ *     // register classes with namespaces
+ *     $loader->add('Symfony\Component', __DIR__.'/component');
+ *     $loader->add('Symfony',           __DIR__.'/framework');
+ *
+ *     // activate the autoloader
+ *     $loader->register();
+ *
+ *     // to enable searching the include path (eg. for PEAR packages)
+ *     $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fa...@symfony.com>
+ * @author Jordi Boggiano <j....@seld.be>
+ */
+class ClassLoader
+{
+    // PSR-4
+    private $prefixLengthsPsr4 = array();
+    private $prefixDirsPsr4 = array();
+    private $fallbackDirsPsr4 = array();
+
+    // PSR-0
+    private $prefixesPsr0 = array();
+    private $fallbackDirsPsr0 = array();
+
+    private $useIncludePath = false;
+    private $classMap = array();
+
+    private $classMapAuthoritative = false;
+
+    public function getPrefixes()
+    {
+        if (!empty($this->prefixesPsr0)) {
+            return call_user_func_array('array_merge', $this->prefixesPsr0);
+        }
+
+        return array();
+    }
+
+    public function getPrefixesPsr4()
+    {
+        return $this->prefixDirsPsr4;
+    }
+
+    public function getFallbackDirs()
+    {
+        return $this->fallbackDirsPsr0;
+    }
+
+    public function getFallbackDirsPsr4()
+    {
+        return $this->fallbackDirsPsr4;
+    }
+
+    public function getClassMap()
+    {
+        return $this->classMap;
+    }
+
+    /**
+     * @param array $classMap Class to filename map
+     */
+    public function addClassMap(array $classMap)
+    {
+        if ($this->classMap) {
+            $this->classMap = array_merge($this->classMap, $classMap);
+        } else {
+            $this->classMap = $classMap;
+        }
+    }
+
+    /**
+     * Registers a set of PSR-0 directories for a given prefix, either
+     * appending or prepending to the ones previously set for this prefix.
+     *
+     * @param string       $prefix  The prefix
+     * @param array|string $paths   The PSR-0 root directories
+     * @param bool         $prepend Whether to prepend the directories
+     */
+    public function add($prefix, $paths, $prepend = false)
+    {
+        if (!$prefix) {
+            if ($prepend) {
+                $this->fallbackDirsPsr0 = array_merge(
+                    (array) $paths,
+                    $this->fallbackDirsPsr0
+                );
+            } else {
+                $this->fallbackDirsPsr0 = array_merge(
+                    $this->fallbackDirsPsr0,
+                    (array) $paths
+                );
+            }
+
+            return;
+        }
+
+        $first = $prefix[0];
+        if (!isset($this->prefixesPsr0[$first][$prefix])) {
+            $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+            return;
+        }
+        if ($prepend) {
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
+                (array) $paths,
+                $this->prefixesPsr0[$first][$prefix]
+            );
+        } else {
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
+                $this->prefixesPsr0[$first][$prefix],
+                (array) $paths
+            );
+        }
+    }
+
+    /**
+     * Registers a set of PSR-4 directories for a given namespace, either
+     * appending or prepending to the ones previously set for this namespace.
+     *
+     * @param string       $prefix  The prefix/namespace, with trailing '\\'
+     * @param array|string $paths   The PSR-0 base directories
+     * @param bool         $prepend Whether to prepend the directories
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function addPsr4($prefix, $paths, $prepend = false)
+    {
+        if (!$prefix) {
+            // Register directories for the root namespace.
+            if ($prepend) {
+                $this->fallbackDirsPsr4 = array_merge(
+                    (array) $paths,
+                    $this->fallbackDirsPsr4
+                );
+            } else {
+                $this->fallbackDirsPsr4 = array_merge(
+                    $this->fallbackDirsPsr4,
+                    (array) $paths
+                );
+            }
+        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+            // Register directories for a new namespace.
+            $length = strlen($prefix);
+            if ('\\' !== $prefix[$length - 1]) {
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+            }
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
+        } elseif ($prepend) {
+            // Prepend directories for an already registered namespace.
+            $this->prefixDirsPsr4[$prefix] = array_merge(
+                (array) $paths,
+                $this->prefixDirsPsr4[$prefix]
+            );
+        } else {
+            // Append directories for an already registered namespace.
+            $this->prefixDirsPsr4[$prefix] = array_merge(
+                $this->prefixDirsPsr4[$prefix],
+                (array) $paths
+            );
+        }
+    }
+
+    /**
+     * Registers a set of PSR-0 directories for a given prefix,
+     * replacing any others previously set for this prefix.
+     *
+     * @param string       $prefix The prefix
+     * @param array|string $paths  The PSR-0 base directories
+     */
+    public function set($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirsPsr0 = (array) $paths;
+        } else {
+            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+        }
+    }
+
+    /**
+     * Registers a set of PSR-4 directories for a given namespace,
+     * replacing any others previously set for this namespace.
+     *
+     * @param string       $prefix The prefix/namespace, with trailing '\\'
+     * @param array|string $paths  The PSR-4 base directories
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function setPsr4($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirsPsr4 = (array) $paths;
+        } else {
+            $length = strlen($prefix);
+            if ('\\' !== $prefix[$length - 1]) {
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+            }
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
+        }
+    }
+
+    /**
+     * Turns on searching the include path for class files.
+     *
+     * @param bool $useIncludePath
+     */
+    public function setUseIncludePath($useIncludePath)
+    {
+        $this->useIncludePath = $useIncludePath;
+    }
+
+    /**
+     * Can be used to check if the autoloader uses the include path to check
+     * for classes.
+     *
+     * @return bool
+     */
+    public function getUseIncludePath()
+    {
+        return $this->useIncludePath;
+    }
+
+    /**
+     * Turns off searching the prefix and fallback directories for classes
+     * that have not been registered with the class map.
+     *
+     * @param bool $classMapAuthoritative
+     */
+    public function setClassMapAuthoritative($classMapAuthoritative)
+    {
+        $this->classMapAuthoritative = $classMapAuthoritative;
+    }
+
+    /**
+     * Should class lookup fail if not found in the current class map?
+     *
+     * @return bool
+     */
+    public function isClassMapAuthoritative()
+    {
+        return $this->classMapAuthoritative;
+    }
+
+    /**
+     * Registers this instance as an autoloader.
+     *
+     * @param bool $prepend Whether to prepend the autoloader or not
+     */
+    public function register($prepend = false)
+    {
+        spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+    }
+
+    /**
+     * Unregisters this instance as an autoloader.
+     */
+    public function unregister()
+    {
+        spl_autoload_unregister(array($this, 'loadClass'));
+    }
+
+    /**
+     * Loads the given class or interface.
+     *
+     * @param  string    $class The name of the class
+     * @return bool|null True if loaded, null otherwise
+     */
+    public function loadClass($class)
+    {
+        if ($file = $this->findFile($class)) {
+            includeFile($file);
+
+            return true;
+        }
+    }
+
+    /**
+     * Finds the path to the file where the class is defined.
+     *
+     * @param string $class The name of the class
+     *
+     * @return string|false The path if found, false otherwise
+     */
+    public function findFile($class)
+    {
+        // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
+        if ('\\' == $class[0]) {
+            $class = substr($class, 1);
+        }
+
+        // class map lookup
+        if (isset($this->classMap[$class])) {
+            return $this->classMap[$class];
+        }
+        if ($this->classMapAuthoritative) {
+            return false;
+        }
+
+        $file = $this->findFileWithExtension($class, '.php');
+
+        // Search for Hack files if we are running on HHVM
+        if ($file === null && defined('HHVM_VERSION')) {
+            $file = $this->findFileWithExtension($class, '.hh');
+        }
+
+        if ($file === null) {
+            // Remember that this class does not exist.
+            return $this->classMap[$class] = false;
+        }
+
+        return $file;
+    }
+
+    private function findFileWithExtension($class, $ext)
+    {
+        // PSR-4 lookup
+        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+        $first = $class[0];
+        if (isset($this->prefixLengthsPsr4[$first])) {
+            foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
+                if (0 === strpos($class, $prefix)) {
+                    foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+                            return $file;
+                        }
+                    }
+                }
+            }
+        }
+
+        // PSR-4 fallback dirs
+        foreach ($this->fallbackDirsPsr4 as $dir) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+                return $file;
+            }
+        }
+
+        // PSR-0 lookup
+        if (false !== $pos = strrpos($class, '\\')) {
+            // namespaced class name
+            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+        } else {
+            // PEAR-like class name
+            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+        }
+
+        if (isset($this->prefixesPsr0[$first])) {
+            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+                if (0 === strpos($class, $prefix)) {
+                    foreach ($dirs as $dir) {
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                            return $file;
+                        }
+                    }
+                }
+            }
+        }
+
+        // PSR-0 fallback dirs
+        foreach ($this->fallbackDirsPsr0 as $dir) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                return $file;
+            }
+        }
+
+        // PSR-0 include paths.
+        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+            return $file;
+        }
+    }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+    include $file;
+}


[03/57] [partial] airavata-php-gateway git commit: AIRAVATA 1632 + Job Description for Admin Dashboard

Posted by nd...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Validation/Factory.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Factory.php b/vendor/laravel/framework/src/Illuminate/Validation/Factory.php
new file mode 100755
index 0000000..f1e50c3
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Validation/Factory.php
@@ -0,0 +1,237 @@
+<?php namespace Illuminate\Validation;
+
+use Closure;
+use Illuminate\Container\Container;
+use Symfony\Component\Translation\TranslatorInterface;
+
+class Factory {
+
+	/**
+	 * The Translator implementation.
+	 *
+	 * @var \Symfony\Component\Translation\TranslatorInterface
+	 */
+	protected $translator;
+
+	/**
+	 * The Presence Verifier implementation.
+	 *
+	 * @var \Illuminate\Validation\PresenceVerifierInterface
+	 */
+	protected $verifier;
+
+	/**
+	 * The IoC container instance.
+	 *
+	 * @var \Illuminate\Container\Container
+	 */
+	protected $container;
+
+	/**
+	 * All of the custom validator extensions.
+	 *
+	 * @var array
+	 */
+	protected $extensions = array();
+
+	/**
+	 * All of the custom implicit validator extensions.
+	 *
+	 * @var array
+	 */
+	protected $implicitExtensions = array();
+
+	/**
+	 * All of the custom validator message replacers.
+	 *
+	 * @var array
+	 */
+	protected $replacers = array();
+
+	/**
+	 * All of the fallback messages for custom rules.
+	 *
+	 * @var array
+	 */
+	protected $fallbackMessages = array();
+
+	/**
+	 * The Validator resolver instance.
+	 *
+	 * @var Closure
+	 */
+	protected $resolver;
+
+	/**
+	 * Create a new Validator factory instance.
+	 *
+	 * @param  \Symfony\Component\Translation\TranslatorInterface  $translator
+	 * @param  \Illuminate\Container\Container  $container
+	 * @return void
+	 */
+	public function __construct(TranslatorInterface $translator, Container $container = null)
+	{
+		$this->container = $container;
+		$this->translator = $translator;
+	}
+
+	/**
+	 * Create a new Validator instance.
+	 *
+	 * @param  array  $data
+	 * @param  array  $rules
+	 * @param  array  $messages
+	 * @param  array  $customAttributes
+	 * @return \Illuminate\Validation\Validator
+	 */
+	public function make(array $data, array $rules, array $messages = array(), array $customAttributes = array())
+	{
+		// The presence verifier is responsible for checking the unique and exists data
+		// for the validator. It is behind an interface so that multiple versions of
+		// it may be written besides database. We'll inject it into the validator.
+		$validator = $this->resolve($data, $rules, $messages, $customAttributes);
+
+		if ( ! is_null($this->verifier))
+		{
+			$validator->setPresenceVerifier($this->verifier);
+		}
+
+		// Next we'll set the IoC container instance of the validator, which is used to
+		// resolve out class based validator extensions. If it is not set then these
+		// types of extensions will not be possible on these validation instances.
+		if ( ! is_null($this->container))
+		{
+			$validator->setContainer($this->container);
+		}
+
+		$this->addExtensions($validator);
+
+		return $validator;
+	}
+
+	/**
+	 * Add the extensions to a validator instance.
+	 *
+	 * @param  \Illuminate\Validation\Validator  $validator
+	 * @return void
+	 */
+	protected function addExtensions(Validator $validator)
+	{
+		$validator->addExtensions($this->extensions);
+
+		// Next, we will add the implicit extensions, which are similar to the required
+		// and accepted rule in that they are run even if the attributes is not in a
+		// array of data that is given to a validator instances via instantiation.
+		$implicit = $this->implicitExtensions;
+
+		$validator->addImplicitExtensions($implicit);
+
+		$validator->addReplacers($this->replacers);
+
+		$validator->setFallbackMessages($this->fallbackMessages);
+	}
+
+	/**
+	 * Resolve a new Validator instance.
+	 *
+	 * @param  array  $data
+	 * @param  array  $rules
+	 * @param  array  $messages
+	 * @param  array  $customAttributes
+	 * @return \Illuminate\Validation\Validator
+	 */
+	protected function resolve(array $data, array $rules, array $messages, array $customAttributes)
+	{
+		if (is_null($this->resolver))
+		{
+			return new Validator($this->translator, $data, $rules, $messages, $customAttributes);
+		}
+
+		return call_user_func($this->resolver, $this->translator, $data, $rules, $messages, $customAttributes);
+	}
+
+	/**
+	 * Register a custom validator extension.
+	 *
+	 * @param  string  $rule
+	 * @param  \Closure|string  $extension
+	 * @param  string  $message
+	 * @return void
+	 */
+	public function extend($rule, $extension, $message = null)
+	{
+		$this->extensions[$rule] = $extension;
+
+		if ($message) $this->fallbackMessages[snake_case($rule)] = $message;
+	}
+
+	/**
+	 * Register a custom implicit validator extension.
+	 *
+	 * @param  string   $rule
+	 * @param  \Closure|string  $extension
+	 * @param  string  $message
+	 * @return void
+	 */
+	public function extendImplicit($rule, $extension, $message = null)
+	{
+		$this->implicitExtensions[$rule] = $extension;
+
+		if ($message) $this->fallbackMessages[snake_case($rule)] = $message;
+	}
+
+	/**
+	 * Register a custom implicit validator message replacer.
+	 *
+	 * @param  string   $rule
+	 * @param  \Closure|string  $replacer
+	 * @return void
+	 */
+	public function replacer($rule, $replacer)
+	{
+		$this->replacers[$rule] = $replacer;
+	}
+
+	/**
+	 * Set the Validator instance resolver.
+	 *
+	 * @param  \Closure  $resolver
+	 * @return void
+	 */
+	public function resolver(Closure $resolver)
+	{
+		$this->resolver = $resolver;
+	}
+
+	/**
+	 * Get the Translator implementation.
+	 *
+	 * @return \Symfony\Component\Translation\TranslatorInterface
+	 */
+	public function getTranslator()
+	{
+		return $this->translator;
+	}
+
+	/**
+	 * Get the Presence Verifier implementation.
+	 *
+	 * @return \Illuminate\Validation\PresenceVerifierInterface
+	 */
+	public function getPresenceVerifier()
+	{
+		return $this->verifier;
+	}
+
+	/**
+	 * Set the Presence Verifier implementation.
+	 *
+	 * @param  \Illuminate\Validation\PresenceVerifierInterface  $presenceVerifier
+	 * @return void
+	 */
+	public function setPresenceVerifier(PresenceVerifierInterface $presenceVerifier)
+	{
+		$this->verifier = $presenceVerifier;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Validation/PresenceVerifierInterface.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Validation/PresenceVerifierInterface.php b/vendor/laravel/framework/src/Illuminate/Validation/PresenceVerifierInterface.php
new file mode 100755
index 0000000..32fd3f4
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Validation/PresenceVerifierInterface.php
@@ -0,0 +1,29 @@
+<?php namespace Illuminate\Validation;
+
+interface PresenceVerifierInterface {
+
+	/**
+	 * Count the number of objects in a collection having the given value.
+	 *
+	 * @param  string  $collection
+	 * @param  string  $column
+	 * @param  string  $value
+	 * @param  int     $excludeId
+	 * @param  string  $idColumn
+	 * @param  array   $extra
+	 * @return int
+	 */
+	public function getCount($collection, $column, $value, $excludeId = null, $idColumn = null, array $extra = array());
+
+	/**
+	 * Count the number of objects in a collection with the given values.
+	 *
+	 * @param  string  $collection
+	 * @param  string  $column
+	 * @param  array   $values
+	 * @param  array   $extra
+	 * @return int
+	 */
+	public function getMultiCount($collection, $column, array $values, array $extra = array());
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Validation/ValidationServiceProvider.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Validation/ValidationServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Validation/ValidationServiceProvider.php
new file mode 100755
index 0000000..cf71842
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Validation/ValidationServiceProvider.php
@@ -0,0 +1,62 @@
+<?php namespace Illuminate\Validation;
+
+use Illuminate\Support\ServiceProvider;
+
+class ValidationServiceProvider extends ServiceProvider {
+
+	/**
+	 * Indicates if loading of the provider is deferred.
+	 *
+	 * @var bool
+	 */
+	protected $defer = true;
+
+	/**
+	 * Register the service provider.
+	 *
+	 * @return void
+	 */
+	public function register()
+	{
+		$this->registerPresenceVerifier();
+
+		$this->app->bindShared('validator', function($app)
+		{
+			$validator = new Factory($app['translator'], $app);
+
+			// The validation presence verifier is responsible for determining the existence
+			// of values in a given data collection, typically a relational database or
+			// other persistent data stores. And it is used to check for uniqueness.
+			if (isset($app['validation.presence']))
+			{
+				$validator->setPresenceVerifier($app['validation.presence']);
+			}
+
+			return $validator;
+		});
+	}
+
+	/**
+	 * Register the database presence verifier.
+	 *
+	 * @return void
+	 */
+	protected function registerPresenceVerifier()
+	{
+		$this->app->bindShared('validation.presence', function($app)
+		{
+			return new DatabasePresenceVerifier($app['db']);
+		});
+	}
+
+	/**
+	 * Get the services provided by the provider.
+	 *
+	 * @return array
+	 */
+	public function provides()
+	{
+		return array('validator', 'validation.presence');
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Validation/Validator.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Validator.php b/vendor/laravel/framework/src/Illuminate/Validation/Validator.php
new file mode 100755
index 0000000..1c1c64f
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Validation/Validator.php
@@ -0,0 +1,2567 @@
+<?php namespace Illuminate\Validation;
+
+use Closure;
+use DateTime;
+use DateTimeZone;
+use Illuminate\Support\Fluent;
+use Illuminate\Support\MessageBag;
+use Illuminate\Container\Container;
+use Symfony\Component\HttpFoundation\File\File;
+use Symfony\Component\Translation\TranslatorInterface;
+use Symfony\Component\HttpFoundation\File\UploadedFile;
+use Illuminate\Support\Contracts\MessageProviderInterface;
+
+class Validator implements MessageProviderInterface {
+
+	/**
+	 * The Translator implementation.
+	 *
+	 * @var \Symfony\Component\Translation\TranslatorInterface
+	 */
+	protected $translator;
+
+	/**
+	 * The Presence Verifier implementation.
+	 *
+	 * @var \Illuminate\Validation\PresenceVerifierInterface
+	 */
+	protected $presenceVerifier;
+
+	/**
+	 * The failed validation rules.
+	 *
+	 * @var array
+	 */
+	protected $failedRules = array();
+
+	/**
+	 * The message bag instance.
+	 *
+	 * @var \Illuminate\Support\MessageBag
+	 */
+	protected $messages;
+
+	/**
+	 * The data under validation.
+	 *
+	 * @var array
+	 */
+	protected $data;
+
+	/**
+	 * The files under validation.
+	 *
+	 * @var array
+	 */
+	protected $files = array();
+
+	/**
+	 * The rules to be applied to the data.
+	 *
+	 * @var array
+	 */
+	protected $rules;
+
+	/**
+	 * The array of custom error messages.
+	 *
+	 * @var array
+	 */
+	protected $customMessages = array();
+
+	/**
+	 * The array of fallback error messages.
+	 *
+	 * @var array
+	 */
+	protected $fallbackMessages = array();
+
+	/**
+	 * The array of custom attribute names.
+	 *
+	 * @var array
+	 */
+	protected $customAttributes = array();
+
+	/**
+	 * The array of custom displayabled values.
+	 *
+	 * @var array
+	 */
+	protected $customValues = array();
+
+	/**
+	 * All of the custom validator extensions.
+	 *
+	 * @var array
+	 */
+	protected $extensions = array();
+
+	/**
+	 * All of the custom replacer extensions.
+	 *
+	 * @var array
+	 */
+	protected $replacers = array();
+
+	/**
+	 * The size related validation rules.
+	 *
+	 * @var array
+	 */
+	protected $sizeRules = array('Size', 'Between', 'Min', 'Max');
+
+	/**
+	 * The numeric related validation rules.
+	 *
+	 * @var array
+	 */
+	protected $numericRules = array('Numeric', 'Integer');
+
+	/**
+	 * The validation rules that imply the field is required.
+	 *
+	 * @var array
+	 */
+	protected $implicitRules = array(
+		'Required', 'RequiredWith', 'RequiredWithAll', 'RequiredWithout', 'RequiredWithoutAll', 'RequiredIf', 'Accepted'
+	);
+
+	/**
+	 * Create a new Validator instance.
+	 *
+	 * @param  \Symfony\Component\Translation\TranslatorInterface  $translator
+	 * @param  array  $data
+	 * @param  array  $rules
+	 * @param  array  $messages
+	 * @param  array  $customAttributes
+	 * @return void
+	 */
+	public function __construct(TranslatorInterface $translator, array $data, array $rules, array $messages = array(), array $customAttributes = array())
+	{
+		$this->translator = $translator;
+		$this->customMessages = $messages;
+		$this->data = $this->parseData($data);
+		$this->rules = $this->explodeRules($rules);
+		$this->customAttributes = $customAttributes;
+	}
+
+	/**
+	 * Parse the data and hydrate the files array.
+	 *
+	 * @param  array   $data
+	 * @param  string  $arrayKey
+	 * @return array
+	 */
+	protected function parseData(array $data, $arrayKey = null)
+	{
+		if (is_null($arrayKey))
+		{
+			$this->files = array();
+		}
+
+		foreach ($data as $key => $value)
+		{
+			$key = ($arrayKey) ? "$arrayKey.$key" : $key;
+
+			// If this value is an instance of the HttpFoundation File class we will
+			// remove it from the data array and add it to the files array, which
+			// we use to conveniently separate out these files from other data.
+			if ($value instanceof File)
+			{
+				$this->files[$key] = $value;
+
+				unset($data[$key]);
+			}
+			elseif (is_array($value))
+			{
+				$this->parseData($value, $key);
+			}
+		}
+
+		return $data;
+	}
+
+	/**
+	 * Explode the rules into an array of rules.
+	 *
+	 * @param  string|array  $rules
+	 * @return array
+	 */
+	protected function explodeRules($rules)
+	{
+		foreach ($rules as $key => &$rule)
+		{
+			$rule = (is_string($rule)) ? explode('|', $rule) : $rule;
+		}
+
+		return $rules;
+	}
+
+	/**
+	 * Add conditions to a given field based on a Closure.
+	 *
+	 * @param  string  $attribute
+	 * @param  string|array  $rules
+	 * @param  callable  $callback
+	 * @return void
+	 */
+	public function sometimes($attribute, $rules, callable $callback)
+	{
+		$payload = new Fluent(array_merge($this->data, $this->files));
+
+		if (call_user_func($callback, $payload))
+		{
+			foreach ((array) $attribute as $key)
+			{
+				$this->mergeRules($key, $rules);
+			}
+		}
+	}
+
+	/**
+	 * Define a set of rules that apply to each element in an array attribute.
+	 *
+	 * @param  string  $attribute
+	 * @param  string|array  $rules
+	 * @return void
+	 *
+	 * @throws \InvalidArgumentException
+	 */
+	public function each($attribute, $rules)
+	{
+		$data = array_get($this->data, $attribute);
+
+		if ( ! is_array($data))
+		{
+			if ($this->hasRule($attribute, 'Array')) return;
+
+			throw new \InvalidArgumentException('Attribute for each() must be an array.');
+		}
+
+		foreach ($data as $dataKey => $dataValue)
+		{
+			foreach ($rules as $ruleValue)
+			{
+				$this->mergeRules("$attribute.$dataKey", $ruleValue);
+			}
+		}
+	}
+
+	/**
+	 * Merge additional rules into a given attribute.
+	 *
+	 * @param  string  $attribute
+	 * @param  string|array  $rules
+	 * @return void
+	 */
+	public function mergeRules($attribute, $rules)
+	{
+		$current = isset($this->rules[$attribute]) ? $this->rules[$attribute] : [];
+
+		$merge = head($this->explodeRules(array($rules)));
+
+		$this->rules[$attribute] = array_merge($current, $merge);
+	}
+
+	/**
+	 * Determine if the data passes the validation rules.
+	 *
+	 * @return bool
+	 */
+	public function passes()
+	{
+		$this->messages = new MessageBag;
+
+		// We'll spin through each rule, validating the attributes attached to that
+		// rule. Any error messages will be added to the containers with each of
+		// the other error messages, returning true if we don't have messages.
+		foreach ($this->rules as $attribute => $rules)
+		{
+			foreach ($rules as $rule)
+			{
+				$this->validate($attribute, $rule);
+			}
+		}
+
+		return count($this->messages->all()) === 0;
+	}
+
+	/**
+	 * Determine if the data fails the validation rules.
+	 *
+	 * @return bool
+	 */
+	public function fails()
+	{
+		return ! $this->passes();
+	}
+
+	/**
+	 * Validate a given attribute against a rule.
+	 *
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @return void
+	 */
+	protected function validate($attribute, $rule)
+	{
+		list($rule, $parameters) = $this->parseRule($rule);
+
+		if ($rule == '') return;
+
+		// We will get the value for the given attribute from the array of data and then
+		// verify that the attribute is indeed validatable. Unless the rule implies
+		// that the attribute is required, rules are not run for missing values.
+		$value = $this->getValue($attribute);
+
+		$validatable = $this->isValidatable($rule, $attribute, $value);
+
+		$method = "validate{$rule}";
+
+		if ($validatable && ! $this->$method($attribute, $value, $parameters, $this))
+		{
+			$this->addFailure($attribute, $rule, $parameters);
+		}
+	}
+
+	/**
+	 * Returns the data which was valid.
+	 *
+	 * @return array
+	 */
+	public function valid()
+	{
+		if ( ! $this->messages) $this->passes();
+
+		return array_diff_key($this->data, $this->messages()->toArray());
+	}
+
+	/**
+	 * Returns the data which was invalid.
+	 *
+	 * @return array
+	 */
+	public function invalid()
+	{
+		if ( ! $this->messages) $this->passes();
+
+		return array_intersect_key($this->data, $this->messages()->toArray());
+	}
+
+	/**
+	 * Get the value of a given attribute.
+	 *
+	 * @param  string  $attribute
+	 * @return mixed
+	 */
+	protected function getValue($attribute)
+	{
+		if ( ! is_null($value = array_get($this->data, $attribute)))
+		{
+			return $value;
+		}
+		elseif ( ! is_null($value = array_get($this->files, $attribute)))
+		{
+			return $value;
+		}
+	}
+
+	/**
+	 * Determine if the attribute is validatable.
+	 *
+	 * @param  string  $rule
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function isValidatable($rule, $attribute, $value)
+	{
+		return $this->presentOrRuleIsImplicit($rule, $attribute, $value) &&
+               $this->passesOptionalCheck($attribute) &&
+               $this->hasNotFailedPreviousRuleIfPresenceRule($rule, $attribute);
+	}
+
+	/**
+	 * Determine if the field is present, or the rule implies required.
+	 *
+	 * @param  string  $rule
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function presentOrRuleIsImplicit($rule, $attribute, $value)
+	{
+		return $this->validateRequired($attribute, $value) || $this->isImplicit($rule);
+	}
+
+	/**
+	 * Determine if the attribute passes any optional check.
+	 *
+	 * @param  string  $attribute
+	 * @return bool
+	 */
+	protected function passesOptionalCheck($attribute)
+	{
+		if ($this->hasRule($attribute, array('Sometimes')))
+		{
+			return array_key_exists($attribute, array_dot($this->data))
+				|| in_array($attribute, array_keys($this->data))
+				|| array_key_exists($attribute, $this->files);
+		}
+
+		return true;
+	}
+
+	/**
+	 * Determine if a given rule implies the attribute is required.
+	 *
+	 * @param  string  $rule
+	 * @return bool
+	 */
+	protected function isImplicit($rule)
+	{
+		return in_array($rule, $this->implicitRules);
+	}
+
+	/**
+	 * Determine if it's a necessary presence validation.
+	 *
+	 * This is to avoid possible database type comparison errors.
+	 *
+	 * @param  string  $rule
+	 * @param  string  $attribute
+	 * @return bool
+	 */
+	protected function hasNotFailedPreviousRuleIfPresenceRule($rule, $attribute)
+	{
+		return in_array($rule, ['Unique', 'Exists'])
+						? ! $this->messages->has($attribute): true;
+	}
+
+	/**
+	 * Add a failed rule and error message to the collection.
+	 *
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return void
+	 */
+	protected function addFailure($attribute, $rule, $parameters)
+	{
+		$this->addError($attribute, $rule, $parameters);
+
+		$this->failedRules[$attribute][$rule] = $parameters;
+	}
+
+	/**
+	 * Add an error message to the validator's collection of messages.
+	 *
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return void
+	 */
+	protected function addError($attribute, $rule, $parameters)
+	{
+		$message = $this->getMessage($attribute, $rule);
+
+		$message = $this->doReplacements($message, $attribute, $rule, $parameters);
+
+		$this->messages->add($attribute, $message);
+	}
+
+	/**
+	 * "Validate" optional attributes.
+	 *
+	 * Always returns true, just lets us put sometimes in rules.
+	 *
+	 * @return bool
+	 */
+	protected function validateSometimes()
+	{
+		return true;
+	}
+
+	/**
+	 * Validate that a required attribute exists.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateRequired($attribute, $value)
+	{
+		if (is_null($value))
+		{
+			return false;
+		}
+		elseif (is_string($value) && trim($value) === '')
+		{
+			return false;
+		}
+		elseif ((is_array($value) || $value instanceof \Countable) && count($value) < 1)
+		{
+			return false;
+		}
+		elseif ($value instanceof File)
+		{
+			return (string) $value->getPath() != '';
+		}
+
+		return true;
+	}
+
+	/**
+	 * Validate the given attribute is filled if it is present.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateFilled($attribute, $value)
+	{
+		if (array_key_exists($attribute, $this->data) || array_key_exists($attribute, $this->files))
+		{
+			return $this->validateRequired($attribute, $value);
+		}
+
+		return true;
+	}
+
+	/**
+	 * Determine if any of the given attributes fail the required test.
+	 *
+	 * @param  array  $attributes
+	 * @return bool
+	 */
+	protected function anyFailingRequired(array $attributes)
+	{
+		foreach ($attributes as $key)
+		{
+			if ( ! $this->validateRequired($key, $this->getValue($key)))
+			{
+				return true;
+			}
+		}
+
+		return false;
+	}
+
+	/**
+	 * Determine if all of the given attributes fail the required test.
+	 *
+	 * @param  array  $attributes
+	 * @return bool
+	 */
+	protected function allFailingRequired(array $attributes)
+	{
+		foreach ($attributes as $key)
+		{
+			if ($this->validateRequired($key, $this->getValue($key)))
+			{
+				return false;
+			}
+		}
+
+		return true;
+	}
+
+	/**
+	 * Validate that an attribute exists when any other attribute exists.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  mixed   $parameters
+	 * @return bool
+	 */
+	protected function validateRequiredWith($attribute, $value, $parameters)
+	{
+		if ( ! $this->allFailingRequired($parameters))
+		{
+			return $this->validateRequired($attribute, $value);
+		}
+
+		return true;
+	}
+
+	/**
+	 * Validate that an attribute exists when all other attributes exists.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  mixed   $parameters
+	 * @return bool
+	 */
+	protected function validateRequiredWithAll($attribute, $value, $parameters)
+	{
+		if ( ! $this->anyFailingRequired($parameters))
+		{
+			return $this->validateRequired($attribute, $value);
+		}
+
+		return true;
+	}
+
+	/**
+	 * Validate that an attribute exists when another attribute does not.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  mixed   $parameters
+	 * @return bool
+	 */
+	protected function validateRequiredWithout($attribute, $value, $parameters)
+	{
+		if ($this->anyFailingRequired($parameters))
+		{
+			return $this->validateRequired($attribute, $value);
+		}
+
+		return true;
+	}
+
+	/**
+	 * Validate that an attribute exists when all other attributes do not.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  mixed   $parameters
+	 * @return bool
+	 */
+	protected function validateRequiredWithoutAll($attribute, $value, $parameters)
+	{
+		if ($this->allFailingRequired($parameters))
+		{
+			return $this->validateRequired($attribute, $value);
+		}
+
+		return true;
+	}
+
+	/**
+	 * Validate that an attribute exists when another attribute has a given value.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  mixed   $parameters
+	 * @return bool
+	 */
+	protected function validateRequiredIf($attribute, $value, $parameters)
+	{
+		$this->requireParameterCount(2, $parameters, 'required_if');
+
+		$data = array_get($this->data, $parameters[0]);
+
+		$values = array_slice($parameters, 1);
+
+		if (in_array($data, $values))
+		{
+			return $this->validateRequired($attribute, $value);
+		}
+
+		return true;
+	}
+
+	/**
+	 * Get the number of attributes in a list that are present.
+	 *
+	 * @param  array  $attributes
+	 * @return int
+	 */
+	protected function getPresentCount($attributes)
+	{
+		$count = 0;
+
+		foreach ($attributes as $key)
+		{
+			if (array_get($this->data, $key) || array_get($this->files, $key))
+			{
+				$count++;
+			}
+		}
+
+		return $count;
+	}
+
+	/**
+	 * Validate that an attribute has a matching confirmation.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateConfirmed($attribute, $value)
+	{
+		return $this->validateSame($attribute, $value, array($attribute.'_confirmation'));
+	}
+
+	/**
+	 * Validate that two attributes match.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateSame($attribute, $value, $parameters)
+	{
+		$this->requireParameterCount(1, $parameters, 'same');
+
+		$other = array_get($this->data, $parameters[0]);
+
+		return (isset($other) && $value == $other);
+	}
+
+	/**
+	 * Validate that an attribute is different from another attribute.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateDifferent($attribute, $value, $parameters)
+	{
+		$this->requireParameterCount(1, $parameters, 'different');
+
+		$other = $parameters[0];
+
+		return isset($this->data[$other]) && $value != $this->data[$other];
+	}
+
+	/**
+	 * Validate that an attribute was "accepted".
+	 *
+	 * This validation rule implies the attribute is "required".
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateAccepted($attribute, $value)
+	{
+		$acceptable = array('yes', 'on', '1', 1, true, 'true');
+
+		return ($this->validateRequired($attribute, $value) && in_array($value, $acceptable, true));
+	}
+
+	/**
+	 * Validate that an attribute is an array.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateArray($attribute, $value)
+	{
+		return is_array($value);
+	}
+
+	/**
+	 * Validate that an attribute is a boolean.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateBoolean($attribute, $value)
+	{
+		$acceptable = array(true, false, 0, 1, '0', '1');
+
+		return in_array($value, $acceptable, true);
+	}
+
+	/**
+	 * Validate that an attribute is an integer.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateInteger($attribute, $value)
+	{
+		return filter_var($value, FILTER_VALIDATE_INT) !== false;
+	}
+
+	/**
+	 * Validate that an attribute is numeric.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateNumeric($attribute, $value)
+	{
+		return is_numeric($value);
+	}
+
+	/**
+	 * Validate that an attribute is a string.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateString($attribute, $value)
+	{
+		return is_string($value);
+	}
+
+	/**
+	 * Validate that an attribute has a given number of digits.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateDigits($attribute, $value, $parameters)
+	{
+		$this->requireParameterCount(1, $parameters, 'digits');
+
+		return $this->validateNumeric($attribute, $value)
+			&& strlen((string) $value) == $parameters[0];
+	}
+
+	/**
+	 * Validate that an attribute is between a given number of digits.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateDigitsBetween($attribute, $value, $parameters)
+	{
+		$this->requireParameterCount(2, $parameters, 'digits_between');
+
+		$length = strlen((string) $value);
+
+		return $this->validateNumeric($attribute, $value)
+		  && $length >= $parameters[0] && $length <= $parameters[1];
+	}
+
+	/**
+	 * Validate the size of an attribute.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateSize($attribute, $value, $parameters)
+	{
+		$this->requireParameterCount(1, $parameters, 'size');
+
+		return $this->getSize($attribute, $value) == $parameters[0];
+	}
+
+	/**
+	 * Validate the size of an attribute is between a set of values.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateBetween($attribute, $value, $parameters)
+	{
+		$this->requireParameterCount(2, $parameters, 'between');
+
+		$size = $this->getSize($attribute, $value);
+
+		return $size >= $parameters[0] && $size <= $parameters[1];
+	}
+
+	/**
+	 * Validate the size of an attribute is greater than a minimum value.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateMin($attribute, $value, $parameters)
+	{
+		$this->requireParameterCount(1, $parameters, 'min');
+
+		return $this->getSize($attribute, $value) >= $parameters[0];
+	}
+
+	/**
+	 * Validate the size of an attribute is less than a maximum value.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateMax($attribute, $value, $parameters)
+	{
+		$this->requireParameterCount(1, $parameters, 'max');
+
+		if ($value instanceof UploadedFile && ! $value->isValid()) return false;
+
+		return $this->getSize($attribute, $value) <= $parameters[0];
+	}
+
+	/**
+	 * Get the size of an attribute.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return mixed
+	 */
+	protected function getSize($attribute, $value)
+	{
+		$hasNumeric = $this->hasRule($attribute, $this->numericRules);
+
+		// This method will determine if the attribute is a number, string, or file and
+		// return the proper size accordingly. If it is a number, then number itself
+		// is the size. If it is a file, we take kilobytes, and for a string the
+		// entire length of the string will be considered the attribute size.
+		if (is_numeric($value) && $hasNumeric)
+		{
+			return array_get($this->data, $attribute);
+		}
+		elseif (is_array($value))
+		{
+			return count($value);
+		}
+		elseif ($value instanceof File)
+		{
+			return $value->getSize() / 1024;
+		}
+
+		return $this->getStringSize($value);
+	}
+
+	/**
+	 * Get the size of a string.
+	 *
+	 * @param  string  $value
+	 * @return int
+	 */
+	protected function getStringSize($value)
+	{
+		if (function_exists('mb_strlen')) return mb_strlen($value);
+
+		return strlen($value);
+	}
+
+	/**
+	 * Validate an attribute is contained within a list of values.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateIn($attribute, $value, $parameters)
+	{
+		return in_array((string) $value, $parameters);
+	}
+
+	/**
+	 * Validate an attribute is not contained within a list of values.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateNotIn($attribute, $value, $parameters)
+	{
+		return ! $this->validateIn($attribute, $value, $parameters);
+	}
+
+	/**
+	 * Validate the uniqueness of an attribute value on a given database table.
+	 *
+	 * If a database column is not specified, the attribute will be used.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateUnique($attribute, $value, $parameters)
+	{
+		$this->requireParameterCount(1, $parameters, 'unique');
+
+		$table = $parameters[0];
+
+		// The second parameter position holds the name of the column that needs to
+		// be verified as unique. If this parameter isn't specified we will just
+		// assume that this column to be verified shares the attribute's name.
+		$column = isset($parameters[1]) ? $parameters[1] : $attribute;
+
+		list($idColumn, $id) = array(null, null);
+
+		if (isset($parameters[2]))
+		{
+			list($idColumn, $id) = $this->getUniqueIds($parameters);
+
+			if (strtolower($id) == 'null') $id = null;
+		}
+
+		// The presence verifier is responsible for counting rows within this store
+		// mechanism which might be a relational database or any other permanent
+		// data store like Redis, etc. We will use it to determine uniqueness.
+		$verifier = $this->getPresenceVerifier();
+
+		$extra = $this->getUniqueExtra($parameters);
+
+		return $verifier->getCount(
+
+			$table, $column, $value, $id, $idColumn, $extra
+
+		) == 0;
+	}
+
+	/**
+	 * Get the excluded ID column and value for the unique rule.
+	 *
+	 * @param  array  $parameters
+	 * @return array
+	 */
+	protected function getUniqueIds($parameters)
+	{
+		$idColumn = isset($parameters[3]) ? $parameters[3] : 'id';
+
+		return array($idColumn, $parameters[2]);
+	}
+
+	/**
+	 * Get the extra conditions for a unique rule.
+	 *
+	 * @param  array  $parameters
+	 * @return array
+	 */
+	protected function getUniqueExtra($parameters)
+	{
+		if (isset($parameters[4]))
+		{
+			return $this->getExtraConditions(array_slice($parameters, 4));
+		}
+
+		return array();
+	}
+
+	/**
+	 * Validate the existence of an attribute value in a database table.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateExists($attribute, $value, $parameters)
+	{
+		$this->requireParameterCount(1, $parameters, 'exists');
+
+		$table = $parameters[0];
+
+		// The second parameter position holds the name of the column that should be
+		// verified as existing. If this parameter is not specified we will guess
+		// that the columns being "verified" shares the given attribute's name.
+		$column = isset($parameters[1]) ? $parameters[1] : $attribute;
+
+		$expected = (is_array($value)) ? count($value) : 1;
+
+		return $this->getExistCount($table, $column, $value, $parameters) >= $expected;
+	}
+
+	/**
+	 * Get the number of records that exist in storage.
+	 *
+	 * @param  string  $table
+	 * @param  string  $column
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return int
+	 */
+	protected function getExistCount($table, $column, $value, $parameters)
+	{
+		$verifier = $this->getPresenceVerifier();
+
+		$extra = $this->getExtraExistConditions($parameters);
+
+		if (is_array($value))
+		{
+			return $verifier->getMultiCount($table, $column, $value, $extra);
+		}
+
+		return $verifier->getCount($table, $column, $value, null, null, $extra);
+	}
+
+	/**
+	 * Get the extra exist conditions.
+	 *
+	 * @param  array  $parameters
+	 * @return array
+	 */
+	protected function getExtraExistConditions(array $parameters)
+	{
+		return $this->getExtraConditions(array_values(array_slice($parameters, 2)));
+	}
+
+	/**
+	 * Get the extra conditions for a unique / exists rule.
+	 *
+	 * @param  array  $segments
+	 * @return array
+	 */
+	protected function getExtraConditions(array $segments)
+	{
+		$extra = array();
+
+		$count = count($segments);
+
+		for ($i = 0; $i < $count; $i = $i + 2)
+		{
+			$extra[$segments[$i]] = $segments[$i + 1];
+		}
+
+		return $extra;
+	}
+
+	/**
+	 * Validate that an attribute is a valid IP.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateIp($attribute, $value)
+	{
+		return filter_var($value, FILTER_VALIDATE_IP) !== false;
+	}
+
+	/**
+	 * Validate that an attribute is a valid e-mail address.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateEmail($attribute, $value)
+	{
+		return filter_var($value, FILTER_VALIDATE_EMAIL) !== false;
+	}
+
+	/**
+	 * Validate that an attribute is a valid URL.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateUrl($attribute, $value)
+	{
+		return filter_var($value, FILTER_VALIDATE_URL) !== false;
+	}
+
+	/**
+	 * Validate that an attribute is an active URL.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateActiveUrl($attribute, $value)
+	{
+		$url = str_replace(array('http://', 'https://', 'ftp://'), '', strtolower($value));
+
+		return checkdnsrr($url);
+	}
+
+	/**
+	 * Validate the MIME type of a file is an image MIME type.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateImage($attribute, $value)
+	{
+		return $this->validateMimes($attribute, $value, array('jpeg', 'png', 'gif', 'bmp'));
+	}
+
+	/**
+	 * Validate the MIME type of a file upload attribute is in a set of MIME types.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed  $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateMimes($attribute, $value, $parameters)
+	{
+		if ( ! $this->isAValidFileInstance($value))
+		{
+			return false;
+		}
+
+		return $value->getPath() != '' && in_array($value->guessExtension(), $parameters);
+	}
+
+	/**
+	 * Check that the given value is a valid file instance.
+	 *
+	 * @param  mixed  $value
+	 * @return bool
+	 */
+	protected function isAValidFileInstance($value)
+	{
+		if ($value instanceof UploadedFile && ! $value->isValid()) return false;
+
+		return $value instanceof File;
+	}
+
+	/**
+	 * Validate that an attribute contains only alphabetic characters.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateAlpha($attribute, $value)
+	{
+		return preg_match('/^[\pL\pM]+$/u', $value);
+	}
+
+	/**
+	 * Validate that an attribute contains only alpha-numeric characters.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateAlphaNum($attribute, $value)
+	{
+		return preg_match('/^[\pL\pM\pN]+$/u', $value);
+	}
+
+	/**
+	 * Validate that an attribute contains only alpha-numeric characters, dashes, and underscores.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateAlphaDash($attribute, $value)
+	{
+		return preg_match('/^[\pL\pM\pN_-]+$/u', $value);
+	}
+
+	/**
+	 * Validate that an attribute passes a regular expression check.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateRegex($attribute, $value, $parameters)
+	{
+		$this->requireParameterCount(1, $parameters, 'regex');
+
+		return preg_match($parameters[0], $value);
+	}
+
+	/**
+	 * Validate that an attribute is a valid date.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateDate($attribute, $value)
+	{
+		if ($value instanceof DateTime) return true;
+
+		if (strtotime($value) === false) return false;
+
+		$date = date_parse($value);
+
+		return checkdate($date['month'], $date['day'], $date['year']);
+	}
+
+	/**
+	 * Validate that an attribute matches a date format.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateDateFormat($attribute, $value, $parameters)
+	{
+		$this->requireParameterCount(1, $parameters, 'date_format');
+
+		$parsed = date_parse_from_format($parameters[0], $value);
+
+		return $parsed['error_count'] === 0 && $parsed['warning_count'] === 0;
+	}
+
+	/**
+	 * Validate the date is before a given date.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateBefore($attribute, $value, $parameters)
+	{
+		$this->requireParameterCount(1, $parameters, 'before');
+
+		if ($format = $this->getDateFormat($attribute))
+		{
+			return $this->validateBeforeWithFormat($format, $value, $parameters);
+		}
+
+		if ( ! ($date = strtotime($parameters[0])))
+		{
+			return strtotime($value) < strtotime($this->getValue($parameters[0]));
+		}
+
+		return strtotime($value) < $date;
+	}
+
+	/**
+	 * Validate the date is before a given date with a given format.
+	 *
+	 * @param  string  $format
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateBeforeWithFormat($format, $value, $parameters)
+	{
+		$param = $this->getValue($parameters[0]) ?: $parameters[0];
+
+		return $this->checkDateTimeOrder($format, $value, $param);
+	}
+
+	/**
+	 * Validate the date is after a given date.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateAfter($attribute, $value, $parameters)
+	{
+		$this->requireParameterCount(1, $parameters, 'after');
+
+		if ($format = $this->getDateFormat($attribute))
+		{
+			return $this->validateAfterWithFormat($format, $value, $parameters);
+		}
+
+		if ( ! ($date = strtotime($parameters[0])))
+		{
+			return strtotime($value) > strtotime($this->getValue($parameters[0]));
+		}
+
+		return strtotime($value) > $date;
+	}
+
+	/**
+	 * Validate the date is after a given date with a given format.
+	 *
+	 * @param  string  $format
+	 * @param  mixed   $value
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function validateAfterWithFormat($format, $value, $parameters)
+	{
+		$param = $this->getValue($parameters[0]) ?: $parameters[0];
+
+		return $this->checkDateTimeOrder($format, $param, $value);
+	}
+
+	/**
+	 * Given two date/time strings, check that one is after the other.
+	 *
+	 * @param  string  $format
+	 * @param  string  $before
+	 * @param  string  $after
+	 * @return bool
+	 */
+	protected function checkDateTimeOrder($format, $before, $after)
+	{
+		$before = $this->getDateTimeWithOptionalFormat($format, $before);
+
+		$after = $this->getDateTimeWithOptionalFormat($format, $after);
+
+		return ($before && $after) && ($after > $before);
+	}
+
+	/**
+	 * Get a DateTime instance from a string.
+	 *
+	 * @param  string  $format
+	 * @param  string  $value
+	 * @return \DateTime|null
+	 */
+	protected function getDateTimeWithOptionalFormat($format, $value)
+	{
+		$date = DateTime::createFromFormat($format, $value);
+
+		if ($date) return $date;
+
+		try
+		{
+			return new DateTime($value);
+		}
+		catch (\Exception $e)
+		{
+			return null;
+		}
+	}
+
+	/**
+	 * Validate that an attribute is a valid timezone.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return bool
+	 */
+	protected function validateTimezone($attribute, $value)
+	{
+		try
+		{
+			new DateTimeZone($value);
+		}
+		catch (\Exception $e)
+		{
+			return false;
+		}
+
+		return true;
+	}
+
+	/**
+	 * Get the date format for an attribute if it has one.
+	 *
+	 * @param  string  $attribute
+	 * @return string|null
+	 */
+	protected function getDateFormat($attribute)
+	{
+		if ($result = $this->getRule($attribute, 'DateFormat'))
+		{
+			return $result[1][0];
+		}
+	}
+
+	/**
+	 * Get the validation message for an attribute and rule.
+	 *
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @return string
+	 */
+	protected function getMessage($attribute, $rule)
+	{
+		$lowerRule = snake_case($rule);
+
+		$inlineMessage = $this->getInlineMessage($attribute, $lowerRule);
+
+		// First we will retrieve the custom message for the validation rule if one
+		// exists. If a custom validation message is being used we'll return the
+		// custom message, otherwise we'll keep searching for a valid message.
+		if ( ! is_null($inlineMessage))
+		{
+			return $inlineMessage;
+		}
+
+		$customKey = "validation.custom.{$attribute}.{$lowerRule}";
+
+		$customMessage = $this->translator->trans($customKey);
+
+		// First we check for a custom defined validation message for the attribute
+		// and rule. This allows the developer to specify specific messages for
+		// only some attributes and rules that need to get specially formed.
+		if ($customMessage !== $customKey)
+		{
+			return $customMessage;
+		}
+
+		// If the rule being validated is a "size" rule, we will need to gather the
+		// specific error message for the type of attribute being validated such
+		// as a number, file or string which all have different message types.
+		elseif (in_array($rule, $this->sizeRules))
+		{
+			return $this->getSizeMessage($attribute, $rule);
+		}
+
+		// Finally, if no developer specified messages have been set, and no other
+		// special messages apply for this rule, we will just pull the default
+		// messages out of the translator service for this validation rule.
+		$key = "validation.{$lowerRule}";
+
+		if ($key != ($value = $this->translator->trans($key)))
+		{
+			return $value;
+		}
+
+		return $this->getInlineMessage(
+			$attribute, $lowerRule, $this->fallbackMessages
+		) ?: $key;
+	}
+
+	/**
+	 * Get the inline message for a rule if it exists.
+	 *
+	 * @param  string  $attribute
+	 * @param  string  $lowerRule
+	 * @param  array   $source
+	 * @return string
+	 */
+	protected function getInlineMessage($attribute, $lowerRule, $source = null)
+	{
+		$source = $source ?: $this->customMessages;
+
+		$keys = array("{$attribute}.{$lowerRule}", $lowerRule);
+
+		// First we will check for a custom message for an attribute specific rule
+		// message for the fields, then we will check for a general custom line
+		// that is not attribute specific. If we find either we'll return it.
+		foreach ($keys as $key)
+		{
+			if (isset($source[$key])) return $source[$key];
+		}
+	}
+
+	/**
+	 * Get the proper error message for an attribute and size rule.
+	 *
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @return string
+	 */
+	protected function getSizeMessage($attribute, $rule)
+	{
+		$lowerRule = snake_case($rule);
+
+		// There are three different types of size validations. The attribute may be
+		// either a number, file, or string so we will check a few things to know
+		// which type of value it is and return the correct line for that type.
+		$type = $this->getAttributeType($attribute);
+
+		$key = "validation.{$lowerRule}.{$type}";
+
+		return $this->translator->trans($key);
+	}
+
+	/**
+	 * Get the data type of the given attribute.
+	 *
+	 * @param  string  $attribute
+	 * @return string
+	 */
+	protected function getAttributeType($attribute)
+	{
+		// We assume that the attributes present in the file array are files so that
+		// means that if the attribute does not have a numeric rule and the files
+		// list doesn't have it we'll just consider it a string by elimination.
+		if ($this->hasRule($attribute, $this->numericRules))
+		{
+			return 'numeric';
+		}
+		elseif ($this->hasRule($attribute, array('Array')))
+		{
+			return 'array';
+		}
+		elseif (array_key_exists($attribute, $this->files))
+		{
+			return 'file';
+		}
+
+		return 'string';
+	}
+
+	/**
+	 * Replace all error message place-holders with actual values.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function doReplacements($message, $attribute, $rule, $parameters)
+	{
+		$message = str_replace(':attribute', $this->getAttribute($attribute), $message);
+
+		if (isset($this->replacers[snake_case($rule)]))
+		{
+			$message = $this->callReplacer($message, $attribute, snake_case($rule), $parameters);
+		}
+		elseif (method_exists($this, $replacer = "replace{$rule}"))
+		{
+			$message = $this->$replacer($message, $attribute, $rule, $parameters);
+		}
+
+		return $message;
+	}
+
+	/**
+	 * Transform an array of attributes to their displayable form.
+	 *
+	 * @param  array  $values
+	 * @return array
+	 */
+	protected function getAttributeList(array $values)
+	{
+		$attributes = array();
+
+		// For each attribute in the list we will simply get its displayable form as
+		// this is convenient when replacing lists of parameters like some of the
+		// replacement functions do when formatting out the validation message.
+		foreach ($values as $key => $value)
+		{
+			$attributes[$key] = $this->getAttribute($value);
+		}
+
+		return $attributes;
+	}
+
+	/**
+	 * Get the displayable name of the attribute.
+	 *
+	 * @param  string  $attribute
+	 * @return string
+	 */
+	protected function getAttribute($attribute)
+	{
+		// The developer may dynamically specify the array of custom attributes
+		// on this Validator instance. If the attribute exists in this array
+		// it takes precedence over all other ways we can pull attributes.
+		if (isset($this->customAttributes[$attribute]))
+		{
+			return $this->customAttributes[$attribute];
+		}
+
+		$key = "validation.attributes.{$attribute}";
+
+		// We allow for the developer to specify language lines for each of the
+		// attributes allowing for more displayable counterparts of each of
+		// the attributes. This provides the ability for simple formats.
+		if (($line = $this->translator->trans($key)) !== $key)
+		{
+			return $line;
+		}
+
+		// If no language line has been specified for the attribute all of the
+		// underscores are removed from the attribute name and that will be
+		// used as default versions of the attribute's displayable names.
+		return str_replace('_', ' ', snake_case($attribute));
+	}
+
+	/**
+	 * Get the displayable name of the value.
+	 *
+	 * @param  string  $attribute
+	 * @param  mixed   $value
+	 * @return string
+	 */
+	public function getDisplayableValue($attribute, $value)
+	{
+		if (isset($this->customValues[$attribute][$value]))
+		{
+			return $this->customValues[$attribute][$value];
+		}
+
+		$key = "validation.values.{$attribute}.{$value}";
+
+		if (($line = $this->translator->trans($key)) !== $key)
+		{
+			return $line;
+		}
+
+		return $value;
+	}
+
+	/**
+	 * Replace all place-holders for the between rule.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function replaceBetween($message, $attribute, $rule, $parameters)
+	{
+		return str_replace(array(':min', ':max'), $parameters, $message);
+	}
+
+	/**
+	 * Replace all place-holders for the digits rule.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function replaceDigits($message, $attribute, $rule, $parameters)
+	{
+		return str_replace(':digits', $parameters[0], $message);
+	}
+
+	/**
+	 * Replace all place-holders for the digits (between) rule.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function replaceDigitsBetween($message, $attribute, $rule, $parameters)
+	{
+		return $this->replaceBetween($message, $attribute, $rule, $parameters);
+	}
+
+	/**
+	 * Replace all place-holders for the size rule.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function replaceSize($message, $attribute, $rule, $parameters)
+	{
+		return str_replace(':size', $parameters[0], $message);
+	}
+
+	/**
+	 * Replace all place-holders for the min rule.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function replaceMin($message, $attribute, $rule, $parameters)
+	{
+		return str_replace(':min', $parameters[0], $message);
+	}
+
+	/**
+	 * Replace all place-holders for the max rule.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function replaceMax($message, $attribute, $rule, $parameters)
+	{
+		return str_replace(':max', $parameters[0], $message);
+	}
+
+	/**
+	 * Replace all place-holders for the in rule.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function replaceIn($message, $attribute, $rule, $parameters)
+	{
+		foreach ($parameters as &$parameter)
+		{
+			$parameter = $this->getDisplayableValue($attribute, $parameter);
+		}
+
+		return str_replace(':values', implode(', ', $parameters), $message);
+	}
+
+	/**
+	 * Replace all place-holders for the not_in rule.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function replaceNotIn($message, $attribute, $rule, $parameters)
+	{
+		return $this->replaceIn($message, $attribute, $rule, $parameters);
+	}
+
+	/**
+	 * Replace all place-holders for the mimes rule.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function replaceMimes($message, $attribute, $rule, $parameters)
+	{
+		return str_replace(':values', implode(', ', $parameters), $message);
+	}
+
+	/**
+	 * Replace all place-holders for the required_with rule.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function replaceRequiredWith($message, $attribute, $rule, $parameters)
+	{
+		$parameters = $this->getAttributeList($parameters);
+
+		return str_replace(':values', implode(' / ', $parameters), $message);
+	}
+
+	/**
+	 * Replace all place-holders for the required_without rule.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function replaceRequiredWithout($message, $attribute, $rule, $parameters)
+	{
+		return $this->replaceRequiredWith($message, $attribute, $rule, $parameters);
+	}
+
+	/**
+	 * Replace all place-holders for the required_without_all rule.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function replaceRequiredWithoutAll($message, $attribute, $rule, $parameters)
+	{
+		return $this->replaceRequiredWith($message, $attribute, $rule, $parameters);
+	}
+
+	/**
+	 * Replace all place-holders for the required_if rule.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function replaceRequiredIf($message, $attribute, $rule, $parameters)
+	{
+		$parameters[1] = $this->getDisplayableValue($parameters[0], array_get($this->data, $parameters[0]));
+
+		$parameters[0] = $this->getAttribute($parameters[0]);
+
+		return str_replace(array(':other', ':value'), $parameters, $message);
+	}
+
+	/**
+	 * Replace all place-holders for the same rule.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function replaceSame($message, $attribute, $rule, $parameters)
+	{
+		return str_replace(':other', $this->getAttribute($parameters[0]), $message);
+	}
+
+	/**
+	 * Replace all place-holders for the different rule.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function replaceDifferent($message, $attribute, $rule, $parameters)
+	{
+		return $this->replaceSame($message, $attribute, $rule, $parameters);
+	}
+
+	/**
+	 * Replace all place-holders for the date_format rule.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function replaceDateFormat($message, $attribute, $rule, $parameters)
+	{
+		return str_replace(':format', $parameters[0], $message);
+	}
+
+	/**
+	 * Replace all place-holders for the before rule.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function replaceBefore($message, $attribute, $rule, $parameters)
+	{
+		if ( ! (strtotime($parameters[0])))
+		{
+			return str_replace(':date', $this->getAttribute($parameters[0]), $message);
+		}
+
+		return str_replace(':date', $parameters[0], $message);
+	}
+
+	/**
+	 * Replace all place-holders for the after rule.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function replaceAfter($message, $attribute, $rule, $parameters)
+	{
+		return $this->replaceBefore($message, $attribute, $rule, $parameters);
+	}
+
+	/**
+	 * Determine if the given attribute has a rule in the given set.
+	 *
+	 * @param  string  $attribute
+	 * @param  string|array  $rules
+	 * @return bool
+	 */
+	protected function hasRule($attribute, $rules)
+	{
+		return ! is_null($this->getRule($attribute, $rules));
+	}
+
+	/**
+	 * Get a rule and its parameters for a given attribute.
+	 *
+	 * @param  string  $attribute
+	 * @param  string|array  $rules
+	 * @return array|null
+	 */
+	protected function getRule($attribute, $rules)
+	{
+		if ( ! array_key_exists($attribute, $this->rules))
+		{
+			return;
+		}
+
+		$rules = (array) $rules;
+
+		foreach ($this->rules[$attribute] as $rule)
+		{
+			list($rule, $parameters) = $this->parseRule($rule);
+
+			if (in_array($rule, $rules)) return [$rule, $parameters];
+		}
+	}
+
+	/**
+	 * Extract the rule name and parameters from a rule.
+	 *
+	 * @param  array|string  $rules
+	 * @return array
+	 */
+	protected function parseRule($rules)
+	{
+		if (is_array($rules))
+		{
+			return $this->parseArrayRule($rules);
+		}
+
+		return $this->parseStringRule($rules);
+	}
+
+	/**
+	 * Parse an array based rule.
+	 *
+	 * @param  array  $rules
+	 * @return array
+	 */
+	protected function parseArrayRule(array $rules)
+	{
+		return array(studly_case(trim(array_get($rules, 0))), array_slice($rules, 1));
+	}
+
+	/**
+	 * Parse a string based rule.
+	 *
+	 * @param  string  $rules
+	 * @return array
+	 */
+	protected function parseStringRule($rules)
+	{
+		$parameters = [];
+
+		// The format for specifying validation rules and parameters follows an
+		// easy {rule}:{parameters} formatting convention. For instance the
+		// rule "Max:3" states that the value may only be three letters.
+		if (strpos($rules, ':') !== false)
+		{
+			list($rules, $parameter) = explode(':', $rules, 2);
+
+			$parameters = $this->parseParameters($rules, $parameter);
+		}
+
+		return array(studly_case(trim($rules)), $parameters);
+	}
+
+	/**
+	 * Parse a parameter list.
+	 *
+	 * @param  string  $rule
+	 * @param  string  $parameter
+	 * @return array
+	 */
+	protected function parseParameters($rule, $parameter)
+	{
+		if (strtolower($rule) == 'regex') return array($parameter);
+
+		return str_getcsv($parameter);
+	}
+
+	/**
+	 * Get the array of custom validator extensions.
+	 *
+	 * @return array
+	 */
+	public function getExtensions()
+	{
+		return $this->extensions;
+	}
+
+	/**
+	 * Register an array of custom validator extensions.
+	 *
+	 * @param  array  $extensions
+	 * @return void
+	 */
+	public function addExtensions(array $extensions)
+	{
+		if ($extensions)
+		{
+			$keys = array_map('snake_case', array_keys($extensions));
+
+			$extensions = array_combine($keys, array_values($extensions));
+		}
+
+		$this->extensions = array_merge($this->extensions, $extensions);
+	}
+
+	/**
+	 * Register an array of custom implicit validator extensions.
+	 *
+	 * @param  array  $extensions
+	 * @return void
+	 */
+	public function addImplicitExtensions(array $extensions)
+	{
+		$this->addExtensions($extensions);
+
+		foreach ($extensions as $rule => $extension)
+		{
+			$this->implicitRules[] = studly_case($rule);
+		}
+	}
+
+	/**
+	 * Register a custom validator extension.
+	 *
+	 * @param  string  $rule
+	 * @param  \Closure|string  $extension
+	 * @return void
+	 */
+	public function addExtension($rule, $extension)
+	{
+		$this->extensions[snake_case($rule)] = $extension;
+	}
+
+	/**
+	 * Register a custom implicit validator extension.
+	 *
+	 * @param  string   $rule
+	 * @param  \Closure|string  $extension
+	 * @return void
+	 */
+	public function addImplicitExtension($rule, $extension)
+	{
+		$this->addExtension($rule, $extension);
+
+		$this->implicitRules[] = studly_case($rule);
+	}
+
+	/**
+	 * Get the array of custom validator message replacers.
+	 *
+	 * @return array
+	 */
+	public function getReplacers()
+	{
+		return $this->replacers;
+	}
+
+	/**
+	 * Register an array of custom validator message replacers.
+	 *
+	 * @param  array  $replacers
+	 * @return void
+	 */
+	public function addReplacers(array $replacers)
+	{
+		if ($replacers)
+		{
+			$keys = array_map('snake_case', array_keys($replacers));
+
+			$replacers = array_combine($keys, array_values($replacers));
+		}
+
+		$this->replacers = array_merge($this->replacers, $replacers);
+	}
+
+	/**
+	 * Register a custom validator message replacer.
+	 *
+	 * @param  string  $rule
+	 * @param  \Closure|string  $replacer
+	 * @return void
+	 */
+	public function addReplacer($rule, $replacer)
+	{
+		$this->replacers[snake_case($rule)] = $replacer;
+	}
+
+	/**
+	 * Get the data under validation.
+	 *
+	 * @return array
+	 */
+	public function getData()
+	{
+		return $this->data;
+	}
+
+	/**
+	 * Set the data under validation.
+	 *
+	 * @param  array  $data
+	 * @return void
+	 */
+	public function setData(array $data)
+	{
+		$this->data = $this->parseData($data);
+	}
+
+	/**
+	 * Get the validation rules.
+	 *
+	 * @return array
+	 */
+	public function getRules()
+	{
+		return $this->rules;
+	}
+
+	/**
+	 * Set the validation rules.
+	 *
+	 * @param  array  $rules
+	 * @return $this
+	 */
+	public function setRules(array $rules)
+	{
+		$this->rules = $this->explodeRules($rules);
+
+		return $this;
+	}
+
+	/**
+	 * Set the custom attributes on the validator.
+	 *
+	 * @param  array  $attributes
+	 * @return $this
+	 */
+	public function setAttributeNames(array $attributes)
+	{
+		$this->customAttributes = $attributes;
+
+		return $this;
+	}
+
+	/**
+	 * Set the custom values on the validator.
+	 *
+	 * @param  array  $values
+	 * @return $this
+	 */
+	public function setValueNames(array $values)
+	{
+		$this->customValues = $values;
+
+		return $this;
+	}
+
+	/**
+	 * Get the files under validation.
+	 *
+	 * @return array
+	 */
+	public function getFiles()
+	{
+		return $this->files;
+	}
+
+	/**
+	 * Set the files under validation.
+	 *
+	 * @param  array  $files
+	 * @return $this
+	 */
+	public function setFiles(array $files)
+	{
+		$this->files = $files;
+
+		return $this;
+	}
+
+	/**
+	 * Get the Presence Verifier implementation.
+	 *
+	 * @return \Illuminate\Validation\PresenceVerifierInterface
+	 *
+	 * @throws \RuntimeException
+	 */
+	public function getPresenceVerifier()
+	{
+		if ( ! isset($this->presenceVerifier))
+		{
+			throw new \RuntimeException("Presence verifier has not been set.");
+		}
+
+		return $this->presenceVerifier;
+	}
+
+	/**
+	 * Set the Presence Verifier implementation.
+	 *
+	 * @param  \Illuminate\Validation\PresenceVerifierInterface  $presenceVerifier
+	 * @return void
+	 */
+	public function setPresenceVerifier(PresenceVerifierInterface $presenceVerifier)
+	{
+		$this->presenceVerifier = $presenceVerifier;
+	}
+
+	/**
+	 * Get the Translator implementation.
+	 *
+	 * @return \Symfony\Component\Translation\TranslatorInterface
+	 */
+	public function getTranslator()
+	{
+		return $this->translator;
+	}
+
+	/**
+	 * Set the Translator implementation.
+	 *
+	 * @param  \Symfony\Component\Translation\TranslatorInterface  $translator
+	 * @return void
+	 */
+	public function setTranslator(TranslatorInterface $translator)
+	{
+		$this->translator = $translator;
+	}
+
+	/**
+	 * Get the custom messages for the validator
+	 *
+	 * @return array
+	 */
+	public function getCustomMessages()
+	{
+		return $this->customMessages;
+	}
+
+	/**
+	 * Set the custom messages for the validator
+	 *
+	 * @param  array  $messages
+	 * @return void
+	 */
+	public function setCustomMessages(array $messages)
+	{
+		$this->customMessages = array_merge($this->customMessages, $messages);
+	}
+
+	/**
+	 * Get the custom attributes used by the validator.
+	 *
+	 * @return array
+	 */
+	public function getCustomAttributes()
+	{
+		return $this->customAttributes;
+	}
+
+	/**
+	 * Add custom attributes to the validator.
+	 *
+	 * @param  array  $customAttributes
+	 * @return $this
+	 */
+	public function addCustomAttributes(array $customAttributes)
+	{
+		$this->customAttributes = array_merge($this->customAttributes, $customAttributes);
+
+		return $this;
+	}
+
+	/**
+	 * Get the custom values for the validator.
+	 *
+	 * @return array
+	 */
+	public function getCustomValues()
+	{
+		return $this->customValues;
+	}
+
+	/**
+	 * Add the custom values for the validator.
+	 *
+	 * @param  array  $customValues
+	 * @return $this
+	 */
+	public function addCustomValues(array $customValues)
+	{
+		$this->customValues = array_merge($this->customValues, $customValues);
+
+		return $this;
+	}
+
+	/**
+	 * Get the fallback messages for the validator.
+	 *
+	 * @return array
+	 */
+	public function getFallbackMessages()
+	{
+		return $this->fallbackMessages;
+	}
+
+	/**
+	 * Set the fallback messages for the validator.
+	 *
+	 * @param  array  $messages
+	 * @return void
+	 */
+	public function setFallbackMessages(array $messages)
+	{
+		$this->fallbackMessages = $messages;
+	}
+
+	/**
+	 * Get the failed validation rules.
+	 *
+	 * @return array
+	 */
+	public function failed()
+	{
+		return $this->failedRules;
+	}
+
+	/**
+	 * Get the message container for the validator.
+	 *
+	 * @return \Illuminate\Support\MessageBag
+	 */
+	public function messages()
+	{
+		if ( ! $this->messages) $this->passes();
+
+		return $this->messages;
+	}
+
+	/**
+	 * An alternative more semantic shortcut to the message container.
+	 *
+	 * @return \Illuminate\Support\MessageBag
+	 */
+	public function errors()
+	{
+		return $this->messages();
+	}
+
+	/**
+	 * Get the messages for the instance.
+	 *
+	 * @return \Illuminate\Support\MessageBag
+	 */
+	public function getMessageBag()
+	{
+		return $this->messages();
+	}
+
+	/**
+	 * Set the IoC container instance.
+	 *
+	 * @param  \Illuminate\Container\Container  $container
+	 * @return void
+	 */
+	public function setContainer(Container $container)
+	{
+		$this->container = $container;
+	}
+
+	/**
+	 * Call a custom validator extension.
+	 *
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function callExtension($rule, $parameters)
+	{
+		$callback = $this->extensions[$rule];
+
+		if ($callback instanceof Closure)
+		{
+			return call_user_func_array($callback, $parameters);
+		}
+		elseif (is_string($callback))
+		{
+			return $this->callClassBasedExtension($callback, $parameters);
+		}
+	}
+
+	/**
+	 * Call a class based validator extension.
+	 *
+	 * @param  string  $callback
+	 * @param  array   $parameters
+	 * @return bool
+	 */
+	protected function callClassBasedExtension($callback, $parameters)
+	{
+		list($class, $method) = explode('@', $callback);
+
+		return call_user_func_array(array($this->container->make($class), $method), $parameters);
+	}
+
+	/**
+	 * Call a custom validator message replacer.
+	 *
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function callReplacer($message, $attribute, $rule, $parameters)
+	{
+		$callback = $this->replacers[$rule];
+
+		if ($callback instanceof Closure)
+		{
+			return call_user_func_array($callback, func_get_args());
+		}
+		elseif (is_string($callback))
+		{
+			return $this->callClassBasedReplacer($callback, $message, $attribute, $rule, $parameters);
+		}
+	}
+
+	/**
+	 * Call a class based validator message replacer.
+	 *
+	 * @param  string  $callback
+	 * @param  string  $message
+	 * @param  string  $attribute
+	 * @param  string  $rule
+	 * @param  array   $parameters
+	 * @return string
+	 */
+	protected function callClassBasedReplacer($callback, $message, $attribute, $rule, $parameters)
+	{
+		list($class, $method) = explode('@', $callback);
+
+		return call_user_func_array(array($this->container->make($class), $method), array_slice(func_get_args(), 1));
+	}
+
+	/**
+	 * Require a certain number of parameters to be present.
+	 *
+	 * @param  int    $count
+	 * @param  array  $parameters
+	 * @param  string  $rule
+	 * @return void
+	 * @throws \InvalidArgumentException
+	 */
+	protected function requireParameterCount($count, $parameters, $rule)
+	{
+		if (count($parameters) < $count)
+		{
+			throw new \InvalidArgumentException("Validation rule $rule requires at least $count parameters.");
+		}
+	}
+
+	/**
+	 * Handle dynamic calls to class methods.
+	 *
+	 * @param  string  $method
+	 * @param  array   $parameters
+	 * @return mixed
+	 *
+	 * @throws \BadMethodCallException
+	 */
+	public function __call($method, $parameters)
+	{
+		$rule = snake_case(substr($method, 8));
+
+		if (isset($this->extensions[$rule]))
+		{
+			return $this->callExtension($rule, $parameters);
+		}
+
+		throw new \BadMethodCallException("Method [$method] does not exist.");
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/Validation/composer.json
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/Validation/composer.json b/vendor/laravel/framework/src/Illuminate/Validation/composer.json
new file mode 100755
index 0000000..755a7f7
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/Validation/composer.json
@@ -0,0 +1,32 @@
+{
+    "name": "illuminate/validation",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Taylor Otwell",
+            "email": "taylorotwell@gmail.com"
+        }
+    ],
+    "require": {
+        "php": ">=5.4.0",
+        "illuminate/container": "4.2.*",
+        "illuminate/support": "4.2.*",
+        "symfony/http-foundation": "2.5.*",
+        "symfony/translation": "2.5.*"
+    },
+    "require-dev": {
+        "illuminate/database": "4.2.*"
+    },
+    "autoload": {
+        "psr-0": {
+            "Illuminate\\Validation": ""
+        }
+    },
+    "target-dir": "Illuminate/Validation",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "4.2-dev"
+        }
+    },
+    "minimum-stability": "dev"
+}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/01413d65/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php
----------------------------------------------------------------------
diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php
new file mode 100644
index 0000000..64528d5
--- /dev/null
+++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php
@@ -0,0 +1,727 @@
+<?php namespace Illuminate\View\Compilers;
+
+use Closure;
+
+class BladeCompiler extends Compiler implements CompilerInterface {
+
+	/**
+	 * All of the registered extensions.
+	 *
+	 * @var array
+	 */
+	protected $extensions = array();
+
+	/**
+	 * The file currently being compiled.
+	 *
+	 * @var string
+	 */
+	protected $path;
+
+	/**
+	 * All of the available compiler functions.
+	 *
+	 * @var array
+	 */
+	protected $compilers = array(
+		'Extensions',
+		'Statements',
+		'Comments',
+		'Echos'
+	);
+
+	/**
+	 * Array of opening and closing tags for escaped echos.
+	 *
+	 * @var array
+	 */
+	protected $contentTags = array('{{', '}}');
+
+	/**
+	 * Array of opening and closing tags for escaped echos.
+	 *
+	 * @var array
+	 */
+	protected $escapedTags = array('{{{', '}}}');
+
+	/**
+	 * Array of footer lines to be added to template.
+	 *
+	 * @var array
+	 */
+	protected $footer = array();
+
+	/**
+	 * Counter to keep track of nested forelse statements.
+	 *
+	 * @var int
+	 */
+	protected $forelseCounter = 0;
+
+	/**
+	 * Compile the view at the given path.
+	 *
+	 * @param  string  $path
+	 * @return void
+	 */
+	public function compile($path = null)
+	{
+		$this->footer = array();
+
+		if ($path)
+		{
+			$this->setPath($path);
+		}
+
+		$contents = $this->compileString($this->files->get($path));
+
+		if ( ! is_null($this->cachePath))
+		{
+			$this->files->put($this->getCompiledPath($this->getPath()), $contents);
+		}
+	}
+
+	/**
+	 * Get the path currently being compiled.
+	 *
+	 * @return string
+	 */
+	public function getPath()
+	{
+		return $this->path;
+	}
+
+	/**
+	 * Set the path currently being compiled.
+	 *
+	 * @param  string  $path
+	 * @return void
+	 */
+	public function setPath($path)
+	{
+		$this->path = $path;
+	}
+
+	/**
+	 * Compile the given Blade template contents.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	public function compileString($value)
+	{
+		$result = '';
+
+		// Here we will loop through all of the tokens returned by the Zend lexer and
+		// parse each one into the corresponding valid PHP. We will then have this
+		// template as the correctly rendered PHP that can be rendered natively.
+		foreach (token_get_all($value) as $token)
+		{
+			$result .= is_array($token) ? $this->parseToken($token) : $token;
+		}
+
+		// If there are any footer lines that need to get added to a template we will
+		// add them here at the end of the template. This gets used mainly for the
+		// template inheritance via the extends keyword that should be appended.
+		if (count($this->footer) > 0)
+		{
+			$result = ltrim($result, PHP_EOL)
+					.PHP_EOL.implode(PHP_EOL, array_reverse($this->footer));
+		}
+
+		return $result;
+	}
+
+	/**
+	 * Parse the tokens from the template.
+	 *
+	 * @param  array  $token
+	 * @return string
+	 */
+	protected function parseToken($token)
+	{
+		list($id, $content) = $token;
+
+		if ($id == T_INLINE_HTML)
+		{
+			foreach ($this->compilers as $type)
+			{
+				$content = $this->{"compile{$type}"}($content);
+			}
+		}
+
+		return $content;
+	}
+
+	/**
+	 * Execute the user defined extensions.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected function compileExtensions($value)
+	{
+		foreach ($this->extensions as $compiler)
+		{
+			$value = call_user_func($compiler, $value, $this);
+		}
+
+		return $value;
+	}
+
+	/**
+	 * Compile Blade comments into valid PHP.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected function compileComments($value)
+	{
+		$pattern = sprintf('/%s--((.|\s)*?)--%s/', $this->contentTags[0], $this->contentTags[1]);
+
+		return preg_replace($pattern, '<?php /*$1*/ ?>', $value);
+	}
+
+	/**
+	 * Compile Blade echos into valid PHP.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected function compileEchos($value)
+	{
+		$difference = strlen($this->contentTags[0]) - strlen($this->escapedTags[0]);
+
+		if ($difference > 0)
+		{
+			return $this->compileEscapedEchos($this->compileRegularEchos($value));
+		}
+
+		return $this->compileRegularEchos($this->compileEscapedEchos($value));
+	}
+
+	/**
+	 * Compile Blade Statements that start with "@"
+	 *
+	 * @param  string  $value
+	 * @return mixed
+	 */
+	protected function compileStatements($value)
+	{
+		$callback = function($match)
+		{
+			if (method_exists($this, $method = 'compile'.ucfirst($match[1])))
+			{
+				$match[0] = $this->$method(array_get($match, 3));
+			}
+
+			return isset($match[3]) ? $match[0] : $match[0].$match[2];
+		};
+
+		return preg_replace_callback('/\B@(\w+)([ \t]*)(\( ( (?>[^()]+) | (?3) )* \))?/x', $callback, $value);
+	}
+
+	/**
+	 * Compile the "regular" echo statements.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected function compileRegularEchos($value)
+	{
+		$pattern = sprintf('/(@)?%s\s*(.+?)\s*%s(\r?\n)?/s', $this->contentTags[0], $this->contentTags[1]);
+
+		$callback = function($matches)
+		{
+			$whitespace = empty($matches[3]) ? '' : $matches[3].$matches[3];
+
+			return $matches[1] ? substr($matches[0], 1) : '<?php echo '.$this->compileEchoDefaults($matches[2]).'; ?>'.$whitespace;
+		};
+
+		return preg_replace_callback($pattern, $callback, $value);
+	}
+
+	/**
+	 * Compile the escaped echo statements.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	protected function compileEscapedEchos($value)
+	{
+		$pattern = sprintf('/%s\s*(.+?)\s*%s(\r?\n)?/s', $this->escapedTags[0], $this->escapedTags[1]);
+
+		$callback = function($matches)
+		{
+			$whitespace = empty($matches[2]) ? '' : $matches[2].$matches[2];
+
+			return '<?php echo e('.$this->compileEchoDefaults($matches[1]).'); ?>'.$whitespace;
+		};
+
+		return preg_replace_callback($pattern, $callback, $value);
+	}
+
+	/**
+	 * Compile the default values for the echo statement.
+	 *
+	 * @param  string  $value
+	 * @return string
+	 */
+	public function compileEchoDefaults($value)
+	{
+		return preg_replace('/^(?=\$)(.+?)(?:\s+or\s+)(.+?)$/s', 'isset($1) ? $1 : $2', $value);
+	}
+
+	/**
+	 * Compile the each statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileEach($expression)
+	{
+		return "<?php echo \$__env->renderEach{$expression}; ?>";
+	}
+
+	/**
+	 * Compile the yield statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileYield($expression)
+	{
+		return "<?php echo \$__env->yieldContent{$expression}; ?>";
+	}
+
+	/**
+	 * Compile the show statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileShow($expression)
+	{
+		return "<?php echo \$__env->yieldSection(); ?>";
+	}
+
+	/**
+	 * Compile the section statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileSection($expression)
+	{
+		return "<?php \$__env->startSection{$expression}; ?>";
+	}
+
+	/**
+	 * Compile the append statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileAppend($expression)
+	{
+		return "<?php \$__env->appendSection(); ?>";
+	}
+
+	/**
+	 * Compile the end-section statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileEndsection($expression)
+	{
+		return "<?php \$__env->stopSection(); ?>";
+	}
+
+	/**
+	 * Compile the stop statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileStop($expression)
+	{
+		return "<?php \$__env->stopSection(); ?>";
+	}
+
+	/**
+	 * Compile the overwrite statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileOverwrite($expression)
+	{
+		return "<?php \$__env->stopSection(true); ?>";
+	}
+
+	/**
+	 * Compile the unless statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileUnless($expression)
+	{
+		return "<?php if ( ! $expression): ?>";
+	}
+
+	/**
+	 * Compile the end unless statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileEndunless($expression)
+	{
+		return "<?php endif; ?>";
+	}
+
+	/**
+	 * Compile the lang statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileLang($expression)
+	{
+		return "<?php echo \\Illuminate\\Support\\Facades\\Lang::get$expression; ?>";
+	}
+
+	/**
+	 * Compile the choice statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileChoice($expression)
+	{
+		return "<?php echo \\Illuminate\\Support\\Facades\\Lang::choice$expression; ?>";
+	}
+
+	/**
+	 * Compile the else statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileElse($expression)
+	{
+		return "<?php else: ?>";
+	}
+
+	/**
+	 * Compile the for statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileFor($expression)
+	{
+		return "<?php for{$expression}: ?>";
+	}
+
+	/**
+	 * Compile the foreach statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileForeach($expression)
+	{
+		return "<?php foreach{$expression}: ?>";
+	}
+
+	/**
+	 * Compile the forelse statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileForelse($expression)
+	{
+		$empty = '$__empty_' . ++$this->forelseCounter;
+
+		return "<?php {$empty} = true; foreach{$expression}: {$empty} = false; ?>";
+	}
+
+	/**
+	 * Compile the if statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileIf($expression)
+	{
+		return "<?php if{$expression}: ?>";
+	}
+
+	/**
+	 * Compile the else-if statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileElseif($expression)
+	{
+		return "<?php elseif{$expression}: ?>";
+	}
+
+	/**
+	 * Compile the forelse statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileEmpty($expression)
+	{
+		$empty = '$__empty_' . $this->forelseCounter--;
+
+		return "<?php endforeach; if ({$empty}): ?>";
+	}
+
+	/**
+	 * Compile the while statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileWhile($expression)
+	{
+		return "<?php while{$expression}: ?>";
+	}
+
+	/**
+	 * Compile the end-while statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileEndwhile($expression)
+	{
+		return "<?php endwhile; ?>";
+	}
+
+	/**
+	 * Compile the end-for statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileEndfor($expression)
+	{
+		return "<?php endfor; ?>";
+	}
+
+	/**
+	 * Compile the end-for-each statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileEndforeach($expression)
+	{
+		return "<?php endforeach; ?>";
+	}
+
+	/**
+	 * Compile the end-if statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileEndif($expression)
+	{
+		return "<?php endif; ?>";
+	}
+
+	/**
+	 * Compile the end-for-else statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileEndforelse($expression)
+	{
+		return "<?php endif; ?>";
+	}
+
+	/**
+	 * Compile the extends statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileExtends($expression)
+	{
+		if (starts_with($expression, '('))
+		{
+			$expression = substr($expression, 1, -1);
+		}
+
+		$data = "<?php echo \$__env->make($expression, array_except(get_defined_vars(), array('__data', '__path')))->render(); ?>";
+
+		$this->footer[] = $data;
+
+		return '';
+	}
+
+	/**
+	 * Compile the include statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileInclude($expression)
+	{
+		if (starts_with($expression, '('))
+		{
+			$expression = substr($expression, 1, -1);
+		}
+
+		return "<?php echo \$__env->make($expression, array_except(get_defined_vars(), array('__data', '__path')))->render(); ?>";
+	}
+
+	/**
+	 * Compile the stack statements into the content
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileStack($expression)
+	{
+		return "<?php echo \$__env->yieldContent{$expression}; ?>";
+	}
+
+	/**
+	 * Compile the push statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compilePush($expression)
+	{
+		return "<?php \$__env->startSection{$expression}; ?>";
+	}
+
+	/**
+	 * Compile the endpush statements into valid PHP.
+	 *
+	 * @param  string  $expression
+	 * @return string
+	 */
+	protected function compileEndpush($expression)
+	{
+		return "<?php \$__env->appendSection(); ?>";
+	}
+
+	/**
+	 * Register a custom Blade compiler.
+	 *
+	 * @param  \Closure  $compiler
+	 * @return void
+	 */
+	public function extend(Closure $compiler)
+	{
+		$this->extensions[] = $compiler;
+	}
+
+	/**
+	 * Get the regular expression for a generic Blade function.
+	 *
+	 * @param  string  $function
+	 * @return string
+	 */
+	public function createMatcher($function)
+	{
+		return '/(?<!\w)(\s*)@'.$function.'(\s*\(.*\))/';
+	}
+
+	/**
+	 * Get the regular expression for a generic Blade function.
+	 *
+	 * @param  string  $function
+	 * @return string
+	 */
+	public function createOpenMatcher($function)
+	{
+		return '/(?<!\w)(\s*)@'.$function.'(\s*\(.*)\)/';
+	}
+
+	/**
+	 * Create a plain Blade matcher.
+	 *
+	 * @param  string  $function
+	 * @return string
+	 */
+	public function createPlainMatcher($function)
+	{
+		return '/(?<!\w)(\s*)@'.$function.'(\s*)/';
+	}
+
+	/**
+	 * Sets the content tags used for the compiler.
+	 *
+	 * @param  string  $openTag
+	 * @param  string  $closeTag
+	 * @param  bool    $escaped
+	 * @return void
+	 */
+	public function setContentTags($openTag, $closeTag, $escaped = false)
+	{
+		$property = ($escaped === true) ? 'escapedTags' : 'contentTags';
+
+		$this->{$property} = array(preg_quote($openTag), preg_quote($closeTag));
+	}
+
+	/**
+	 * Sets the escaped content tags used for the compiler.
+	 *
+	 * @param  string  $openTag
+	 * @param  string  $closeTag
+	 * @return void
+	 */
+	public function setEscapedContentTags($openTag, $closeTag)
+	{
+		$this->setContentTags($openTag, $closeTag, true);
+	}
+
+	/**
+	* Gets the content tags used for the compiler.
+	*
+	* @return string
+	*/
+	public function getContentTags()
+	{
+		return $this->getTags();
+	}
+
+	/**
+	* Gets the escaped content tags used for the compiler.
+	*
+	* @return string
+	*/
+	public function getEscapedContentTags()
+	{
+		return $this->getTags(true);
+	}
+
+	/**
+	 * Gets the tags used for the compiler.
+	 *
+	 * @param  bool  $escaped
+	 * @return array
+	 */
+	protected function getTags($escaped = false)
+	{
+		$tags = $escaped ? $this->escapedTags : $this->contentTags;
+
+		return array_map('stripcslashes', $tags);
+	}
+
+}