text:
#!/usr/bin/perl
use strict;
use warnings;
use Switch;
use Getopt::Long qw(:config no_ignore_case);

#constants
our $OUTPUT_DIR="/var/www/perun-web";

#INFO ABOUT STRUCTURE
#     %MANAGERS
#         |
#   {manager name}
#         |
#     @METHODS
#         |
#       {0..x}
#         |
#      %METHOD
#       |    |
#   {"name"}{javadocs}
#     |          |
# $methodName  @javadocs
#                |
#              {0..x}
#                |
#              %javadoc
#              | | | |
#   {"text","params","throws","return","deprecated","exampleResponse","exampleParams"}
#      |       |       |         |           |              |                |
#   @text    @params  @throws   $return  $deprecated $exampleResponse @exampleParams
#      |       |       |
#   {0..x}   {0..x}  {0..x}
#      |       |       |
#    $text  $param    $throw

#variables
my $managers = {};

our %objectExamples;

my $listPrepend = "[ ";
my $listAppend = " , {...} , {...} ]";

$objectExamples{"Attribute"} = "{ \"id\" : 2820 , \"friendlyName\" : \"createdAt\" , \"namespace\" : \"urn:perun:vo:attribute-def:core\" , \"value\" : \"2011-05-17 00:50:06.3\" , \"type\" : \"java.lang.String\" , \"entity\" : \"vo\" , \"writable\" : true , \"baseFriendlyName\" : \"createdAt\" , \"friendlyNameParameter\" : \"\" , \"displayName\" : \"VO created date\" , \"description\" : \"Date when VO was created.\" , \"beanName\" : \"Attribute\" }";
$objectExamples{"List<Attribute>"} = $listPrepend . $objectExamples{"Attribute"} . $listAppend;
$objectExamples{"List<Attribute>"} = $objectExamples{"List<Attribute>"};

$objectExamples{"Vo"} = "{ \"id\" : 123 , \"name\" : \"My testing VO\" , \"shortName\" : \"test_vo\" , \"beanName\" : \"Vo\" }";
$objectExamples{"List<Vo>"} = $listPrepend . $objectExamples{"Vo"} . $listAppend;
$objectExamples{"List<Vo>"} = $objectExamples{"List<Vo>"};

$objectExamples{"Facility"} = "{ \"id\" : 24 , \"name\" : \"host.facility.cz\" , \"description\" : \"is optional\" , \"beanName\" : \"Facility\" }";
$objectExamples{"List<Facility>"} = $listPrepend . $objectExamples{"Facility"} . $listAppend;
$objectExamples{"List<Facility>"} = $objectExamples{"List<Facility>"};

$objectExamples{"RichFacility"} = "{ \"id\" : 24 , \"name\" : \"host.facility.cz\" , , \"description\" : \"is optional\" , \"facilityOwners\" : [ { \"id\" : 183 , \"name\" : \"Some Body\" , \"type\" : \"technical\" , \"contact\" : \"mail\@mail.com\" , \"beanName\" : \"Owner\" } ] , \"beanName\" : \"RichFacility\" }";
$objectExamples{"List<RichFacility>"} = $listPrepend . $objectExamples{"RichFacility"} . $listAppend;
$objectExamples{"List<RichFacility>"} = $objectExamples{"List<RichFacility>"};

$objectExamples{"Resource"} = "{ \"id\" : 493 , \"name\" : \"host1.host.cz\" , \"description\" : \"ROOT access to host1.host.cz\" , \"facilityId\" : 24 , \"voId\" : 21 , \"beanName\" : \"Resource\" }";
$objectExamples{"List<Resource>"} = $listPrepend . $objectExamples{"Resource"} . $listAppend;
$objectExamples{"List<Resource>"} = $objectExamples{"List<Resource>"};

$objectExamples{"ResourceTag"} = "{ \"id\" : 3 , \"tagName\" : \"comp_cluster\" , \"voId\" : 123 , \"beanName\" : \"ResourceTag\" }";
$objectExamples{"List<ResourceTag>"} = $listPrepend . $objectExamples{"ResourceTag"} . $listAppend;
$objectExamples{"List<ResourceTag>"} = $objectExamples{"List<ResourceTag>"};

$objectExamples{"RichResource"} = "{ \"id\" : 493 , \"name\" : \"host1.host.cz\" , \"description\" : \"ROOT access to host1.host.cz\" , \"facilityId\" : 24 , \"voId\" : 123 , \"beanName\" : \"RichResource\" , \"vo\" : ". $objectExamples{"Vo"} . ", \"facility\" : ". $objectExamples{"Facility"} . " , \"resourceTags\" : ". $objectExamples{"List<ResourceTag>"} . " }";
$objectExamples{"List<RichResource>"} = $listPrepend . $objectExamples{"RichResource"} . $listAppend;
$objectExamples{"List<RichResource>"} = $objectExamples{"List<RichResource>"};

$objectExamples{"Owner"} = "{ \"id\" : 183 , \"name\" : \"Some Body\" , \"type\" : \"administrative\" , \"contact\" : \"mail\@mail.com\" , \"beanName\" : \"Owner\" }";
$objectExamples{"List<Owner>"} = $listPrepend . $objectExamples{"Owner"} . $listAppend;
$objectExamples{"List<Owner>"} = $objectExamples{"List<Owner>"};

$objectExamples{"Group"} = "{ \"id\" : 1061 , \"name\" : \"My group\" , \"shortName\" : \"My group\" , \"description\" : \"My testing group\" , \"parentGroupId\" : null , \"voId\" : 201 , \"beanName\" : \"Group\" }";
$objectExamples{"List<Group>"} = $listPrepend . $objectExamples{"Group"} . $listAppend;
$objectExamples{"List<Group>"} = $objectExamples{"List<Group>"};

$objectExamples{"RichGroup"} = "{ \"id\" : 1061 , \"name\" : \"My Group\" , \"shortName\" : \"My Group\" , \"description\" : \"My testing group\" , \"parentGroupId\" : null , \"voId\" : 201 , \"beanName\" : \"RichGroup\" , \"attributes\" : [ { \"value\" : null , \"type\" : \"java.lang.String\" , \"entity\" : \"group\" , \"namespace\" : \"urn:perun:group:attribute-def:def\" , \"friendlyName\" : \"synchronizationEnabled\" , \"writable\" : true , \"baseFriendlyName\" : \"synchronizationEnabled\" , \"friendlyNameParameter\" : \"\" , \"displayName\" : \"Synchronization enabled\" , \"description\" : \"Enables group synchronization from external source.\" , \"id\" : 103 , \"beanName\" : \"Attribute\" } ] }";
$objectExamples{"List<RichGroup>"} = $listPrepend . $objectExamples{"RichGroup"} . $listAppend;
$objectExamples{"List<RichGroup>"} = $objectExamples{"List<RichGroup>"};

$objectExamples{"Member"} = "{ \"id\" : 12 , \"userId\" : 34 , \"voId\" : 42 , \"sourceGroupId\" : null , \"membershipType\" : \"DIRECT\" , \"status\" : \"VALID\" , \"beanName\" : \"Member\" }";
$objectExamples{"List<Member>"} = $listPrepend . $objectExamples{"Member"} . $listAppend;
$objectExamples{"List<Member>"} = $objectExamples{"List<Member>"};

$objectExamples{"User"} = "{ \"firstName\" : \"Some\" , \"lastName\" : \"Body\" , \"middleName\" : null , \"titleBefore\" : \"Mgr.\" , \"titleAfter\" : null , \"serviceUser\" : false , \"id\" : 34 , \"beanName\" : \"User\" }";
$objectExamples{"List<User>"} = $listPrepend . $objectExamples{"User"} . $listAppend;
$objectExamples{"List<User>"} = $objectExamples{"List<User>"};

$objectExamples{"ExtSource"} = "{ \"name\" : \"PERUNPEOPLE\" , \"type\" : \"cz.metacentrum.perun.core.impl.ExtSourceSql\" , \"attributes\" : {} , \"id\" : 2 , \"beanName\" : \"ExtSource\" }";
$objectExamples{"List<ExtSource>"} = $listPrepend . $objectExamples{"ExtSource"} . $listAppend;
$objectExamples{"List<ExtSource>"} = $objectExamples{"List<ExtSource>"};

$objectExamples{"UserExtSource"} = "{ \"userId\": 34 , \"loa\" : 0 , \"extSource\" : " . $objectExamples{"ExtSource"} . " , \"login\" : \"my_login\" , \"id\" : 312 , \"beanName\" : \"UserExtSource\" }";
$objectExamples{"List<UserExtSource>"} = $listPrepend . $objectExamples{"UserExtSource"} . $listAppend;
$objectExamples{"List<UserExtSource>"} = $objectExamples{"List<UserExtSource>"};

