Campustream 1.0
A social network MQP for WPI
application/lib/PhlockDB/Phlock.php
Go to the documentation of this file.
00001 <?php
00002 
00003 require_once $GLOBALS['THRIFT_ROOT'].'/Thrift.php';
00004 require_once $GLOBALS['THRIFT_ROOT'].'/transport/TSocket.php';
00005 require_once $GLOBALS['THRIFT_ROOT'].'/transport/TBufferedTransport.php';
00006 require_once $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php';
00007 
00008 require_once $GLOBALS['THRIFT_ROOT'].'/packages/Flockdb/FlockDB.php';
00009 
00010 class Phlock {
00011         
00012         private $servers;
00013         private $graphs;
00014         private $options;
00015         private $client;
00016         
00017         public function __construct(array $servers, array $options = array()) {
00018                 $this->servers = $servers;
00019                 $this->graphs = isset($options['graphs']) ? $options['graphs'] : array();
00020                 unset($options['graphs']);
00021                 $this->options = $options;
00022         }
00023         
00024         public function client() {
00025                 if (!isset($this->client)) {
00026                         list($client, $port) = explode(':', $this->servers[0]);
00027                         
00028                         $socket = new TSocket($client, $port);
00029                         $protocol = new TBinaryProtocol($socket);
00030                         $this->client = new FlockDBClient($protocol);
00031                         
00032                         $socket->open();
00033                 }
00034                 return $this->client;
00035         }
00036         
00037         public function add($source_id, $graph, $destination_ids) {
00038                 $term = $this->createQueryTerm($source_id, $graph, $destination_ids);
00039                 $this->update(Flock_ExecuteOperationType::Add, $term);
00040         }
00041         
00042         public function remove($source_id, $graph, $destination_ids) {
00043                 $term = $this->createQueryTerm($source_id, $graph, $destination_ids);
00044                 $this->update(Flock_ExecuteOperationType::Remove, $term);
00045         }
00046         
00047         public function archive($source_id, $graph, $destination_ids) {
00048                 $term = $this->createQueryTerm($source_id, $graph, $destination_ids);
00049                 $this->update(Flock_ExecuteOperationType::Archive, $term);
00050         }
00051         
00052         public function update($method, Phlock_QueryTerm $term, $priority = Flock_Priority::High) {
00053                 $operations = new Phlock_ExecuteOperations($this->client());
00054                 $operations->setPriority($priority);
00055                 $operations->addOperation(new Phlock_ExecuteOperation($method, $term));
00056                 $operations->apply();
00057         }
00058         
00059         public function contains($source_id, $graph, $destination_id) {
00060                 $graph_id = is_int($graph) ? $graph : $this->graphs[$graph];
00061                 return $this->client()->contains($source_id, $graph_id, $destination_id);
00062         }
00063         
00064         public function size($source_id, $graph, $destination_ids) {
00065                 $cursor = $this->select($source_id, $graph, $destination_ids);
00066                 return $cursor->size();
00067         }
00068         
00069         public function select($source_id, $graph, $destination_ids) {
00070                 $term = $this->createQueryTerm($source_id, $graph, $destination_ids);
00071                 return new Phlock_Cursor($this->client(), $term);
00072         }
00073         
00074         public function createQueryTerm($source, $graph, $destination) {
00075                 $graph_id = is_int($graph) ? $graph : $this->graphs[$graph];
00076                 return new Phlock_QueryTerm($source, $graph_id, $destination);
00077         }
00078 }