Skip to content

Commit

Permalink
At least TDTInfo works again
Browse files Browse the repository at this point in the history
  • Loading branch information
pietercolpaert committed Sep 24, 2011
1 parent 315fb7f commit b861050
Show file tree
Hide file tree
Showing 18 changed files with 161 additions and 217 deletions.
40 changes: 11 additions & 29 deletions controllers/RController.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,50 +27,32 @@ function GET($matches) {
//This will create an instance of a factory depending on which format is set
$this->formatterfactory = FormatterFactory::getInstance($matches["format"]);

//This will create an instance of AResource
//Get an instance of our model
$model = ResourcesModel::getInstance();
$resource = $model->getResource($package,$resourcename);
//ask the model for our documentation: access to all packages and resources!
$doc = $model->getAllDoc();

$RESTparameters = array();
if(isset($matches['RESTparameters']) && $matches['RESTparameters'] != ""){
$RESTparameters = explode("/",rtrim($matches['RESTparameters'],"/"));
}

$requiredparams = array();
$parameters = $_GET;

foreach($model->getResourceRequiredParameters($package,$resourcename) as $parameter){
//check for required parameters
foreach($doc->$package->$resourcename->requiredparameters as $parameter){
//set the parameter of the method
if(!isset($RESTparameters[0])){
throw new ParameterTDTException($parameter);
}
$resource->setParameter($parameter, $RESTparameters[0]);
$requiredparams[$parameter]=$RESTparameters[0];

//removes the first element and reindex the array
$parameters[$parameter]=$RESTparameters[0];
//removes the first element and reindex the array - this way we'll only keep the object specifiers in this array
array_shift($RESTparameters);
}
//what remains in the $resources array are specification for a RESTful way of identifying objectparts
//for instance: http://api.../TDTInfo/Modules/module/1/ would make someone only select the second module

//also give the non REST parameters to the resource class
$resource->processParameters();

// check if the given format is allowed by the method
$printmethod = "";
foreach($model->getAllowedPrintMethods($package,$resourcename) as $printername){
if(strtolower($this->formatterfactory->getFormat()) == strtolower($printername)){
$printmethod = $printername;
break;
}
}

//if the printmethod is not allowed, just throw an exception
if($printmethod == "" || strtolower($this->formatterfactory->getFormat()) == "about"){
throw new FormatNotAllowedTDTException($this->formatterfactory->getFormat(),$resource->getAllowedPrintMethods());
}

//Let's do the call!
$result = $resource->call();
$result = $model->readResource($package,$resourcename, $parameters);

/*
* Add foreign the required foreign relations URL's to the resulting object
Expand Down Expand Up @@ -142,9 +124,9 @@ function GET($matches) {

$printer = $this->formatterfactory->getPrinter(strtolower($resourcename), $result);
$printer->printAll();
if($model->getResourceType($package,$resourcename) != "remote"){
//if($model->getResourceType($package,$resourcename) != "remote"){
RequestLogger::logRequest();
}
//}
}

/**
Expand Down
20 changes: 20 additions & 0 deletions model/AResourceFactory.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,26 @@
*/

abstract class AResourceFactory{

/**
* Quickly check if this factory has a specific resource
* @param package the name of the package the resource has
* @param resource the name of the resource
* @return boolean whether or not this factory has the package
*/
public function hasResource($package,$resource){
foreach($this->getAllResourceNames() as $packagename => $resourcenames){
foreach($resourcenames as $resourcename){
if($resourcename == $resource && $package == $packagename){
return true;
}
}
}
return false;
}

abstract protected function getAllResourceNames();

/**
* Creates an instance of a creator class.
* @param $package the new package of the resource. It may exist already
Expand Down
44 changes: 24 additions & 20 deletions model/CoreResourceFactory.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,33 +10,43 @@

class CoreResourceFactory extends AResourceFactory {

protected function getAllResourceNames(){
return array("TDTInfo" => array("Resources", "Queries", "Packages", "Exceptions", "Mapping"));
}

public function createCreator($package,$resource, $parameters){
//do nothing
}

public function createReader($package,$resource, $parameters){

}

public function createUpdater($package,$resource, $parameters){

include_once("model/packages/" . $package . "/" . $resource . ".class.php");
$creator = new $resource($package,$resource);
$creator->processParameters($parameters);
return $creator;
}

public function createDeleter($package,$resource){

//do nothing
}

public function makeDoc($doc){
//ask every resource we have for documentation
foreach($this->getAllResourceNames() as $package => $resourcenames){
if(!isset($doc->$package)){
$doc->$package = new StdClass();
}
foreach($resourcenames as $resourcename){
include_once("model/packages/" . $package . "/" . $resourcename . ".class.php");
$docs->$package->$resourcename->doc = $resourcename::getDoc();
$docs->$package->$resourcename->requiredparameters = $resourcename::getRequiredParameters();
$docs->$package->$resourcename->parameters = $resourcename::getParameters();
$docs->$package->$resourcename->formats = $resourcename::getAllowedFormats();
$docs->$package->$resourcename->creation_timestamp = $this->getCreationTime($package,$resource);
$docs->$package->$resourcename->modification_timestamp = $this->getModificationTime($package,$resource);
$doc->$package->$resourcename = new StdClass();
include_once("model/packages/" . $package . "/" . $resourcename . ".class.php");
$doc->$package->$resourcename->doc = $resourcename::getDoc();
$doc->$package->$resourcename->requiredparameters = $resourcename::getRequiredParameters();
$doc->$package->$resourcename->parameters = $resourcename::getParameters();
$doc->$package->$resourcename->formats = array();//if empty array: allow all
if(function_exists("$resourcename::getAllowedFormatters")){
$doc->$package->$resourcename->formats = $resourcename::getAllowedFormatters();
}
$doc->$package->$resourcename->creation_timestamp = $this->getCreationTime($package,$resourcename);
$doc->$package->$resourcename->modification_timestamp = $this->getModificationTime($package,$resourcename);
}
}
}
Expand All @@ -53,12 +63,6 @@ private function getCreationTime($package, $resource) {
private function getModificationTime($package, $resource) {
// for an existing folder you can only get the last modification date in php, so
return $this->getCreationTime($package, $resource);
}

private function getAllResourceNames(){
return array("TDTInfo" => array("Resources", "Queries", "Packages", "Exceptions", "Mapping"));
}

}
}

?>
1 change: 1 addition & 0 deletions model/Doc.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public function visitAll($factories){
$c = Cache::getInstance();
$doc = $c->get("documentation");
if(is_null($doc)){
$doc = new stdClass();
foreach($factories as $factory){
$factory->makeDoc($doc);
}
Expand Down
47 changes: 35 additions & 12 deletions model/GenericResourceFactory.class.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
<?php

/**
* This will get a resource description from the databank and add the right strategy to process the call to the GenericResource class
*
Expand All @@ -9,7 +8,8 @@
* @author Pieter Colpaert
* @author Jan Vansteenlandt
*/
include_once("model/resources/GenericResource.class.php");

include_once("model/resources/AResource.class.php");

class GenericResourceFactory extends AResourceFactory {

Expand All @@ -19,25 +19,48 @@ public function createCreator($package,$resource, $parameters){
throw new ResourceAdditionTDTException("generic type hasn't been set");
}
$creator = new GenericResourceCreator($parameters["generic_type"]);
//TODO
$creator->processParameters($parameters);
return $creator;
}

public function createReader($package,$resource, $parameters){
include_once("model/resources/create/GenericResourceReader.class.php");
//Todo: processParameters
foreach($parameters as $key => $value){

}

return new GenericResourceReader($parameters["generic_type"]);
include_once("model/resources/read/GenericResourceReader.class.php");
$reader = new GenericResourceReader($package, $resource, $parameters["generic_type"]);
$reader->processParameters($parameters);
return $reader;
}

public function createDeleter($package,$resource){

include_once("model/resources/delete/GenericResourceDeleter.class.php");
$deleter = new GenericResourceDeleter($package,$resource);
return $deleter;
}

public function makeDoc($doc){
//ask every resource we have for documentation
foreach($this->getAllResourceNames() as $package => $resourcenames){
foreach($resourcenames as $resourcename){
include_once("model/packages/" . $package . "/" . $resourcename . ".class.php");
$docs->$package->$resourcename->doc = $resourcename::getDoc();
$docs->$package->$resourcename->requiredparameters = $resourcename::getRequiredParameters();
$docs->$package->$resourcename->parameters = $resourcename::getParameters();
$docs->$package->$resourcename->formats = $resourcename::getAllowedFormats();
$docs->$package->$resourcename->creation_timestamp = $this->getCreationTime($package,$resource);
$docs->$package->$resourcename->modification_timestamp = $this->getModificationTime($package,$resource);
}
}
}

protected function getAllResourceNames(){
$results = DBQueries::getAllGenericResourceNames();
$resources = array();
foreach($results as $result){
if(!array_key_exists($result["package_name"],$resources)){
$resources[$result["package_name"]] = array();
}
$resources[$result["package_name"]][] = $result["res_name"];
}
return $resources;
}

}
Expand Down
21 changes: 13 additions & 8 deletions model/InstalledResourceFactory.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,20 @@ public function createDeleter($package,$resource){
public function makeDoc($doc){
//ask every resource we have for documentation
foreach($this->getAllResourceNames() as $package => $resourcenames){
if(!isset($doc->$package)){
$doc->$package = new StdClass();
}
foreach($resourcenames as $resourcename){
$doc->$package->$resourcename = new StdClass();
include_once("custom/packages/" . $package . "/" . $resourcename . ".class.php");
$docs->$package->$resourcename->doc = $resourcename::getDoc();
$docs->$package->$resourcename->requiredparameters = $resourcename::getRequiredParameters();
$docs->$package->$resourcename->parameters = $resourcename::getParameters();
$docs->$package->$resourcename->formats = $resourcename::getAllowedFormats();
$docs->$package->$resourcename->creation_timestamp = $this->getCreationTime($package,$resource);
$docs->$package->$resourcename->modification_timestamp = $this->getModificationTime($package,$resource);
$doc->$package->$resourcename->doc = $resourcename::getDoc();
$doc->$package->$resourcename->requiredparameters = $resourcename::getRequiredParameters();
$doc->$package->$resourcename->parameters = $resourcename::getParameters();
if(function_exists("$resourcename::getAllowedFormatters")){
$doc->$package->$resourcename->formats = $resourcename::getAllowedFormatters();
}
$doc->$package->$resourcename->creation_timestamp = $this->getCreationTime($package,$resourcename);
$doc->$package->$resourcename->modification_timestamp = $this->getModificationTime($package,$resourcename);
}
}
}
Expand All @@ -53,7 +59,7 @@ private function getModificationTime($package, $resource) {
return $this->getCreationTime($package, $resource);
}

private function getAllResourceNames(){
protected function getAllResourceNames(){
$packages = array();
//open the custom directory and loop through it
if ($handle = opendir('custom/packages')) {
Expand All @@ -66,7 +72,6 @@ private function getAllResourceNames(){
}
closedir($handle);
}

return $packages;
}
}
Expand Down
30 changes: 23 additions & 7 deletions model/RemoteResourceFactory.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,32 +8,48 @@
* @author Jan Vansteenlandt
* @author Pieter Colpaert
*/
include_once("model/resources/RemoteResource.class.php");
include_once("model/resources/AResource.class.php");

class RemoteResourceFactory extends AResourceFactory{

protected function getAllResourceNames(){
$resultset = DBQueries::getAllRemoteResourceNames();
$resources = array();
foreach($resultset as $result){
if(!isset($resources[$result["package_name"]])){
$resources[$result["package_name"]] = array();
}
$resources[$result["package_name"]][] = $result["res_name"];
}
return $resources;
}

public function createCreator($package,$resource, $parameters){
include_once("model/resources/create/RemoteResourceCreator.class.php");
//todo: give parameters to the creator through processparameters
return new RemoteResourceCreator();
$creator = new RemoteResourceCreator();
$creator->processParameters($parameters);
return $creator;
}

public function createReader($package,$resource, $parameters){
include_once("model/resources/read/RemoteResourceReader.class.php");
return new RemoteResourceReader($package, $resource);
$reader = new RemoteResourceReader($package, $resource);
$reader->processParameters($parameters);
return $reader;
}

public function createUpdater($package,$resource, $parameters){

}

public function createDeleter($package,$resource){

}

public function makeDoc($doc){
foreach($this->getAllResourceNames() as $package => $resourcenames){
if(!isset($doc->$package)){
$doc->$package = new StdClass();
}
foreach($resourcenames as $resource){
$doc->$resource = new StdClass();
$doc->$package->$resource = $this->fetchResourceDocumentation($package, $resource);
}
}
Expand Down
Loading

0 comments on commit b861050

Please sign in to comment.