$objectExamples{"RichUser"} = "{ \"firstName\" : \"Some\" , \"lastName\" : \"Body\" , \"middleName\" : null , \"titleBefore\" : \"Mgr.\" , \"titleAfter\" : null , \"serviceUser\" : false , \"id\" : 34 , \"beanName\" : \"User\" , \"userExtSources\" : " . $objectExamples{"List<UserExtSource>"} . ", \"userAttributes\" : [ { \"value\" : \"my_login\" , \"type\" : \"java.lang.String\" , \"entity\" : \"user\" , \"namespace\" : \"urn:perun:user:attribute-def:def\" , \"friendlyName\" : \"login-namespace:perun\" , \"writable\" : true , \"baseFriendlyName\" : \"login-namespace\" , \"friendlyNameParameter\" : \"perun\" , \"displayName\" : \"Login in namespace: perun\" , \"description\" : \"Logname in namespace 'perun'.\" , \"id\" : 1905 , \"beanName\" : \"Attribute\" } ] }";
$objectExamples{"List<RichUser>"} = $listPrepend . $objectExamples{"RichUser"} . $listAppend;
$objectExamples{"List<RichUser>"} = $objectExamples{"List<RichUser>"};

$objectExamples{"RichMember"} = "{ \"id\" : 12 , \"userId\" : 34 , \"voId\" : 42 , \"sourceGroupId\" : null , \"membershipType\" : \"DIRECT\" , \"status\" : \"VALID\" , \"beanName\" : \"RichMember\" , \"user\" : " . $objectExamples{"User"} . " , \"userExtSources\" : " . $objectExamples{"List<UserExtSource>"} . " , \"memberAttributes\" : [ ] , \"userAttributes\" : [ { \"value\" : \"my_login\" , \"type\" : \"java.lang.String\" , \"entity\" : \"user\" , \"namespace\" : \"urn:perun:user:attribute-def:def\" , \"friendlyName\" : \"login-namespace:perun\" , \"writable\" : true , \"baseFriendlyName\" : \"login-namespace\" , \"friendlyNameParameter\" : \"perun\" , \"displayName\" : \"Login in namespace: perun\" , \"description\" : \"Logname in namespace 'perun'.\" , \"id\" : 1905 , \"beanName\" : \"Attribute\" } ] }";
$objectExamples{"List<RichMember>"} = $listPrepend . $objectExamples{"RichMember"} . $listAppend;
$objectExamples{"List<RichMember>"} = $objectExamples{"List<RichMember>"};

$objectExamples{"RTMessage"} = "{ \"ticketNumber\" : 32525 , \"memberPreferredEmail\" : \"mail\@mail.com\" }";

$objectExamples{"Service"} = "{ \"id\" : 290 , \"name\" : \"passwd\" }";
$objectExamples{"List<Service>"} = $listPrepend . $objectExamples{"Service"} . $listAppend;
$objectExamples{"List<Service>"} = $objectExamples{"List<Service>"};

$objectExamples{"ServicesPackage"} = "{ \"id\" : 50 , \"name\" : \"Unix account\" , \"description\" : \"Collection of services for managing unix accounts.\" }";
$objectExamples{"List<ServicesPackage>"} = $listPrepend . $objectExamples{"ServicesPackage"} . $listAppend;
$objectExamples{"List<ServicesPackage>"} = $objectExamples{"List<ServicesPackage>"};

$objectExamples{"Destination"} = "{ \"id\" : 99 , \"destination\" : \"host\@host.cz\" , \"type\" : \"HOST\" , \"propagationType\" : \"PARALLEL\" }";
$objectExamples{"List<Destination>"} = $listPrepend . $objectExamples{"Destination"} . $listAppend;
$objectExamples{"List<Destination>"} = $objectExamples{"List<Destination>"};

$objectExamples{"Host"} = "{ \"id\" : 523 , \"hostname\" : \"host1.host.cz\" }";
$objectExamples{"List<Host>"} = $listPrepend . $objectExamples{"Host"} . $listAppend;
$objectExamples{"List<Host>"} = $objectExamples{"List<Host>"};

$objectExamples{"AuditMessage"} = "{ \"id\" : 249053 , \"msg\" : \"Something happened.\" , \"actor\" : \"actor\@hostname.cz\" , \"createdAt\" : \"2015-03-16 16:00:40.449221\" , \"createdByUid\" : \"34\" , \"fullMessage\" : \"249053 \\\"2015-03-16 16:00:40.449221\\\" \\\"actor\@hostname.cz\\\" Something happened.\" }";
$objectExamples{"List<AuditMessage>"} = $listPrepend . $objectExamples{"AuditMessage"} . $listAppend;
$objectExamples{"List<AuditMessage>"} = $objectExamples{"List<AuditMessage>"};

$objectExamples{"String"} = "\"text\"";
$objectExamples{"boolean"} = "true";

$objectExamples{"Candidate"} = "{ \"id\" : 0 , \"serviceUser\" : false , \"firstName\" : \"Random\" , \"lastName\" : \"Name\" , \"middleName\" : null , \"titleBefore\" : \"Dr.\" , \"titleAfter\" : null , userExtSource : " . $objectExamples{"UserExtSource"} . " , additionalUserExtSources : null , attributes : { \"urn:perun:member:attribute-def:def:organization\" : \"Masarykova univerzita\" , \"urn:perun:member:attribute-def:def:mail\" : \"random\@name.cz\" } }";
$objectExamples{"List<Candidate>"} = $listPrepend . $objectExamples{"Candidate"} . $listAppend;
$objectExamples{"List<Candidate>"} = $objectExamples{"List<Candidate>"};

$objectExamples("MemberCandidate") = "{ \"candidate\" : " . objectExamples("Candidate") . " , \"member\" : " . objectExamples("Member") . " , \"richUser\" : " . objectExamples("RichUser") . " }";
$objectExamples("List<MemberCandidate>") = $listPrepend . $objectExamples("MemberCandidate") . $listAppend;
$objectExamples("List<MemberCandidate>") = $objectExamples("List<MemberCandidate>");

$objectExamples{"SecurityTeam"} = "{ \"id\" : 924 , \"name\" : \"CSIRT\" , \"description\" : \"My CSIRT\" }";
$objectExamples{"List<SecurityTeam>"} = $listPrepend . $objectExamples{"SecurityTeam"} . $listAppend;
$objectExamples{"List<SecurityTeam>"} = $objectExamples{"List<SecurityTeam>"};

$objectExamples{"Pair<User,String>"} = "{ \"left\" : " . $objectExamples{"User"} ." , \"right\" : \"Some reason\" }";
$objectExamples{"List<Pair<User,String>>"} = $listPrepend . $objectExamples{"Pair<User,String>"} . $listAppend;
$objectExamples{"List<Pair<User,String>>"} = $objectExamples{"List<Pair<User,String>>"};

# SUB HELP
# help info
sub help {
	return qq{
  Generate HTML javadoc for Perun RPC
  ----------------------------------------
  Available options:
  --directory  | -d path to directory with rpc methods
  --output     | -o path to directory to write output files to
  --help       | -h prints this help

};
}

# SUB PROCESSFILE
# process every file in directory
sub processFile {
	my $file_name = $_[0];
	my $dir_path = $_[1];
	my $fullPath = $dir_path . "/" . $file_name;
	my $managerName;
	if($file_name =~ m/^(.*)Method\.java/) {
		$managerName = "$1";
	} elsif ($file_name =~ m/^(.*)\..*/) {
		$managerName = "$1";
	} else {
		$managerName = $file_name;
	}

	# open file
	print "PROCESSING: " . $managerName . " ($fullPath)\n";
	open my $handler, $fullPath or die "Could not open $fullPath";

	# phase of looking for method
	# 0 - looking for start of javadoc symbols /*# (if found -> 1)
	# 1 - looking for parts of one javadoc or end of this javadoc (if end found -> 2)
	# 2 - looking for another javadoc (if found -> 1) or name of method (if found -> 0)
	my $phase=0; #phase of looking in file
	my @methods = ();
	my $method = {};
	my @params = ();
	my @textLines = ();
	my @throws = ();
	my $deprecated = 0;
	my $exampleResponse;
	my @exampleParams = ();
	my $return;
	my @javadocs = (); #array with javadocs of one method
	while (my $line = <$handler>) {
		# skip every line which start // (one line comment)
		next if($line =~ m/^\s*\/\/.*/);

		# skip all comments which start /* without hash
		# !!! THIS IS NOT IMPLEMENTED, IF THERE IS SOME /* COMMENT ON IMPORTANT PLACE
		# IT CAN CREATE BAD DOCUMENTATION, NEED TO SOLVE OR DO NOT USE THIS TYPE OF COMMENTS

		switch ($phase) {
			case 0 {
				if($line =~ m/^\s*\/\*\#/) { $phase=1; }
			}
			case 1 {
				if($line =~ m/^\s*[*]\s*\@param\s*(.*)/) {
					push @params, $1;
				} elsif($line =~ m/^\s*\*\s*[@]return\s*(.*)/) {
					$return="$1";
				} elsif($line =~ m/^\s*\*\s*[@]exampleResponse\s*(.*)/) {
					$exampleResponse="$1";
				} elsif($line =~ m/^\s*\*\s*[@]exampleParam\s*(.*)/) {
					push @exampleParams, $1;
				} elsif($line =~ m/^\s*\*\s*[@]deprecated\s*(.*)/) {
					$deprecated=1;
				} elsif($line =~ m/^\s*\*\s*[@]throw\s*(.*)/) {
					push @throws, $1;
				} elsif($line =~ m/^\s*\*\//) {
					$phase=2;
					# local variables for purpose of saving information
					my $javadoc={};
					my @localParams = @params;
					my @localThrows = @throws;
					my @localTextLines = @textLines;
					my @localExampleParams = @exampleParams;
					# save one javadoc
					$javadoc->{'params'} = \@localParams;
					$javadoc->{'throws'} = \@localThrows;
					$javadoc->{'return'} = $return;
					$javadoc->{'exampleResponse'} = $exampleResponse;
					$javadoc->{'exampleParams'} = \@localExampleParams;
					if ($deprecated == 1) {
						$javadoc->{'deprecated'} = $deprecated;
					}
					$javadoc->{'text'} = \@localTextLines;
					push @javadocs, $javadoc;
					#reset all needed variables
					@params=();
					@textLines=();
					@throws=();
					@exampleParams=();
					undef $return;
					undef $exampleResponse;
					$deprecated=0;
					$javadoc=();
				} elsif($line =~ m/^\s*\*\s*(.*)/) {
					push @textLines, $1;
				} else {
					#skip this line, it is probably space or something nasty, we dont need it
				}
			}
			case 2 {
				if($line =~ m/^\s*\/[*]\#/) {
					$phase=1;
				} elsif($line =~ m/^\s*([a-zA-Z0-9]+)\s*\{.*/) {
					$phase=0;
					$method->{'name'}=$1;
					#local variable for saving all javadocs
					my @localJavadocs = @javadocs;
					$method->{'javadocs'}= \@localJavadocs;
					#local variable for saving one method
					my $localMethod = $method;
					push @methods, $localMethod;
					#reset all needed variables
					@javadocs = ();
					$method = {};
				} else {
					#skip this line, it is probably some code or empty line, we dont need it
				}
			}
		}
	}
	if($phase != 0) {
		die "Some phase was not ended correctly for file $file_name and phase $phase!";
	}

	#save all parsed methods
	$managers->{$managerName}=\@methods;

	close($handler);
}

#START OF MAIN PROGRAM

# default options
my $directory;
GetOptions ("help|h" => sub {print help(); exit 0;},
	"directory|d=s" => \$directory , "output|o=s" => \$OUTPUT_DIR) || die help();

#if directory with methods is not set
unless (defined($directory)) { die "ERROR: Path to directory where RPC methods are is required \n";}

#if directory with methods not exists
unless (-d $directory) { die "ERROR: Directory " . $directory . " not exists!"; }

#open input dir
opendir (DIR, $directory) or die "Cannot open directory with files (with methods)!";

#create output dir if not exists yet
unless (-d $OUTPUT_DIR) {
	mkdir $OUTPUT_DIR;
	print $OUTPUT_DIR . " was created. \n";
}

#process all files in dir
while (my $file = readdir(DIR)) {
	next if ($file =~ m/^\./);
	processFile($file, $directory)
}

# PRINT MAIN FILE

open FILE,">$OUTPUT_DIR/rpc-javadoc-howto.shtml" or die "Cannot open $OUTPUT_DIR/rpc-javadoc-howto.shtml: $! \n";

print FILE qq{

RPC API documentation

		Back to Documentation
		General
		How to use Perun RPC
		Managers
};

foreach my $manager (sort(keys %{$managers})) {
	print FILE "$manager"
}

print FILE "

";

print FILE qq{

How to use Perun RPC

Perun RPC is not using traditional REST API, so please read properly, how are your requests handled and what are expected responses.

Authentication

Authentication of person / component making a request is done by Apache web server and depends on it's current configuration. Perun can internally handle identity provided by Kerberos, Shibboleth IdP, Certificate or REMOTE_USER like Apache config. Identity info provided by Apache to Perun is used only to match identity to user object from Perun (if exists).

Authorization

Authorization is done on Perun side based on privileges associated with user, which are stored inside Perun. Few methods are accessible without authorization (e.g. in order to allow new users to register to Perun).

Request type GET / POST

We recommend to use POST requests all the time. It's most simple, since all parameters are transferred in a request body in JSON format and response is the same.

You can optionally use GET requests, but then parameters must be present in a request URL (as a query) and you can call only listing methods (get, list). Methods changing state (create, delete, update, add, remove,…) must be POST.

URL structure

http(s)://[server]/[authentication]/rpc/[format]/[manager]/[method]?[params]

[server]

Is hostname of your Perun instance.

[authentication]

Is type of expected authentication which must be supported by Perun instance. Standard values are: fed (Shibboleth IDP), krb (Kerberos), cert (Certificate), non (without authorization).

[format]

Format of data for transfer. Possible values are: json, jsonp and voot.

[manager]

Name of manager to call method in (in a camel case).

[method]

Name of method to call from selected manager (in a camel case).

[params]

Query parameters passed in URL (for GET requests) in a following manner:
?param1=value&param2=value&listParam[]=value1&listParam[]=value2

Passing parameters

When using GET requests, method parameters must be present in a URL (see above for full overview).
URL:  ...vosManager/getVoById?id=123

When using POST, expected parameters are properties of JSON object in request body, eg.:
URL:  ...vosManager/getVoById
Body: { "id": 123 }

If you are passing whole objects (e.g. on object creation), you usually omit not relevant properties and id is set to 0.

URL:  ...vosManager/createVo
Body: { "id": 0 , "name" : "My VO" , "shortName" : "myVo" }

Note: VO object is missing properties like: beanName, createdAt, createdBy etc.

Perun API is using mostly only IDs of objects, so you don't have to care about exact object properties values. Objects are retrieved only internally and must pass existence and authorization checks.

HTTP return codes

If OK, all requests to Perun API returns 200 return code.

When processing of your request throws an exception in java code, response is still 200, but it's body is replaced with serialized Exception object. Any other return code signalize problem with a server (not found, internal error etc.).

Return values

If response of method call is an object or list of them, correct JSON representation is returned.

If response of method call is null or any primitive type (integer, string, boolean), returned value is simple string. So you will get: null and NOT: { "value": null }

Usage of JSON/JSONP formats

Perun can handle both formats. While both consumes valid JSON as input, second one produces response with padding:

Request:  someUrl?callback=call1&param=value
Response: call1(response);

If you omit callback query parameter, you will get:

Response: null(response);

When using JSONP, returned objects are stripped of non relevant properties like createdAt, createdBy, modifiedAt, modifiedBy etc. You can get them when using standard JSON.

};

print FILE qq{

};

close (FILE);

foreach my $manager (sort(keys %{$managers})) {

	open FILE,">$OUTPUT_DIR/rpc-javadoc-$manager.shtml" or die "Cannot open $OUTPUT_DIR/rpc-javadoc-$manager.shtml: $! \n";

	print FILE qq{

RPC API documentation

		Back to Documentation
		General
		How to use RPC
		Managers
	};

	foreach my $menuManager (sort(keys %{$managers})) {

		my $activeLink = "";
		if ($menuManager eq $manager) {
			$activeLink = "" . $menuManager . "";
		} else {
			$activeLink = $menuManager;
		}

		print FILE qq{$activeLink};

	}

	print FILE "
";

	#print FILE qq{
};
	print FILE qq{
};

	print FILE qq{
$manager
};

	my $methods = $managers->{$manager};
	my $sortedMethods={};

	#prepare sorted methods
	foreach my $notSortedMethod (@{$methods}) {
		#get names of methods
		my $methodName = $notSortedMethod->{'name'};
		my $javadocs = $notSortedMethod->{'javadocs'};
		$sortedMethods->{$methodName}=$notSortedMethod->{'javadocs'};
	}

	#print sorted methods
	foreach	my $sortedMethod (sort(keys %{$sortedMethods})) {
		my $javadocs = $sortedMethods->{$sortedMethod};

		#print info about javadocs
		my $counter = 0;
		foreach my $javadoc (@{$javadocs}) {

			$counter++;

			my $throws = $javadoc->{'throws'};
			my $return = $javadoc->{'return'};
			my $params = $javadoc->{'params'};
			my $texts = $javadoc->{'text'};
			my $deprecated = $javadoc->{'deprecated'};
			my $exampleResponse = $javadoc->{'exampleResponse'};
			my $exampleParamsLocal = $javadoc->{'exampleParams'};

			# FILL MAP with example params
			# $exampleParams{'param'}->"example_itself"
			my %exampleParams = ();
			foreach my $parameter (@$exampleParamsLocal) {
				if (defined $parameter && $parameter ne "") {
					my @rest = split(/ /, $parameter);
					splice(@rest, 0, 1);
					my $restPar = join(" ", @rest);
					$exampleParams{(split(/ /, $parameter))[0]} = $restPar;
				}
			}

			# CREATE ANNOTATION

			my $methodAnnotation = "";
			if (defined $params) {
				foreach my $par (@$params) {
					if (defined $par && $par ne "") {

						my $par1 = (split(/ /, $par))[1];
						$par1 =~ s/\Q<\E/</g;
						$par1 =~ s/\Q>\E/>/g;

						$methodAnnotation .= $par1;
						$methodAnnotation .= " ";
						$methodAnnotation .= (split(/ /, $par))[0];
						$methodAnnotation .= ", "
					}
				}
			}
			if (length($methodAnnotation) >= 2) { $methodAnnotation = substr($methodAnnotation, 0, -2) }

			# is deprecated ?
			my $depr = "";
			if (defined $deprecated) {
				#$depr = "Deprecated";
				$depr = 'Deprecated';
			}

			# PRINT ANNOTATION

			print FILE qq{

						$depr

							$sortedMethod ( $methodAnnotation )

			};

			#

			# PRINT MAIN TEXT
			print FILE "
";
			print FILE join(" " , @{$texts});

			# PRINT PARAM TABLE

			if (@{$params}) {

				print FILE "

Parameter name	Data type	Description
";

				#print params
				foreach my $param (@{$params}) {
					my @par = split(/ /, $param);

					$par[1] =~ s/\Q<\E/</g;
					$par[1] =~ s/\Q>\E/>/g;

					print FILE '
' . $par[0] . "	" . $par[1] . "	";
					splice(@par, 0, 2);
					print FILE join(" ", @par);
					print FILE "
\n";
				}

				print FILE "
";
			}

			# PRINT THROWS TABLE

			print FILE "

Thrown exception	Description
";

			push (@{$throws}, "PrivilegeException When caller is not allowed to call this method. Result may vary based on caller identity and provided parameter values.");
			push (@{$throws}, "InternalErrorException When unspecified error occur. See exception param message for explanation.");
			push (@{$throws}, "RpcException Wrong usage of API (wrong url, missing param etc.). See exception params message and type for explanation.");

			foreach my $throw (sort @{$throws}) {

				my @tro = split(/ /, $throw);
				splice(@tro, 0, 1);
				my $restTro = join(" ", @tro);

				print FILE "
" . (split(/ /, $throw))[0] . "	" . $restTro . "
"
			}
			#print FILE '
PrivilegeException	When caller is not allowed to call this method. Result may vary based on caller identity and provided parameter values.
';
			#print FILE '
InternalErrorException	When unspecified error occur. See exception message param for explanation.
';
			#print FILE '
RpcException	When caller is using API wrong way (wrong url, missing param etc.). See exception message and type params for explanation.
';

			print FILE "
";

			# PRINT RETURN TABLE

			print FILE "

Return type	Description
";

			if(defined $return) {

				my @ret = split(/ /, $return);
				# escape <> in return type
				$ret[0] =~ s/\Q<\E/</g;
				$ret[0] =~ s/\Q>\E/>/g;

				print FILE '
' . $ret[0] . "	";
				splice(@ret, 0, 1);
				print FILE join(" ", @ret);
				print FILE "
\n";
			} else {
				print FILE '
void
';
			}

			print FILE "
";

			# PRINT EXAMPLE URL

			my $managerUrl = lcfirst($manager);
			print FILE qq{

Example URL
https://[hostname]/krb/rpc/json/$managerUrl/$sortedMethod

            };

			print FILE "

see URL structure

";

			# PRINT EXAMPLE PARAMS

			if (@{$params}) {

				print FILE "
Example params
{ ";

				#print params
				for (my $count = 0; $count < scalar @{$params}; $count++) {

					my $param = @{$params}[$count];
					my @par = split(/ /, $param);

					my $printPar = "{...}";
					# If we have fixed example for param, use it
					if (exists($exampleParams{$par[0]})) {
						$printPar = $exampleParams{$par[0]};
						# We don't have fixed example, use generic definition
					} elsif ($par[1] eq "int") {
						$printPar = int(rand(100));
					} elsif ($par[1] eq "List") {
						$printPar = "[ {...} , {...} ]";
					} elsif ($par[1] eq "String[]" || $par[1] eq "List<String>") {
						$printPar = "[ \"text\" , \"text\" ]";
					} elsif ($par[1] eq "int[]" || $par[1] eq "List<Integer>") {
						$printPar = "[ " . int(rand(100)) . " , " . int(rand(100)) ." ]";
					} elsif (exists($objectExamples{$par[1]})) {
						$printPar = $objectExamples{$par[1]};
					}

					print FILE "\"" . $par[0] . "\" : " . $printPar;

					if ($count < (scalar @{$params})-1) {
						print FILE " , ";
					}

				}

				print FILE " }
";

				print FILE "

see Passing params

";

			}

			# PRINT EXAMPLE RESPONSE

			print FILE "
Example response
";
			if(defined $return) {
				my @rt = split(/ /, $return);
				if (defined $exampleResponse) {
					print FILE $exampleResponse;
				} elsif (exists($objectExamples{$rt[0]})) {
					print FILE $objectExamples{$rt[0]};
				} elsif ($rt[0] eq "int") {
					print FILE int(rand(100));
				} else {
					print FILE "{ ... TODO ... }";
				}
			} else {
				print FILE "null";
			}
			print FILE "
";

			print FILE "

see Return values

see HTTP return codes

";

			print FILE "

";

		}

	}

	print FILE qq{
};

	print FILE qq{

    };

	close (FILE);
}

#END OF MAIN PROGRAM

#closing DIR
closedir(DIR);
exit 0;


Do you have some problem areas that just won't go away? If you do, then you may be doing everything you can to melt away the fat in your problem zones through diet, but the truth is that you may not be able to zone in and target specific fat on your body.
As nice as it would be, you can't eat a diet full of apples and expect it to target your problem area. Those apples may help you with your weight loss, but the fat that comes off first is going to be the fat that is the easiest for you to lose.
The way our body burns fat is unique to us. While your friend may lose all of their belly fat first, you may lose more weight in your hips or thighs first. There is nothing you can do about that.
Why Are There So Many Diet Books About Targeting Fat?
So, if you can't target stubborn fat with diet, then why are there so many diet books out there that claim you can? The simple answer is because they want you to buy their book, and they know that the incentive to lose fat from your stubborn areas will cause you to shell out your money.
If you look at these books more closely, you will find that the foods they recommend to eat are pretty much all the same. They promote avoiding foods that are high on the glycemic index, and they warn against fried foods and processed foods. They also encourage you to eat healthy fats, vegetables, and healthy grains.
In other words, they promote a healthy diet that encourages weight loss. The way you eat, times you eat, and amount you eat may vary per diet, but the foods are all the same.
As far as diet books that promote belly fat weight loss, it may just be a fact that most people are prone to lose weight off their belly first. If there was enough research to prove that you could target belly fat loss, then everyone would have an easy time losing belly fat on these diets, and not everyone does.
How many times have you heard that one diet worked for one person but didn't work for another? As said, all diets promote healthier eating but encourage different times and amounts. The problem is that are genetics and lifestyles our different and so are our bodies.
For example, one of the areas where diets like Trouble Spot Nutrition shine is that they encourage you to start listening to your body to find the perfect times to eat and the perfect amounts to eat. When you eat a healthy diet, and can listen to the signals your body is giving off, you can start to lose weight in all areas of your body, including your stubborn areas.
If you are eating a healthy diet, and you are losing weight or maintaining a healthy weight, that is what is important. If you cannot lose that extra fat from a certain part of your body, make sure that you are focused on more than just your diet.
For instance, focus on building muscle, balancing out your hormones, or tackling inflammation in your body. When you have those things under control your body can work at optimal levels and take care of any issues that may still be hanging around.


text:
Surulere è una delle venti aree a governo locale (local government areas) in cui è suddiviso lo stato di Lagos, nella Repubblica Federale della Nigeria. Si estende su una superficie di 23 km² e conta una popolazione di 503.975 abitanti.

Note

Altri progetti

Local government area dello stato di Lagos

redpajama_set_name: RedPajamaWikipedia


Since thousands of years, the mythical blazing red Fenghuang is the symbol of luck in China. According to legend, he created the world together with Pangu, who had emerged from Yin and Yang at the very outset. The strong trust in him in the olden days provided the Fenghuang with mythical powers to share luck with all the peoples of the earth. But since science has taken over the world and the trust in him has fallen into oblivion, the powers have slowly faded away. To act contrary to this weakness the Fenghuang has chosen an ambassador on earth to bring back the trust in him and release his powers once again. The elect is a young tiger from Guilin, called Feng, who takes his destiny seriously, because a world without luck cannot be lucky.


text:
Call To Persevere In Praying and Working for Peace
Please support the mission of
the Dominican Friars.
Justice Preaching Archive
CALL TO PERSEVERE IN PRAYING
AND WORKING FOR PEACE
By Sister Brenda Walsh, Racine Dominican
On November 29th 2010, Fr. Dan Berrigan, S.J. spoke at a Jesuit Retreat House in Staten Island and called on those present and on all peace-makers to persevere in their efforts to create a just and peaceful society. Fr. Berrigan, now 89 years of age, has given his life to peace-making, and often at a high price in his own life. He spent many months in prison for his public demonstrations on behalf of peace. The National Catholic Reporter for December 10, 2010, tells the whole story of Berrigan's presentation. He told his audience that they may see few positive outcomes in their lifetime, but that should not deter them in their steady efforts on behalf of peace. If we do our best and trust in God's unfailing presence, the outcomes will take care of themselves. Fr. Berrigan encouraged people to work together as communities and not let fear deter them in their efforts. We need to face the future with courage and hope.
Looking back over the past decades, it seems that wars, famine, cynicism and lack of hope seem to be the order of the day. Our world is perceived by many as an unsafe place to live or raise a family. Still other perceive this as a great time to be alive when we have endless opportunities to create a better world. Fr. Berrigan and many others are living witnesses of that fact. They are making a big difference through their strong belief that another world is indeed possible./ There is a hunger for hope and for evidence of a world different than the stories we hear about through the daily news. People are looking for evidence of new principles of unity, respect, peace and reconciliation. I believe there is evidence in local community groups working for justice in a racial and economic sense as well as in environmental concerns.
Sr. Joan Chittister has been a tireless advocate for peace and justice in both church and society. Some years ago, she started a Women's Peace Initiative, to bring together a group of Jewish women and women from Arab countries who said they did not want their children dying in war. They worked to bring about peace between Israel and Palestine. A local woman in Racine, Wisconsin, now nearing 100 years old, Corrine Owens, who devoted her life to justice and peace , and now like Berrigan still uses every opportunity she sees to speak about peace and to continue her work in these areas.
I will never forget the peacemaking efforts in my own country, Ireland that was torn apart for centuries by warring groups over control of the land. In the latter part of the last century, representative from English and Irish political rule got together and worked out an unprecedented peace agreement. The warring camps came together worked out an agreement that still is in place. Occasionally some differences need to be addressed to keep the peace movement going. A great example of the need for perseverance in our working for peace!
Each day, we can make a daily choice for justice and peace in our minds, our hearts, our families, our communities and our world. With divine power always available to us, there are no limits to what we can accomplish. We need to renew our belief that another world is indeed possible. Let us begin today with courage, conviction and hope. The example of Fr. Berrigan calls us to renew our efforts and our trust and work to make our world more like the one that God has in mind for all people. "Let there be peace on earth and let it begin with me."
Just click on a title below to read the article.
- The latest titles are listed first. -
• VIEW FROM DEATH ROW •
• RESPONDING TO JOHN GRISHAM •
• A New Year •
• RACE, INNOCENCE AND THE END OF THE DEATH PENALTY •
• Two Essays on Peace •
• A RENEWED CALL TO RESTORE CIVILITY IN POLITICAL DEBATES AND OTHER AREAS •
• A CALL TO HELP ELDERS RECLAIM AND LIVE THEIR HUMAN VALUES •
• A CALL TO NAME •
• A Call To Respect and Welcome Diversity - A Challenge of Our Faith •
• Addressing White Power and Priviledge •
• An Ethical Reflection on Work... •
• A Re-energized Catholic Church •
• A Renewed Call for Nuclear Disarmament •
• A THEOLOGY FOR CARING FOR THE EARTH •
• Called to Proclaim and Live With Moral Courage •
• Called To Protect the Poor In Our Economic System •
• A RENEWED CALL TO HEAL A DIVIDED WORLD •
• Call To Persevere In Praying and Working for Peace •
• Care For the Environment •
• Care for the Earth •
• Caritas in Veritate •
• The Challenge of Discipleship •
• Comprehensive Immigration Reform •
• WORKING TO CREATE A CULTURE OF PEACE •
• The Death Penalty Revisited •
• What Is Ecological Economics •
• Eliminating Global Poverty •
• Global Warming... Calling for an Urgent and Ethical Response •
• God's Fool •
• Green Congretations - A Growing Movement •
• More Gun Control •
• Healing the Racial Divide •
• Speaking the Truth in Today's World Takes Courage •
• Justice and Compassion •
• Labor Issues and the Catholic Church •
• Is More Consumer Spending the Answer? •
• Moving from A Culture of Violence to a Culture of Peace •
• Preaching Justice & Moving from Violence to Peace •
• MULTICULTURALISM – A GIFT AND A CHALLENGE •
• OF TITLES AND TITTLES •
• Reaching For the Stars - Brenda Walsh •
• A Call To Reduce Prison Population •
• The Relationship Between Labor And the Catholic Church •
• Sermon On Domestic Violence •
• Sustainability •
• The Death Penalty •
• The New Economy Movement •
• The Role of Ethical Standards... •
• War Is Not the Answer •
• Witnesses To Hope •
© Copyright 2005 - 2021 - Dominican Friars

redpajama_set_name: RedPajamaCommonCrawl


text:
Release Date: Dec 1, 2017
Genre(s): Country
When Chris Stapleton released the first installment of From A Room in May of 2017, it seemed possible that the two records would add up to a grand statement, but From A Room: Volume 2 is essentially the mirror image of its predecessor. Both records clock in at a swift 32 minutes, lasting no more than nine songs -- brief even by the standards of '60s or '70s country, when it was common to release two or three records a year. Intentionally or not, Stapleton winds up evoking this era with the two volumes of From A Room, neither of which is dependent on the other but neither of which can be seen without its sibling.
Like its predecessor from earlier this year, volume two of Chris Stapleton's From A Room is a brew of country, folk, blues and Southern rock and soul, recorded at Nashville's vintage RCA Studio A with producer Dave Cobb. The band's the same but leaner, stripped to guitars, bass, drums and Stapleton's mighty voice, with harmonies by his wife, Morgane, smartly moved up in the mix. Again, the songs feel like unearthed classics.
Chris Stapleton toiled for nearly 15 years to become an overnight sensation. After moving to Nashville in the early 2000s, he played in a bluegrass band and co-founded a Southern rock group whose only claim to fame was opening for Zac Brown, all while writing songs for artists like Luke Bryan, Darius Rucker, Blake Shelton, and Lee Ann Womack, among others. He tried his hand at a solo career, releasing a single in 2013 that went nowhere.
Ever since Traveler turned him into a champion of country traditionalism, Chris Stapleton has refused to make anything like a grand statement. Instead, his two From A Room volumes have arrived without overarching themes or concepts; each one is simply a collection of sturdy songs, performed with warmth and passion. But don't knock these albums for their humbleness.
"The Visitor " Neil Young & Promise of the Real The question was never if Neil Young would release an anti-Trump record, but when. "The Visitor" reunites Young with the Lukas Nelson-led band Promise of the Real for a collection of protest songs that reaffirm his well-documented passion for the environment and communal activism. The record alternates between Crazy Horse-style rockers and gentle acoustic folk, though as always Young throws a few curveballs.


text:
Q: Having problems connecting with M2MQTT client library to AWS IoT using ALPN on port 443 I'm using the .net Framework build of m2mqtt.net (available here: https://github.com/mohaqeq/paho.mqtt.m2mqtt).
Connecting with standard mqtt on port 8883 works fine:
_MqttClient = new MqttClient(IoTHost, IoTPort, true, certificate.CertCA, certificate.CertClient, MqttSslProtocols.TLSv1_2);

Connecting with mqtt on port 443 with ALPN extension doesn't work:
_MqttClient = new MqttClient(IoTHost, IoTPort, true, certificate.CertCA, certificate.CertClient, MqttSslProtocols.TLSv1_2, new RemoteCertificateValidationCallback(RemoteCertificateValidationCallback), new LocalCertificateSelectionCallback(SelectLocalCertificate), ALPNProtocols);

ALPNProtocols argument is set up per requirements:
List<string> ALPNProtocols = new List<string>();
ALPNProtocols.Add("x-amzn-mqtt-ca");

When I connect (_MqttClient.Connect(serial);) everything runs smoothly in the m2mqtt.net project file until it reaches line 1102 in MqttClient.cs:
// wait for answer from broker
if (this.syncEndReceiving.WaitOne(timeout))

It then waits for 30 secs and then times out and throws an exception: "Exception of type 'uPLibrary.Networking.M2Mqtt.Exceptions.MqttCommunicationException' was thrown."
I did a network trace and there is no ALPN information/negotiation seen in the TLS handshake, so probably that's why the server doesn't reply.
I'm running the standard project without any modifications. SSL symbol is defined, project is set to .net framework 4.5.
I assume ALPN is supported in the .net framework version of the build since nothing is mentioned here: https://libraries.io/nuget/M2MqttDotnetCore. I can't seem to find any issues with my ALPN arguments.
Anybody had any luck with this?

A: I think the below code snippet taken from MqttNetworkChannel.cs shows that M2Mqtt will only respect the ALPN argument if it's running in a .net standard/.net core environment.
It would have been nice if the documentation made clear that ALPN is not supported in the .net framework build...
#if (NETSTANDARD1_6 || NETSTANDARD2_0 || NETCOREAPP3_1)

                if ((this.alpnProtocols != null) && (0 < this.alpnProtocols.Count))
                {
                    this.sslStream = new SslStream(this.netStream, false);
                    SslClientAuthenticationOptions authOptions = new SslClientAuthenticationOptions();
                    List<SslApplicationProtocol> sslProtocolList = new List<SslApplicationProtocol>();
                    foreach (string alpnProtocol in this.alpnProtocols)
                    {
                        sslProtocolList.Add(new SslApplicationProtocol(alpnProtocol));
                    }
                    authOptions.ApplicationProtocols = sslProtocolList;
                    authOptions.EnabledSslProtocols = MqttSslUtility.ToSslPlatformEnum(this.sslProtocol);
                    authOptions.TargetHost = remoteHostName;
                    authOptions.AllowRenegotiation = false;
                    authOptions.ClientCertificates = clientCertificates;
                    authOptions.EncryptionPolicy = EncryptionPolicy.RequireEncryption;

                    this.sslStream.AuthenticateAsClientAsync(authOptions).Wait();
                }
                else
                {
                    this.sslStream.AuthenticateAsClientAsync(this.remoteHostName,
                        clientCertificates,
                        MqttSslUtility.ToSslPlatformEnum(this.sslProtocol),
                        false).Wait();
                }
#else
                this.sslStream.AuthenticateAsClient(this.remoteHostName,
                    clientCertificates,
                    MqttSslUtility.ToSslPlatformEnum(this.sslProtocol),
                    false);
#endif

redpajama_set_name: RedPajamaStackExchange


This high quality, waterproof Audi A4 Rear-view Camera displays clearly in color with its wide angle lens. It is an easy do-it-yourself add-on that makes for a great upgrade to your Audi A4. With an easy mounting design and included pre-wiring, this mini backup camera can be installed on most Audi A4 models without the need for any extra parts. With a few simple, common tools, anyone can now add this useful rear-view camera to their car. It displays flawlessly when connected to any of our Audi A4 2002-2007 Dynavin D99+ Multimedia Navigation Systems.


text:
Q: Why doesn't attribute render work in a custom component in JSF 2.0? I'm making a conceptual test with composite components, custom component in JSF 2.0.
The situation is the next:
I have composite component that receives the only attribute slider which it is a Integer.
I have a custom component 'slider' which has a label ajax that caught the custom event 'valueChange
When that event is fired the listener #{myBean.changeInterval} is executed.
But I don't know why the component outputText with id 'grouper' not executed.
I thinks it is a problem with selectors in jsf. But I'm not sure.
Thanks for help!
The composite component.
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:slider="http:/slider"
xmlns:chart="http:/chart">

<!-- INTERFACE -->
<composite:interface>
  <composite:attribute name="slider" required="true"/>
</composite:interface>

<!-- IMPLEMENATION -->
<composite:implementation>

                <h:form>

                    <h:inputText value="#{myBean.grouper}">
                        <f:ajax event="keyup"  render=":j_idt33:j_idt56:j_idt57:grouper :out"></f:ajax>
                    </h:inputText>

                    <h:outputText  id="grouper" value="#{myBean.grouper}"   ></h:outputText>

                    <slider:slider slider="#{cc.attrs.slider}" id="slider" >
                            <f:ajax event="valueChange" listener="#{myBean.changeInterval}" render=":j_idt33:j_idt56:j_idt57:grouper :out"    ></f:ajax>
                    </slider:slider>

                </h:form>

</composite:implementation>

The custom component.
ClientBehaviorHolder,Serializable {
/**
 *
 */
private static final long serialVersionUID = 1L;

protected static final String FAMILY = "slider";
protected static final String RENDERTYPE = "com.component.jsf2.slider.SliderRender";
private   static final String EVENT_VALUE_CHANGE ="valueChange";

enum PropertyKeys {
    slider;

     String toString;
     PropertyKeys(String toString) { this.toString = toString; }
        PropertyKeys() { }
        public String toString() {
            return ((toString != null) ? toString : super.toString());
        }
}

@Override
public String getFamily() {
    return FAMILY;
}
@Override
public String getRendererType() {
    return RENDERTYPE;
}

@Override
public void decode(FacesContext context) {

    Map<String,String> map = context.getExternalContext().getRequestParameterMap();
    for (String key : map.keySet()) {
        System.out.println("key : " + key  + " , value  : " + map.get(key));
    }

    ExternalContext external = context.getExternalContext();
    Map<String, String> params = external.getRequestParameterMap();
    String behaviorEvent = params.get("javax.faces.behavior.event");

    if (EVENT_VALUE_CHANGE.equals(behaviorEvent)) {

        String grouper = params.get("grouper");
        if (grouper != null) {
            setSlider(Integer.parseInt(grouper));
        }

    }

    Map<String, List<ClientBehavior>> behaviors = getClientBehaviors();
    if (behaviors.isEmpty()) {
        return;
    }

    if (behaviorEvent != null) {
        List<ClientBehavior> behaviorsForEvent = behaviors.get(behaviorEvent);
        if (behaviors.size() > 0) {
            String behaviorSource = params.get("javax.faces.source");
            String clientId = getClientId(context);
            if (behaviorSource != null && behaviorSource.equals(clientId)) {
                for (ClientBehavior behavior: behaviorsForEvent) {
                    behavior.decode(context, this);
                }
            }
        }
    }
}

public Integer getSlider() {
    return (Integer) getStateHelper().eval(PropertyKeys.slider, null);
}

public void setSlider(Integer slider) {
    getStateHelper().put(PropertyKeys.slider, slider);
}

private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList(EVENT_VALUE_CHANGE));

@Override
public Collection<String> getEventNames() {
    return EVENT_NAMES;
}

@Override
public String getDefaultEventName() {
  return EVENT_VALUE_CHANGE;
}

}
The managed Bean (Mybean) with a listener
@ViewScoped

@ManagedBean
public class MyBean implements Serializable   {
/**
 *
 */
private static final long serialVersionUID = 1L;

Integer value = 1;

public void changeInterval(AjaxBehaviorEvent e)
{
    //AjaxBehavior behavior = (AjaxBehavior) e.getBehavior();
    SliderComponent componet = (SliderComponent) e.getComponent();
    value= componet.getSlider();
}

public Integer getGrouper  ( ) {

    return value;
}

public void setGrouper (Integer value  ) {
    this.value = value;
}

}


text:
Shape model and surface properties of the OSIRIS-REx target Asteroid (101955) Bennu from radar and lightcurve observations
Michael C. Nolan, Christopher Magri, Ellen S. Howell, Lance A M Benner, Jon D. Giorgini, Carl W. Hergenrother, R. Scott Hudson, Dante Lauretta, Jean Luc Margot, Steven J. Ostro, Daniel J. Scheeres
Lunar and Planetary Lab
We determine the three-dimensional shape of near-Earth Asteroid (101955) Bennu based on radar images and optical lightcurves. Bennu was observed both in 1999 at its discovery apparition, and in 2005 using the 12.6-cm radar at the Arecibo Observatory and the 3.5-cm radar at the Goldstone tracking station. Data obtained in both apparitions were used to construct a shape model of this object. Observations were also obtained at many other wavelengths to characterize this object, some of which were used to further constrain the shape modeling. The lightcurve data, along with an initial determination of the rotation period derived from them, simplified and improved the shape modeling.Below we briefly describe the observations and shape modeling process. We discuss the shape model and the implications for the possible formation and evolution of this object. We also describe the importance and limitations of the shape model in view of the fact that this object is the target of the OSIRIS-REx spacecraft mission.
https://doi.org/10.1016/j.icarus.2013.05.028
radar tracking
surface properties
tracking stations
Asteroid Bennu
Asteroids, Rotation
Asteroids, Surfaces
Radar observations
Nolan, M. C., Magri, C., Howell, E. S., Benner, L. A. M., Giorgini, J. D., Hergenrother, C. W., ... Scheeres, D. J. (2013). Shape model and surface properties of the OSIRIS-REx target Asteroid (101955) Bennu from radar and lightcurve observations. Icarus, 226(1), 629-640. https://doi.org/10.1016/j.icarus.2013.05.028
Shape model and surface properties of the OSIRIS-REx target Asteroid (101955) Bennu from radar and lightcurve observations. / Nolan, Michael C.; Magri, Christopher; Howell, Ellen S.; Benner, Lance A M; Giorgini, Jon D.; Hergenrother, Carl W.; Hudson, R. Scott; Lauretta, Dante; Margot, Jean Luc; Ostro, Steven J.; Scheeres, Daniel J.
In: Icarus, Vol. 226, No. 1, 09.2013, p. 629-640.
Nolan, MC, Magri, C, Howell, ES, Benner, LAM, Giorgini, JD, Hergenrother, CW, Hudson, RS, Lauretta, D, Margot, JL, Ostro, SJ & Scheeres, DJ 2013, 'Shape model and surface properties of the OSIRIS-REx target Asteroid (101955) Bennu from radar and lightcurve observations', Icarus, vol. 226, no. 1, pp. 629-640. https://doi.org/10.1016/j.icarus.2013.05.028
Nolan MC, Magri C, Howell ES, Benner LAM, Giorgini JD, Hergenrother CW et al. Shape model and surface properties of the OSIRIS-REx target Asteroid (101955) Bennu from radar and lightcurve observations. Icarus. 2013 Sep;226(1):629-640. https://doi.org/10.1016/j.icarus.2013.05.028
Nolan, Michael C. ; Magri, Christopher ; Howell, Ellen S. ; Benner, Lance A M ; Giorgini, Jon D. ; Hergenrother, Carl W. ; Hudson, R. Scott ; Lauretta, Dante ; Margot, Jean Luc ; Ostro, Steven J. ; Scheeres, Daniel J. / Shape model and surface properties of the OSIRIS-REx target Asteroid (101955) Bennu from radar and lightcurve observations. In: Icarus. 2013 ; Vol. 226, No. 1. pp. 629-640.
@article{9e294c149f974608ace9d6eb8bfcaf6c,
title = "Shape model and surface properties of the OSIRIS-REx target Asteroid (101955) Bennu from radar and lightcurve observations",
abstract = "We determine the three-dimensional shape of near-Earth Asteroid (101955) Bennu based on radar images and optical lightcurves. Bennu was observed both in 1999 at its discovery apparition, and in 2005 using the 12.6-cm radar at the Arecibo Observatory and the 3.5-cm radar at the Goldstone tracking station. Data obtained in both apparitions were used to construct a shape model of this object. Observations were also obtained at many other wavelengths to characterize this object, some of which were used to further constrain the shape modeling. The lightcurve data, along with an initial determination of the rotation period derived from them, simplified and improved the shape modeling.Below we briefly describe the observations and shape modeling process. We discuss the shape model and the implications for the possible formation and evolution of this object. We also describe the importance and limitations of the shape model in view of the fact that this object is the target of the OSIRIS-REx spacecraft mission.",
keywords = "Asteroid Bennu, Asteroids, Rotation, Asteroids, Surfaces, Radar observations",
author = "Nolan, {Michael C.} and Christopher Magri and Howell, {Ellen S.} and Benner, {Lance A M} and Giorgini, {Jon D.} and Hergenrother, {Carl W.} and Hudson, {R. Scott} and Dante Lauretta and Margot, {Jean Luc} and Ostro, {Steven J.} and Scheeres, {Daniel J.}",
doi = "10.1016/j.icarus.2013.05.028",
journal = "Icarus",
T1 - Shape model and surface properties of the OSIRIS-REx target Asteroid (101955) Bennu from radar and lightcurve observations
AU - Nolan, Michael C.
AU - Magri, Christopher
AU - Howell, Ellen S.
AU - Benner, Lance A M
AU - Giorgini, Jon D.
AU - Hergenrother, Carl W.
AU - Hudson, R. Scott
AU - Lauretta, Dante
AU - Margot, Jean Luc
AU - Ostro, Steven J.
AU - Scheeres, Daniel J.
N2 - We determine the three-dimensional shape of near-Earth Asteroid (101955) Bennu based on radar images and optical lightcurves. Bennu was observed both in 1999 at its discovery apparition, and in 2005 using the 12.6-cm radar at the Arecibo Observatory and the 3.5-cm radar at the Goldstone tracking station. Data obtained in both apparitions were used to construct a shape model of this object. Observations were also obtained at many other wavelengths to characterize this object, some of which were used to further constrain the shape modeling. The lightcurve data, along with an initial determination of the rotation period derived from them, simplified and improved the shape modeling.Below we briefly describe the observations and shape modeling process. We discuss the shape model and the implications for the possible formation and evolution of this object. We also describe the importance and limitations of the shape model in view of the fact that this object is the target of the OSIRIS-REx spacecraft mission.
AB - We determine the three-dimensional shape of near-Earth Asteroid (101955) Bennu based on radar images and optical lightcurves. Bennu was observed both in 1999 at its discovery apparition, and in 2005 using the 12.6-cm radar at the Arecibo Observatory and the 3.5-cm radar at the Goldstone tracking station. Data obtained in both apparitions were used to construct a shape model of this object. Observations were also obtained at many other wavelengths to characterize this object, some of which were used to further constrain the shape modeling. The lightcurve data, along with an initial determination of the rotation period derived from them, simplified and improved the shape modeling.Below we briefly describe the observations and shape modeling process. We discuss the shape model and the implications for the possible formation and evolution of this object. We also describe the importance and limitations of the shape model in view of the fact that this object is the target of the OSIRIS-REx spacecraft mission.
KW - Asteroid Bennu
KW - Asteroids, Rotation
KW - Asteroids, Surfaces
KW - Radar observations
U2 - 10.1016/j.icarus.2013.05.028
DO - 10.1016/j.icarus.2013.05.028
JO - Icarus
JF - Icarus
10.1016/j.icarus.2013.05.028


Aussie Arcade > Pinball > Home Brew Pinball Projects > Homebrew question.
View Full Version : Homebrew question.
Basically it would just be a clone of the original with different artwork, sound & rules but essentially the same game.
Bugger! Would just be to easy!
That's why its a home brew not a commercial game hacked.


text:
I also have an 18-year-old daughter- Priyanka Gandhi
Published: 1, October, 2020 03:14:20 PM; Updated: 2, October, 2020 02:44:26 PM sanjeev
Hathras: After the alleged gang rape of a Dalit girl in Hathras, Uttar Pradesh, there is an outcry from social media on the road in the matter of generosity. On Thursday, former Congress president Rahul Gandhi and UP in-charge Priyanka Gandhi were going to Bulgadi village to meet the victim's family. But in Greater Noida itself, the UP police stopped his convoy. After which both have left for Hathras. The UP Police has sealed all boundaries regarding Priyanka Gandhi and Rahul Gandhi going to Hathras. Section 144 is applicable to the district. No more than 5 people can gather anywhere.
Priyanka Gandhi fiercely targeted the UP government. Talking to a channel, Priyanka said- 'I get angry. I also have an 18-year-old daughter. Every woman should get angry. Where is it written in our Hindu religion that the last rites should be held without family? '
मैं यूपी के मुख्यमंत्री जी से कुछ सवाल पूछना चाहती हूँ-
परिजनों से जबरदस्ती छीन कर पीड़िता के शव को जलवा देने का आदेश किसने दिया?
पिछले 14 दिन से कहां सोए हुए थे आप? क्यों हरकत में नहीं आए?
और कब तक चलेगा ये सब? कैसे मुख्यमंत्री हैं आप? pic.twitter.com/Q2qPcDXDTT
— Priyanka Gandhi Vadra (@priyankagandhi) September 30, 2020
हाथरस की बेटी के पिता का बयान सुनिए।
उन्हें जबरदस्ती ले जाया गया। सीएम से वीसी के नाम पर बस दबाव डाला गया। वो जांच की कार्रवाई से संतुष्ट नहीं हैं।
अभी पूरे परिवार को नजरबंद रखा है। बात करने पर मना है।
क्या धमकाकर उन्हें चुप कराना चाहती है सरकार?
अन्याय पर अन्याय हो रहा है। pic.twitter.com/6lIW1hdvDc
— Priyanka Gandhi Vadra (@priyankagandhi) October 1, 2020
Rahul-Priyanka's convoy stopped on Yamuna Expressway:
Congress leader Rahul Gandhi and Priyanka Gandhi's convoy has been stopped on Greater Noida Yamuna Expressway. Now both the leaders are out on foot along with the Congress workers. Congress leaders are marching towards Hathras. Police is deployed at this place.
Priyanka Gandhi Vadra along with Congress workers walks along the Yamuna Expressway, after her vehicle was stopped by the authorities.
She is on her way to Harthras, to meet the family of the 19-year-old who was allegedly gang-raped. pic.twitter.com/1RP8Bvco8G
— ANI UP (@ANINewsUP) October 1, 2020
SP said -
SP Vikrant Veer will not allow him to enter the city, he has not received any information under his protocol about the arrival of Rahul and Priyanka. Limitations are sealed. No one will be allowed to come to Hathras because the political element can increase the crowd. They will be stopped at the borders keeping in view the possibility of deteriorating law and order.
Case filed against 145 people including Congress District President
After the incident in Hathras on Wednesday, the police has taken major action on Thursday. A case has been registered in Kotwali Sadar against 145 people who were causing a nuisance. A case has been filed against 25 nominated and 120 unidentified, including the Congress President. A lawsuit has been filed against all under sections 147, 149, 332, 353, 336, 347, 427, and 3 of the IPC. Not only this, but the IG has also formed several teams to arrest the accused. There was a ruckus in the city of Kotwali Sadar area on Wednesday, during which the government's consent was damaged.
Tags Congress workersGreater Noida Yamuna ExpresswayUttar PradeshGreater Noida itself
Hathras case update: If she was a rich girl, would she have burnt the body like this?
Randeep Singh Surjewala raises question over Babri Masjid case accused names
Aadhaar card will be used update / create an online driving license register vehicle, change the address
Motor Vehicle Act Rules 2020 new driving licence rules to be implemented from Oct 1
Did you know that now you can use mobile phones while driving?


text:
Irwinton
Adult Daycare in Irwinton, Georgia
We found 0 results for adult daycare in Irwinton, Georgia. We have also included 2 results in surrounding areas. The daily costs of adult daycare in Georgia range from $20 up to $85, with an average expense running around $60. The per month expense averages about $1,800 and ranges between $600 and $2,550. Annually, the median cost is about $15,600, which is less than the nationwide average of $16,900.
Irwinton is a town in Wilkinson County within the State of Georgia. While the encompassing metro area contains 1,342,727 people, there are only 1,841 within the city limits. 27% of the residents are over 55.
Irwinton has an average SeniorScore™ of 64. The city has a mean per capita income of $12,000 and a mean household income is $27,000 (the Georgia state average is $41,000). The current unemployment rate is approximately 8.32% and the average home price is $112,500, which is much less than the Georgia average of $163,500.
Irwinton has ideal mean temperatures, with very mild winters and very balmy summers. The area gets very high amounts of precipitation annually. When compared to similarly-sized cities, Irwinton has low air quality ratings.
To see information on the SeniorScore™ for Irwinton, GA, please visit senioradvice.com/seniorscore/senior-living-in-irwinton-ga.
More About Irwinton, Georgia
Benton House of Dublin
212 Fairview Park Dr
Benton House of Dublin is a senior care facility located as 212 Fairview Park Dr in Dublin, Georgia. With approximately 30,000 people residing in the 31021 zip code, the neighboring area is heavily populated. It is a predominantly ...
23 miles away from Irwinton, GA
VISION PERSONAL CARE HOME
960 Curry Pl
Located at 960 Curry Pl, VISION PERSONAL CARE HOME is a residential care facility in Macon, Georgia. The encompassing area has a medium-density population, with approximately 17,000 poeple living in the zip code of 31211. With a median ...
Adult Daycare in Toomsboro, GA
Adult Daycare in Gordon, GA
Adult Daycare in Jeffersonville, GA
Adult Daycare in Oconee, GA
Adult Daycare in Montrose, GA
Adult Daycare in Milledgeville, GA
Adult Daycare in Dublin, GA
Adult Daycare in Sandersville, GA
Adult Daycare in Wrightsville, GA
Low Cost Senior Housing in Irwinton, GA
Veteran Senior Housing in Irwinton, GA
Pet Friendly Senior Housing in Irwinton, GA


暴雪:We were pretty split internally on Gargoyle vs. Valkyr. Gargoyle is kind of more classic WoW Death Knight from Naxxramas and Valkyr is the slightly newer WotLK Arthas Death Knight. We thought Gargoyle fit Death Knight as a playable class a bit more.


text:
Anorak News | News In Photos: Presented By Noel Edmonds' Man Bag And David Luiz's Hair
News In Photos: Presented By Noel Edmonds' Man Bag And David Luiz's Hair
by Anorak | 22nd, September 2011
THE News in Photos: September 22, 2011
Miriam Gonzalez Duartez and MPs Michael Moore and Danny Alexander (right) applaud her husband Deputy Prime Minister and Party Leader Nick Clegg as he addresses the LibDem Conference at the ICC in Birmingham.
President Barack Obama and first lady Michelle Obama walk down the stairs from Air Force One upon arrival at Andrews Air Force Base, Md., Wednesday, Sept. 21, 2011.
Myanmar's democracy icon Aung San Suu Kyi looks at photographs as she visits the "Save the Irrawaddy" art exhibition on Thursday, Sept. 22, 2011, in Yangon, Myanmar. The exhibition featuring paintings, photographs, cartoons and poems opened on Thursday.
Fans wait for the start of the Rugby World Cup game between South Africa and Namibia at North Harbour Stadium in Auckland, New Zealand, Thursday, Sept. 22, 2011.
Carling Cup – Third Round – Manchester City v Birmingham City – Etihad Stadium
Rifleman Michael Swain (left) and Rifleman Paul Jacobs (2nd left) both injured in Afghanistan, with Paul's brother, Joe Jacobs (right), at the start of a 500-mile charity bike ride from Edinburgh Castle in Scotland to London.
The Ride of Britain has been organised by the Soldiers, Sailors, Airmen and Families Association (SSAFA) Forces Help, to raise money for the charity's work with current and former members of the armed forces and their families.
TV presenter Noel Edmonds and his wife Liz Davies, leave Bristol County Court, where Mr Edmonds is in a legal dispute with former business partner Ulrik Lawson. A property developer today denied he had promised to repay first the £300,000 TV presenter Noel Edmonds had invested in a business venture. The Deal or No Deal star, 62, is suing former friend Ulrik Lawson, 50, for more than £370,000 over a joint deal on a £2.1 million country estate. Edmonds and Mr Lawson each invested £300,000 into buying and renovating the large Wood House estate in South Tawton, Devon, in 2006.
Archaeologists from the University of Southampton and the British School at Rome, work at Portus, the ancient port of Rome in Italy, where they have discovered a large building that was used for ship building. Measuring around 150 metres by 60 metres it would have had at least eight bays, 12 meters tall, used for the building and repair of ships in the early second century. It is the only building of its kind discovered anywhere in the world.
Helen Mirren has her photo taken with a fan as she arrives at the premiere of The Debt at the Curzon Mayfair cinema, London.
Chelsea's David Luiz celebrates after the penalty shoot out in the Carling Cup win over Fulham.
Posted: 22nd, September 2011 | In: Photojournalism Comment | TrackBack | Permalink


Easy care 2 x 1 unit in the lovely and leafy Osborne Gardens complex.
Open plan kitchen over looking the lounge/dining area. Electric cooking. Ceiling fans to living area and master bedroom. Double mirror robes to master bedroom. Bathroom with bath and separate laundry.
Private balcony with lovely outlook. Easy access to bus routes to Fremantle and City and Canning Highway just moments away. Schools and shopping centres close by. Sorry No Pets.
Available NOW! Call Jaimee to schedule a viewing.